交叉熵代價函式定義及其求導推導(讀書筆記)

HuangQinJian發表於2019-03-04

目的:為了解決學習緩慢的問題


神經元的輸出就是 a = σ(z),其中

是輸⼊的帶權和。則交叉熵代價函式為:

其中 n 是訓練資料的總數,求和是在所有的訓練輸⼊ x 上進⾏的, y 是對應的⽬標輸出。

表示式是否解決學習緩慢的問題並不明顯。實際上,甚⾄將這個定義看做是代價函式也不是顯⽽易⻅的!在解決學習緩慢前,我們來看看交叉熵為何能夠解釋成⼀個代價函式。

將交叉熵看做是代價函式有兩點原因。

第一,它是⾮負的, C > 0。可以看出:式子中的求和中的所有獨⽴的項都是負數的,因為對數函式的定義域是 (0,1),並且求和前⾯有⼀個負號,所以結果是非負。

第二,如果對於所有的訓練輸⼊ x,神經元實際的輸出接近⽬標值,那麼交叉熵將接近 0。

假設在這個例⼦中, y = 0 ⽽ a ≈ 0。這是我們想到得到的結果。我們看到公式中第⼀個項就消去了,因為 y = 0,⽽第⼆項實際上就是 − ln(1 − a) ≈ 0。反之, y = 1 ⽽ a ≈ 1。所以在實際輸出和⽬標輸出之間的差距越⼩,最終的交叉熵的值就越低了。(這裡假設輸出結果不是0,就是1,實際分類也是這樣的)

綜上所述,交叉熵是⾮負的,在神經元達到很好的正確率的時候會接近 0。這些其實就是我們想要的代價函式的特性。其實這些特性也是⼆次代價函式具備的。所以,交叉熵就是很好的選擇了。但是交叉熵代價函式有⼀個⽐⼆次代價函式更好的特性就是它避免了學習速度下降的問題。為了弄清楚這個情況,我們來算算交叉熵函式關於權重的偏導數。我們將 a = σ(z)代⼊到 公式中應⽤兩次鏈式法則,得到:

根據

的定義,求導後,我們可以得到

化簡後可得:

這是⼀個優美的公式。它告訴我們權重學習的速度受到 σ(z)-y,也就是輸出中的誤差的控制。更⼤的誤差,更快的學習速度。這是我們直覺上期待的結果。特別地,這個代價函式還避免了像在⼆次代價函式中類似⽅程中σ`(z)導致的學習緩慢。當我們使⽤交叉熵的時候, σ`(z)被約掉了,所以我們不再需要關⼼它是不是變得很⼩。這種約除就是交叉熵帶來的特效。實際上,這也並不是⾮常奇蹟的事情。我們在後⾯可以看到,交叉熵其實只是滿⾜這種特性的⼀種選擇罷了。

根據類似的⽅法,我們可以計算出關於偏置的偏導數。我這⾥不再給出詳細的過程,你可以輕易驗證得到:

再⼀次, 這避免了⼆次代價函式中類似σ`(z)項導致的學習緩慢。


歡迎加入QQ學習交流群(內有乾貨):

歡迎大家關注我的個人公眾號

相關文章