了解LR的同學們都知道,LR采用了最小化交叉熵或者最大化似然估計函數來作為Cost Function,那有個很有意思的問題來了,為什么我們不用更加簡單熟悉的最小化平方誤差函數(MSE)呢?
我個人理解主要有三個原因:
- MSE的假設是高斯分布,交叉熵的假設是伯努利分布,而邏輯回歸采用的就是伯努利分布;
- MSE會導致代價函數$J(\theta)$非凸,這會存在很多局部最優解,而我們更想要代價函數是凸函數;
- MSE相對於交叉熵而言會加重梯度彌散。
這里着重討論下后邊兩條原因。
代價函數為什么要為凸函數?
假設對於LR我們依舊采用線性回歸的MSE作為代價函數:
$$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}}$$
這樣代價函數$J(\theta)$關於算法參數$\theta$會是非凸函數,存在多個局部解,我們可以形式化的表示為下圖:
如上圖所示,$J(\theta)$非常復雜,這並不是我們想要的。我們想要的代價函數是關於$\theta$的凸函數,這樣我們就可以輕松地根據梯度下降法等最優化手段去輕松地找到全局最優解了。
所以,我們理想的代價函數應該是凸函數,如下圖所示:
因此,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不易導致梯度彌散:當訓練結果接近真實值時會因為梯度算子極小,使得模型的收斂速度變得非常的緩慢。而由於交叉熵損失函數為對數函數,在接近上邊界的時候,其仍然可以保持在高梯度狀態,因此模型的收斂速度不會受損失函數的影響。