深度學習基礎理論探索(二): cross-entropy損失函式的前世今生
前面我們講到,克服梯度消失有兩個方向,1.用rule啟用函式。2.改進損失函式用cross_entropy。
ok,首先我們先看為什麼代價損失函式可以用Cross_entropy.
以前使用的二次代價函式很好理解:
即:計算值與真實值的殘差。
它有兩個特點:
1.損失函式永遠大於0.
2.計算值與真實值越接近,損失函式越小。兩者差距越大,損失函式越大。
我們現在假設這是損失函式的基本要求。
那cross-entropy損失函式滿足這些要求嗎?
首先,可以證明該函式是大於0的
其次,當y=0時(即真實值為0)若a=0(計算值為0),c
= 0*ln0 + 1*ln1 等於
當y=1時,若a=0, c = ln0 + 0*ln1等於無窮大。
即:計算值與真實值差距越大,損失函式越大。反之亦然。
所以cross-entropy滿足我們對損失函式的定義。所以他是個合格的損失函式
這裡我們其實會發現 當y=0,a=1這樣的極端情況出現時,損失函式無窮大。程式會出問題,我們可以對cross-entropy做一個修改:y*ln((a+0.05)/1.05))+(1-y)*ln((1.05-a)/1.05)
ok,下一個話題。為什麼cross-entroy可以抑制梯度消失。
根據上個話題我們知道了啟用函式為sigmoid、損失 函式為二次代價函式時,w、b的跟新速度與啟用函式的導數相關。
那麼損失函式換成cross-entropy會怎樣呢
再來一波公式:
由以上推導可得w、b對損失函式的偏導,即w、b的更新速度只與(a-y)有關,也就是隻與預測值與真實值的差距有關。不同於二次代價函式的更新速度和啟用函式的導數成正比(上篇提到)。
這樣就會有一個比較好的性質:
計算值與實際值差距越大,w、b的更新速度越快
具體推導過程,可參見
http://neuralnetworksanddeeplearning.com/chap3.html