了解LR的同窗们都知道,LR采用了最小化交叉熵或者最大化似然估计函数来做为Cost Function,那有个颇有意思的问题来了,为何咱们不用更加简单熟悉的最小化平方偏差函数(MSE)呢?html
我我的理解主要有三个缘由:算法
这里着重讨论下后边两条缘由。函数
假设对于LR咱们依旧采用线性回归的MSE做为代价函数:post
$$J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2$$学习
其中优化
$$h_{\theta}(x)=\frac{1}{1+e^{-\theta^T x}}$$spa
这样代价函数$J(\theta)$关于算法参数$\theta$会是非凸函数,存在多个局部解,咱们能够形式化的表示为下图:3d
如上图所示,$J(\theta)$很是复杂,这并非咱们想要的。咱们想要的代价函数是关于$\theta$的凸函数,这样咱们就能够轻松地根据梯度降低法等最优化手段去轻松地找到全局最优解了。htm
因此,咱们理想的代价函数应该是凸函数,以下图所示:blog
所以,MSE对于LR并非一个理想的代价函数。那么为何交叉熵能够呢?咱们先给出交叉熵的公式形式:
$$J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log{\hat{y}^{(i)}}+(1-y^{(i)})\log{(1-\hat{y}^{(i)})}]$$
即令每一个样本属于其真实标记的几率越大越好,能够证实$J(\theta)$是关于$\theta$的高阶连续可导的凸函数,所以能够根据凸优化理论求的最优解。
note:最小化交叉熵也能够理解为最大化似然估计,即利用已知样本分布,找到最有可能致使这种分布的参数值,即最优解$\theta^{*}$。
咱们简单求解下MSE和交叉熵对应$w$的梯度,首先是MSE:
对于单样本的Loss Function为:
$$L_{MSE}=\frac{1}{2}(y-\hat{y})^{2}$$
$L_{MSE}$对于$w$的梯度为:
$$\frac{\partial L_{MSE}}{\partial w}=(y-\hat{y})\sigma(w, b)h$$
其中$\sigma(w, b)$为sigmoid函数:
$$\sigma(w, b)=\frac{1}{1+e^{-w^{T}x+b}}$$
而以交叉熵为Loss Function:
$$L_{cross\_entropy}=-(y\log{\hat{y}}+(1-y)\log(1-\hat{y}))$$
则对应的梯度为:
$$\frac{\partial L_{cross\_entropy}}{\partial w}=(\hat{y}-y)h$$
咱们对比二者的梯度绝对值能够看出MSE和交叉熵两种损失函数的梯度大小差别:
$$\frac{|\Delta_{MSE}|}{|\Delta_{cross\_entropy}|}=|\sigma^{'}(w, b)| \le 0.25$$
即MSE的梯度是交叉熵梯度的1/4。
note:
其实能够从另一个角度理解为何交叉熵函数相对MSE不易致使梯度弥散:当训练结果接近真实值时会由于梯度算子极小,使得模型的收敛速度变得很是的缓慢。而因为交叉熵损失函数为对数函数,在接近上边界的时候,其仍然能够保持在高梯度状态,所以模型的收敛速度不会受损失函数的影响。