训练神经网络适合使用交叉熵(cross_entropy)错误率,而不是分类错误率或是均方差
一.? 二次代價函數(shù)的不足
對于大多數(shù)人來說,犯錯是一件讓人很不開心的事情。但反過來想,犯錯可以讓我們意識到自己的不足,然后我們很快就學(xué)會下次不能再犯錯了。犯的錯越多,我們學(xué)習(xí)進(jìn)步就越快。
同樣的,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練當(dāng)中,當(dāng)神經(jīng)網(wǎng)絡(luò)的輸出與標(biāo)簽不一樣時,也就是神經(jīng)網(wǎng)絡(luò)預(yù)測錯了,這時我們希望神經(jīng)網(wǎng)絡(luò)可以很快地從錯誤當(dāng)中學(xué)習(xí),然后避免再預(yù)測錯了。那么現(xiàn)實中,神經(jīng)網(wǎng)絡(luò)真的會很快地糾正錯誤嗎?
我們來看一個簡單的例子:
上圖是一個只有一個神經(jīng)元的模型。我們希望輸入1的時候,模型會輸出0(也就是說,我們只有一個樣本(x=1, y=0))。假設(shè)我們隨機(jī)初始化權(quán)重參數(shù)w=2.0,偏置參數(shù)b=2.0。激活函數(shù)為sigmoid函數(shù)。所以模型的第一次輸出為:
output=σ(w?x+b)=σ(2.0×1+2.0)=0.98
以一個神經(jīng)元的二類分類訓(xùn)練為例,進(jìn)行兩次實驗(ANN常用的激活函數(shù)為sigmoid函數(shù),該實驗也采用該函數(shù)):輸入一個相同的樣本數(shù)據(jù)x=1.0(該樣本對應(yīng)的實際分類y=0);兩次實驗各自隨機(jī)初始化參數(shù),從而在各自的第一次前向傳播后得到不同的輸出值,形成不同的代價(誤差):
實驗1:第一次輸出值為0.82
? ? ?
實驗2:第一次輸出值為0.98
? ? ? ??在實驗1中,隨機(jī)初始化參數(shù),使得第一次輸出值為0.82(該樣本對應(yīng)的實際值為0);經(jīng)過300次迭代訓(xùn)練后,輸出值由0.82降到0.09,逼近實際值。而在實驗2中,第一次輸出值為0.98,同樣經(jīng)過300迭代訓(xùn)練,輸出值只降到了0.20。
? ? ? ??從兩次實驗的代價曲線中可以看出:實驗1的代價隨著訓(xùn)練次數(shù)增加而快速降低,但實驗2的代價在一開始下降得非常緩慢;直觀上看,初始的誤差越大,收斂得越緩慢。
? ? ? ??其實,誤差大導(dǎo)致訓(xùn)練緩慢的原因在于使用了二次代價函數(shù)。二次代價函數(shù)的公式如下:
??? ? ? 其中,C表示代價,x表示樣本,y表示實際值,a表示輸出值,n表示樣本的總數(shù)。為簡單起見,同樣一個樣本為例進(jìn)行說明,此時二次代價函數(shù)為:
? ? ? ? 目前訓(xùn)練ANN最有效的算法是反向傳播算法。簡而言之,訓(xùn)練ANN就是通過反向傳播代價,以減少代價為導(dǎo)向,調(diào)整參數(shù)。參數(shù)主要有:神經(jīng)元之間的連接權(quán)重w,以及每個神經(jīng)元本身的偏置b。調(diào)參的方式是采用梯度下降算法(Gradient descent),沿著梯度方向調(diào)整參數(shù)大小。w和b的梯度推導(dǎo)如下:
??????? 其中,z表示神經(jīng)元的輸入,表示激活函數(shù)。從以上公式可以看出,w和b的梯度跟激活函數(shù)的梯度成正比,激活函數(shù)的梯度越大,w和b的大小調(diào)整得越快,訓(xùn)練收斂得就越快。而神經(jīng)網(wǎng)絡(luò)常用的激活函數(shù)為sigmoid函數(shù),該函數(shù)的曲線如下所示:
??????? 如圖所示,實驗2的初始輸出值(0.98)對應(yīng)的梯度明顯小于實驗1的輸出值(0.82),因此實驗2的參數(shù)梯度下降得比實驗1慢。這就是初始的代價(誤差)越大,導(dǎo)致訓(xùn)練越慢的原因。與我們的期望不符,即:不能像人一樣,錯誤越大,改正的幅度越大,從而學(xué)習(xí)得越快。
? ? ? ??可能有人會說,那就選擇一個梯度不變化或變化不明顯的激活函數(shù)不就解決問題了嗎?圖樣圖森破,那樣雖然簡單粗暴地解決了這個問題,但可能會引起其他更多更麻煩的問題。而且,類似sigmoid這樣的函數(shù)(比如tanh函數(shù))有很多優(yōu)點,非常適合用來做激活函數(shù),具體請自行g(shù)oogle之。
二. 交叉熵代價函數(shù)
?換個思路,我們不換激活函數(shù),而是換掉二次代價函數(shù),改用交叉熵代價函數(shù):
其中,x表示樣本,n表示樣本的總數(shù)。那么,重新計算參數(shù)w的梯度:
其中(具體證明見附錄):
?????? 因此,w的梯度公式中原來的被消掉了;另外,該梯度公式中的表示輸出值與實際值之間的誤差。所以,當(dāng)誤差越大,梯度就越大,參數(shù)w調(diào)整得越快,訓(xùn)練速度也就越快。同理可得,b的梯度為:
實際情況證明,交叉熵代價函數(shù)帶來的訓(xùn)練效果往往比二次代價函數(shù)要好。
在使用神經(jīng)網(wǎng)絡(luò)做分類和預(yù)測的工作的時候,使用交叉熵模型來評估分類性能,往往要比分類錯誤率或是均方差模型更好。
實例
下面舉個預(yù)測一個人屬于哪個黨派的例子。(來描述這個從的特征有很多,像年齡、性別、收入等。這里不討論。)
將這個人的特征數(shù)據(jù)輸入我們的分類模型,得到一組向量,來表示他/她屬于哪個黨派的概率。
模型一
| 0.3 0.3 0.4 | 0 0 1 (democrat) | yes |
| 0.3 0.4 0.3 | 0 1 0 (republican) | yes |
| 0.1 0.2 0.7 | 1 0 0 (other) | no |
稍微解釋一下,第一行0.3 0.3 0.4 | 0 0 1 (democrat) | yes的意思是:預(yù)測是other的概率是0.3;預(yù)測為republican的概率是0.3;預(yù)測是democrat的概率是0.4;而目標(biāo)是democrat。
此時,
分類錯誤率:1/3 = 0.33
錯誤率
模型二
我們再看一個模型的分類結(jié)果。
| 0.1 0.2 0.7 | 0 0 1 (democrat) | yes |
| 0.1 0.7 0.2 | 0 1 0 (republican) | yes |
| 0.3 0.4 0.3 | 1 0 0 (other) | no |
分類錯誤率:1/3 = 0.33
但是,我們可以觀察到,前兩項的分類結(jié)果有明顯不同,所以直觀上講,第二個模型要比第一個模型更可靠。
?
交叉熵錯誤率模型的效果
仍然通過上面兩個例子,我們看一下交叉熵的表現(xiàn)如何。(有關(guān)「熵」的計算,可以參考《統(tǒng)計學(xué)習(xí)方法》的5.2.2節(jié))
模型一
計算第一行的熵,二、三行同理。
然后得到平均交叉熵錯誤率(average cross-entropy error, ACE)
-(ln(0.4) + ln(0.4) + ln(0.1)) / 3 = 1.38第一行的均方差
(0.3 - 0)^2 + (0.3 - 0)^2 + (0.4 - 1)^2 = 0.09 + 0.09 + 0.36 = 0.54然后得到
(0.54 + 0.54 + 1.34) / 3 = 0.81
ACE: ? ? -(ln(0.7) + ln(0.7) + ln(0.3)) / 3 = 0.64
均方差:(0.14 + 0.14 + 0.74) / 3 = 0.34
對比
| ACE | 1.38 | 0.64 |
| 分類錯誤率 | 0.33 | 0.33 |
| 均方差 | 0.81 | 0.34 |
這樣看起來ACE和均方差明顯優(yōu)于分類錯誤率,同時ACE和均方差相比差別不大。但是,考慮到均方差計算量要稍大于ACE。
總結(jié)
所以在應(yīng)用上面三種方式評估結(jié)果的時候,要看你想做什么。
比如,你只想看在特定樣本集上的結(jié)果的準(zhǔn)確性,那就用分類錯誤率來評估。因為,此時你不需要知道得到每個結(jié)果的概率,這些對最終結(jié)果沒有任何輔助說明意義。
但是,在訓(xùn)練分類模型,和長期評估的時候,ACE和均方差就會更遠(yuǎn)好一些。
?
?
?
交叉熵代價函數(shù)是如何產(chǎn)生的?
? ? ? ??以偏置b的梯度計算為例,推導(dǎo)出交叉熵代價函數(shù):
?
? ? ? ??在第1小節(jié)中,由二次代價函數(shù)推導(dǎo)出來的b的梯度公式為:
?
? ? ? ??為了消掉該公式中的,我們想找到一個代價函數(shù)使得:
?
? ? ? ??即:
?
? ? ? ??對兩側(cè)求積分,可得:
?
? ? ? ??而這就是前面介紹的交叉熵代價函數(shù)。
?
附錄:
? ? ? ??sigmoid函數(shù)為:
? ? ? ??可證:
?
參考:
Why You Should Use Cross-Entropy Error Instead Of Classification Error Or Mean Squared Error For Neural Network Classifier Training
交叉熵代價函數(shù)(作用及公式推導(dǎo))
?
總結(jié)
以上是生活随笔為你收集整理的训练神经网络适合使用交叉熵(cross_entropy)错误率,而不是分类错误率或是均方差的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞傲发布新款 USB-C / Light
- 下一篇: 交叉熵(cross_entropy)作为