[Machine Learning] 浅谈LR算法的Cost Function

 

了解LR的同窗们都知道,LR采用了最小化交叉熵或者最大化似然估计函数来做为Cost Function,那有个颇有意思的问题来了,为何咱们不用更加简单熟悉的最小化平方偏差函数(MSE)呢?html

我我的理解主要有三个缘由:算法

  • MSE的假设是高斯分布,交叉熵的假设是伯努利分布,而逻辑回归采用的就是伯努利分布;
  • MSE会致使代价函数$J(\theta)$非凸,这会存在不少局部最优解,而咱们更想要代价函数是凸函数;
  • MSE相对于交叉熵而言会加剧梯度弥散。

 这里着重讨论下后边两条缘由。函数

代价函数为何要为凸函数?

假设对于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会更易致使梯度弥散?

咱们简单求解下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:

  • 上式为何小于0.25能够参考另外一篇博文《[Machine Learning] 深度学习中消失的梯度
  • Cost Function和Loss Function的区别
    • Cost Function:指基于参数$w$和$b$,在全部训练样本上的总成本;
    • Loss Function:指单个训练样本的损失函数。

其实能够从另一个角度理解为何交叉熵函数相对MSE不易致使梯度弥散:当训练结果接近真实值时会由于梯度算子极小,使得模型的收敛速度变得很是的缓慢。而因为交叉熵损失函数为对数函数,在接近上边界的时候,其仍然能够保持在高梯度状态,所以模型的收敛速度不会受损失函数的影响。

相关文章
相关标签/搜索