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