[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不易致使梯度彌散:當訓練結果接近真實值時會由於梯度算子極小,使得模型的收斂速度變得很是的緩慢。而因爲交叉熵損失函數爲對數函數,在接近上邊界的時候,其仍然能夠保持在高梯度狀態,所以模型的收斂速度不會受損失函數的影響。

相關文章
相關標籤/搜索