训练神经网络解决二分类问题的原理
昨日训练一个二分类的神经网络,最后一层忘记加sigmoid,发现自己一直做回归的任务,对分类这块还真不太熟练,因此写下这篇博文作为回顾。
定义
KL散度
KL散度是机器学习中常用的一个指标,用于衡量两个概率分布之间的距离,其必须拥有相同的支集,定义为 K L ( P ∣ ∣ Q ) = E x ∼ P [ l o g P ( x ) Q ( x ) ] KL(P||Q)=mathbb{E}_{xsim P}[log frac{P(x)}{Q(x)}] KL(P∣∣Q)=Ex∼P[logQ(x)P(x)]。
交叉熵
交叉熵定义为: H [ P , Q ] = H [ P ] + K L ( P ∣ ∣ Q ) = − E x ∼ P l o g Q ( x ) H[P,Q]=H[P]+KL(P||Q)=-mathbb{E}_{x sim P}logQ(x) H[P,Q]=H[P]+KL(P∣∣Q)=−Ex∼PlogQ(x)
最大似然估计
学习的基本原则就是最大似然估计,学习的其实是概率分布 p m o d e l ( x ; θ ) p_{model}(x; heta) pmodel(x;θ),记数据为 X = { x 1 , x 2 , ⋯ , x n } X={x_1, x_2, cdots, x_n} X={ x1,x2,⋯,xn},则最大似然估计表示为: θ = arg max p m o d e l ( X ; θ ) heta = argmax p_{model}(X; heta) θ=argmaxpmodel(X;θ) 从贝叶斯的角度考虑,这等价于均匀先验下的最大后验估计。将上式改写为对数似然的形式,是: θ = arg max ∑ i = 1 n l o g p m o d e l ( x i ; θ ) heta = argmax sum_{i=1}^{n}logp_{model}(x_i; heta) θ=argmaxi=1∑nlogpmodel(xi;θ) 在等式前乘以常数的行为并不影响最大化过程,因此:
θ = arg max 1 n ∑ i = 1 n l o g p m o d e l ( x i ; θ ) heta = argmax frac{1}{n}sum_{i=1}^{n}logp_{model}(x_i; heta) θ=argmaxn1i=1∑nlogpmodel(xi;θ) 这等价于: θ = arg max E x ∼ p ^ d a t a l o g p m o d e l ( x i ; θ ) heta = argmax mathbb{E}_{xsim hat{p}_{data}}logp_{model}(x_i; heta) θ=argmaxEx∼p^datalogpmodel(xi;θ) 与交叉熵的公式对比,会发现最大似然估计实际上在最小化交叉熵。进一步的,最小化了KL散度,也就是:
θ = arg min E x ∼ p ^ d a t a [ − l o g p m o d e l ( x i ; θ ) d a t a + p ^ d a t a ( x ; θ ) ] heta = argmin mathbb{E}_{xsim hat{p}_{data}}[-logp_{model}(x_i; heta)data+hat{p}_{data}(x; heta)] θ=argminEx∼p^data[−logpmodel(xi;θ)data+p^data(x;θ)] 这是由于第二项与 θ heta θ无关,在最小化的过程中可以忽略。
二分类问题
对于二分类问题,我们实际上在最小化数据经验分布和伯努利分布之间的交叉熵,也就是 p m o d e l ( x ; θ ) = θ x ( 1 − θ ) 1 − x , x ∈ { 0 , 1 } , θ ∈ [ 0 , 1 ] p_{model}(x; heta)= heta^x(1- heta)^{1-x}, xin{0,1}, heta in [0,1] pmodel(x;θ)=θx(1−θ)1−x,x∈{ 0,1},θ∈[0,1] 则最小化交叉熵表示为: θ = arg max E x ∼ p ^ d a t a [ x l o g θ + ( 1 − x ) l o g ( 1 − θ ) ] = a r g m a x 1 n ∑ i = 1 n [ x i l o g θ + ( 1 − x i ) l o g ( 1 − θ ) ] heta = argmax mathbb{E}_{xsim hat{p}_{data}}[xlog heta+(1-x)log(1- heta)]\ =argmax frac{1}{n}sum_{i=1}^{n}[x_ilog heta+(1-x_i)log(1- heta)] θ=argmaxEx∼p^data[xlogθ+(1−x)log(1−θ)]=argmaxn1i=1∑n[xilogθ+(1−xi)log(1−θ)]
神经网络在这里起到的作用实际上是提供参数 θ heta θ,也就是 θ = f ( x ; w ) heta = f(x;w) θ=f(x;w) 因此,我们对于二分类问题,实际的优化是: θ = arg max 1 n ∑ i = 1 n [ x i l o g f ( x ; w ) + ( 1 − x i ) l o g ( 1 − f ( x ; w ) ) ] heta = argmax frac{1}{n}sum_{i=1}^{n}[x_ilogf(x;w)+(1-x_i)log(1-f(x;w))] θ=argmaxn1i=1∑n[xilogf(x;w)+(1−xi)log(1−f(x;w))]
伯努利分布中的参数 θ heta θ代表的含义是 x = 1 x=1 x=1的概率,因此是一个介于 ( 0 , 1 ) (0,1) (0,1)之间的数字。因此,在设计神经网络结构的时候,需要在最后加上一个sigmoid激活函数,使神经网络的输出值归一化。而在损失函数的选择上,我们选择所谓的交叉熵。实际上,回归问题的损失函数也是交叉熵,只不过可以推导出均方损失。