為什麼交叉熵損失可以提高具有sigmoid和softmax輸出的模型的效能,而使用均方誤差損失則會存在很多問題

為什麼交叉熵損失可以提高具有sigmoid和softmax輸出的模型的效能,而使用均方誤差損失則會存在很多問題

一、均方誤差的權值更新過程(舉例說明)

代價函式經常用方差代價函式(即採用均方誤差MSE),比如對於一個神經元(單輸入單輸出,sigmoid函式),定義其代價函式為:

其中y是我們期望的輸出,a為神經元的實際輸出【 a=σ(z), where z=wx b 】。在訓練神經網路過程中,我們通過梯度下降演算法來更新w和b,因此需要計算代價函式對w和b的導數:

然後更新w、b:

因為sigmoid函式的性質,導致σ′(z)在z取大部分值時會很小(如下圖示出來的兩端,幾近於平坦),這樣會使得w和b更新非常慢(因為η * a * σ′(z)這一項接近於0)。

二、交叉熵代價函式(cross-entropy cost function)

為了克服MSE的這個缺點,引入了交叉熵代價函式:

其中:y為期望的輸出,a為神經元實際輸出【a=σ(z), where z=∑Wj*Xj b】。我們同樣看看它的導數:

可以看到,導數中沒有σ′(z)這一項,權重的更新是受σ(z)−y這一項影響,即受誤差的影響。所以當誤差大的時候,權重更新就快,當誤差小的時候,權重的更新就慢。這是一個很好的性質。

三、總結

  1. 當用sigmoid函式作為神經元的啟用函式時,最好使用交叉熵代價函式來替代方差代價函式,以避免訓練過程太慢。
  2. 不過,為什麼是交叉熵函式?導數中不帶σ′(z)項的函式有無數種,怎麼就想到用交叉熵函式?這自然是有來頭的,更深入的討論就不寫了。
  3. 另外,交叉熵函式的形式是−[ylna (1−y)ln(1−a)],而不是 −[alny (1−a)ln(1−y)],為什麼?因為當期望輸出的y=0時,lny沒有意義;當期望y=1時,ln(1-y)沒有意義。而因為a是sigmoid函式的實際輸出,永遠不會等於0或1,只會無限接近於0或者1,因此不存在這個問題。