干貨|不同的損失函數會(huì )對深度神經(jīng)網(wǎng)絡(luò )帶來(lái)什么樣的影響?
二次損失函數會(huì )在神經(jīng)元犯了明顯錯誤的情況下使得網(wǎng)絡(luò )學(xué)習緩慢,而使用交叉熵損失函數則會(huì )在明顯犯錯的時(shí)候學(xué)的更快。
今天,我們主要來(lái)談?wù)劜煌?span id="oesauy0" class='wp_keywordlink_affiliate'>損失函數會(huì )對深度神經(jīng)網(wǎng)絡(luò )帶來(lái)什么樣的影響?(可以參考英文文獻:http://neuralnetworksanddeeplearning.com/index.html)
首先,我將列出兩種重要的損失函數:
(1)二次損失函數
(2)交叉熵損失函數
稍微解釋一下交叉熵損失函數:
我們定義a=f(z),f是激活函數,z是某個(gè)神經(jīng)元的輸入,即,
對于一個(gè)輸出非0即1的問(wèn)題,我們定下交叉熵損失函數如下:
N是訓練樣本容量,y 是對應樣本輸出標簽,a是樣本對應的目標輸出。至于為什么這樣的一個(gè)定義函數能被看作成代價(jià)損失函數,這里不予證明。
我們回到二次損失函數,舉個(gè)例子(單神經(jīng)元模型),我們期望輸入為1時(shí),輸出為0;反之,輸入為0時(shí),輸出為1。首先將權重和偏執初始化為0.6、0.9。剛開(kāi)始神經(jīng)元的輸出是0.82,如圖所示:
然后,我們開(kāi)始訓練這個(gè)網(wǎng)絡(luò ),經(jīng)過(guò)一段時(shí)間的學(xué)習,得到如下所示:
我們看到經(jīng)過(guò)300個(gè)epoch后,網(wǎng)絡(luò )基本能達到我們的學(xué)習要求。從圖中可以看出:學(xué)習曲線(xiàn)起初下降的很快,網(wǎng)絡(luò )收斂的很快,在大概80epoch左右可以收斂。
但是,如果我們改變權重和偏置的初始值(w=2.00,b=2.00),我們將得到如下的學(xué)習曲線(xiàn):
從上圖可以看出,網(wǎng)絡(luò )在300epoch同樣達到收斂,但是曲線(xiàn)在起初的時(shí)候,學(xué)習的很緩慢,幾乎沒(méi)有什么學(xué)習能力。同時(shí),我們可以明銳的觀(guān)察到起初學(xué)的很慢時(shí),其對應的cost同樣處于很大的一個(gè)值,這就會(huì )引入我們深思,明明誤差很大,為什么還要學(xué)習的那么慢。打個(gè)比方,你在學(xué)習投籃時(shí),第一次投,發(fā)現球與籃筐偏的很離譜,下一步,你很快就知道如何調整方向,并且大概知道需要調整多少角度,而在你投的時(shí)候,你也會(huì )根據上次的偏差調整好適當的角度以達到一個(gè)滿(mǎn)意的結果。
其實(shí),這就是人的學(xué)習能力,就是在你犯了很大錯誤的時(shí)候,你的調整能力是最強的,而上面的二次損失函數似乎表現的差強人意。
那么,為什么人工神經(jīng)網(wǎng)絡(luò )中會(huì )出現這樣的情況呢?也就是為什么人工神經(jīng)元在其犯很大錯誤的情況下,反而學(xué)習的更加緩慢?
我們還是從數學(xué)的角度來(lái)分析這個(gè)問(wèn)題,我們知道我們的輸入依賴(lài)于輸入、權重以及偏置。我們真正學(xué)習的是那些“權重系數”,這才是“特征”。輸入是一定的,關(guān)鍵在于權重系數。權重系數初始化后,由《深度學(xué)習之c++實(shí)現反向傳播算法》知道其更新的變化依賴(lài)于損失函數的偏導數。我們說(shuō)曲線(xiàn)學(xué)的很平坦,學(xué)習緩慢時(shí),實(shí)際上反映出來(lái)的結果就是這些對于權重系數的偏導數很小。那么,為什么這些偏導數會(huì )變得如此的小以至于網(wǎng)絡(luò )收斂很慢呢?
我們知道二次代價(jià)函數定義如下:
a是輸出,y 是目標標簽值。
由鏈式求導法則得到:
下面給出激活函數是sigmod的曲線(xiàn)及其導函數曲線(xiàn)圖:
sigmod函數曲線(xiàn)圖
sigmod導函數曲線(xiàn)。
顯然,當神經(jīng)元輸出接近1或者0的時(shí)候,曲線(xiàn)相當平坦,對應是其導函數曲線(xiàn)值很小,最大導數值是0.25,實(shí)際上就是深度神經(jīng)網(wǎng)絡(luò )進(jìn)入了《如何優(yōu)雅地對深度神經(jīng)網(wǎng)絡(luò )進(jìn)行訓練》文中所說(shuō)的飽和狀態(tài)了,學(xué)習相當緩慢。
引入交叉熵損失函數帶來(lái)的變化
同樣地,由鏈式求導法則得到:
進(jìn)一步計算便得到:
對于激活函數是sigmod的情況,我們可以得到更簡(jiǎn)潔的形式(σ′(z) = σ(z)(1 − σ(z))):
這是一個(gè)令人興奮的表達式,優(yōu)雅而富有深意。讓我們注意一下這個(gè)式子中最為關(guān)鍵的一項σ(z)−y ,它其實(shí)是告訴我們學(xué)習的誤差越大,你得到的導數值越大,曲線(xiàn)下降的越快,你的學(xué)習速度更快,網(wǎng)絡(luò )收斂的更快。而且損失對于權重系數的偏導師只與誤差有關(guān),且激活函數的導數值無(wú)關(guān)(還記得那個(gè)最大值0.25嘛?)。此時(shí),你可以感嘆一下:交叉熵損失函數真的很好。對于初始值w=2.0,b=2.0的那個(gè)例子,利用交叉熵損失函數得到的學(xué)習曲線(xiàn)如下:
這里,網(wǎng)絡(luò )收斂的很快,解決了學(xué)習緩慢的問(wèn)題,而且相比于二次損失函數,其收斂速度更快。
結論:不同的損失函數的選擇帶來(lái)的學(xué)習效率的不同,二次損失函數會(huì )在神經(jīng)元犯了明顯錯誤的情況下使得網(wǎng)絡(luò )學(xué)習緩慢,而使用交叉熵損失函數則會(huì )在明顯犯錯的時(shí)候學(xué)的更快。
本文轉自全球人工智能,作者徐鵬。
最后,記得關(guān)注微信公眾號:鎂客網(wǎng)(im2maker),更多干貨在等你!
硬科技產(chǎn)業(yè)媒體
關(guān)注技術(shù)驅動(dòng)創(chuàng )新
