熱線電話:13121318867

登錄
首頁精彩閱讀深度學習之損失函數與激活函數的選擇
深度學習之損失函數與激活函數的選擇
2018-08-21
收藏

深度學習損失函數與激活函數的選擇

在深度神經網絡DNN)反向傳播算法(BP)中,我們對DNN的前向反向傳播算法的使用做了總結。其中使用的損失函數是均方差,而激活函數是Sigmoid。實際上DNN可以使用的損失函數和激活函數不少。這些損失函數和激活函數如何選擇呢?以下是本文的內容。

MSE損失+Sigmoid激活函數的問題

先來看看均方差+Sigmoid的組合有什么問題?;仡櫹耂igmoid激活函數的表達式為:

函數圖像如下:

從圖上可以看出,對于Sigmoid,當z的取值越來越大后,函數曲線變得越來越平緩,意味著此時的導數σ′(z)也越來越小。同樣的,當z的取值越來越小時,也有這個問題。僅僅在z取值為0附近時,導數σ′(z)的取值較大。在均方差+Sigmoid的反向傳播算法中,每一層向前遞推都要乘以σ′(z),得到梯度變化值。Sigmoid的這個曲線意味著在大多數時候,我們的梯度變化值很小,導致我們的W,b更新到極值的速度較慢,也就是我們的算法收斂速度較慢。那么有什么什么辦法可以改進呢?

交叉熵損失+Sigmoid改進收斂速度

Sigmoid的函數特性導致反向傳播算法收斂速度慢的問題,那么如何改進呢?換掉Sigmoid?這當然是一種選擇。另一種常見的選擇是用交叉熵損失函數來代替均方差損失函數。每個樣本的交叉熵損失函數的形式:

其中,?為向量內積。這個形式其實很熟悉,在邏輯回歸原理小結中其實我們就用到了類似的形式,只是當時我們是用最大似然估計推導出來的,而這個損失函數的學名叫交叉熵。

使用了交叉熵損失函數,就能解決Sigmoid函數導數變化大多數時候反向傳播算法慢的問題嗎?我們來看看當使用交叉熵時,我們輸出層δL的梯度情況。

對比一下均方差損失函數時在δL梯度

使用交叉熵,得到的的δl梯度表達式沒有了σ′(z),梯度為預測值和真實值的差距,這樣求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向傳播收斂速度慢的問題。通常情況下,如果我們使用了sigmoid激活函數,交叉熵損失函數肯定比均方差損失函數好用。

對數似然損失+softmax進行分類輸出

在前面我們都假設輸出是連續可導的值,但是如果是分類問題,那么輸出是一個個的類別,那我們怎么用DNN來解決這個問題呢?

DNN分類模型要求是輸出層神經元輸出的值在0到1之間,同時所有輸出值之和為1。很明顯,現有的普通DNN是無法滿足這個要求的。但是我們只需要對現有的全連接DNN稍作改良,即可用于解決分類問題。在現有的DNN模型中,我們可以將輸出層第i個神經元的激活函數定義為如下形式:

這個方法很簡潔漂亮,僅僅只需要將輸出層的激活函數從Sigmoid之類的函數轉變為上式的激活函數即可。上式這個激活函數就是我們的softmax激活函數。它在分類問題中有廣泛的應用。將DNN用于分類問題,在輸出層用softmax激活函數也是最常見的了。

對于用于分類的softmax激活函數,對應的損失函數一般都是用對數似然函數,即:

其中yk的取值為0或者1,如果某一訓練樣本的輸出為第i類。則yi=1,其余的j≠i都有yj=0。由于每個樣本只屬于一個類別,所以這個對數似然函數可以簡化為:

可見損失函數只和真實類別對應的輸出有關,這樣假設真實類別是第i類,則其他不屬于第i類序號對應的神經元的梯度導數直接為0。對于真實類別第i類,它的WiL對應的梯度計算為:

可見,梯度計算也很簡潔,也沒有第一節說的訓練速度慢的問題。當softmax輸出層的反向傳播計算完以后,后面的普通DNN層的反向傳播計算和之前講的普通DNN沒有區別。

梯度爆炸or消失與ReLU

學習DNN,大家一定聽說過梯度爆炸和梯度消失兩個詞。尤其是梯度消失,是限制DNN深度學習的一個關鍵障礙,目前也沒有完全攻克。

什么是梯度爆炸和梯度消失呢?簡單理解,就是在反向傳播的算法過程中,由于我們使用了是矩陣求導的鏈式法則,有一大串連乘,如果連乘的數字在每層都是小于1的,則梯度越往前乘越小,導致梯度消失,而如果連乘的數字在每層都是大于1的,則梯度越往前乘越大,導致梯度爆炸。

比如如下的梯度計算:

如果不巧我們的樣本導致每一層的梯度都小于1,則隨著反向傳播算法的進行,我們的δl會隨著層數越來越小,甚至接近越0,導致梯度幾乎消失,進而導致前面的隱藏層的W,b參數隨著迭代的進行,幾乎沒有大的改變,更談不上收斂了。這個問題目前沒有完美的解決辦法。

而對于梯度爆炸,則一般可以通過調整我們DNN模型中的初始化參數得以解決。

對于無法完美解決的梯度消失問題,一個可能部分解決梯度消失問題的辦法是使用ReLU(Rectified Linear Unit)激活函數,ReLU在卷積神經網絡CNN中得到了廣泛的應用,在CNN中梯度消失似乎不再是問題。那么它是什么樣子呢?其實很簡單,比我們前面提到的所有激活函數都簡單,表達式為:

也就是說大于等于0則不變,小于0則激活后為0。

其他激活函數

DNN常用的激活函數還有:

 tanh

這個是sigmoid的變種,表達式為:

tanh激活函數和sigmoid激活函數的關系為:

tanh和sigmoid對比主要的特點是它的輸出落在了[-1,1],這樣輸出可以進行標準化。同時tanh的曲線在較大時變得平坦的幅度沒有sigmoid那么大,這樣求梯度變化值有一些優勢。當然,要說tanh一定比sigmoid好倒不一定,還是要具體問題具體分析。

 softplus

這個其實就是sigmoid函數的原函數,表達式為:

它的導數就是sigmoid函數。softplus的函數圖像和ReLU有些類似。它出現的比ReLU早,可以視為ReLU的鼻祖。

PReLU

從名字就可以看出它是ReLU的變種,特點是如果未激活值小于0,不是簡單粗暴的直接變為0,而是進行一定幅度的縮小。如下圖。

小結

上面我們對DNN損失函數和激活函數做了詳細的討論,重要的點有:

1)如果使用sigmoid激活函數,則交叉熵損失函數一般肯定比均方差損失函數好;

2)如果是DNN用于分類,則一般在輸出層使用softmax激活函數和對數似然損失函數;

3)ReLU激活函數對梯度消失問題有一定程度的解決,尤其是在CNN模型中。


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢