天天看點

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

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

神經元的輸出就是 a = σ(z),其中z=∑wjij+b是輸⼊的帶權和。

C=−1n∑[ylna+(1−y)ln(1−a)]

其中 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)代⼊到 公式中應⽤兩次鍊式法則,得到:

∂C∂wj=====−1n∑∂∂wj[ylna+(1−y)ln(1−a)]−1n∑∂∂a[ylna+(1−y)ln(1−a)]∗∂a∂wj−1n∑(ya−1−y1−a)∗∂a∂wj−1n∑(yς(z)−1−y1−ς(z))∂ς(z)∂wj−1n∑(yς(z)−1−y1−ς(z))ς′(z)xj

根據ς(z)=11+e−z 的定義,和⼀些運算,我們可以得到 ς′(z)=ς(z)(1−ς(z))。化簡後可得:

∂C∂wj=1n∑xj(ς(z)−y)

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

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

∂C∂b=1n∑(ς(z)−y)

再⼀次, 這避免了⼆次代價函數中類似ς′(z)項導緻的學習緩慢。