深度學習中啟用函式的選擇
為什麼引入非線性啟用函式
如果不使用非線性的啟用函式,無論疊加多少層,最終的輸出依然只是輸入的線性組合。
引入非線性的啟用函式,使得神經網路可以逼近任意函式。
常用啟用函式
sigmoid函式
sigmoid函式是最常見的啟用函式,常用於輸出層。其值域為0到1。
tanh雙曲正切函式
可以看作是sigmoid函式向下平移和伸縮的結果。
經驗表明,在隱藏層中使用
sigmoid函式和tanh函式共同的缺點是,在z特別大或者特別小的情況下,函式的梯度會變得特別小,接近0,這會使得梯度下降的速度變慢。
一般在二分類問題的輸出層使用,不在隱藏層使用。
ReLU修正線性單元
當z為正的時候,導數恆為1,當z為負的時候,導數恆為0。
在零點的導數不存在,在實際使用中,z不會恰好為0,一般為一個很小的浮點數,這時導數取0或1都可以。
ReLU易於優化。只要出與啟用狀態,導數都能保持較大。梯度不僅大而且一致。二階導數幾乎處處為0,並且在ReLU處於啟用狀態時,一階導數處處為1。
通常將偏置b設定成一個小的正值,如0.1。使得其對訓練集中大多數輸入呈現啟用狀態,並且允許導數通過。
ReLU是最常用的啟用函式。
Leaky ReLU
relu和leakyrelu的優點
- 相比於sigmoid等,計算量小,
- 相比於sigmoid,不容易出現梯度消失情況,能加速網路訓練速度
- 使得一些神經元輸出為0,增加稀疏性,防止過擬合。
PReLU
將
maxout 單元
maxout單元進一步擴充套件了relu。maxout將z劃分為每組具有k各值的組,而不是使用作用於每個元素的函式
這提供了一種方法來學習對輸入x空間中多個方向響應的分段線性函式。
maxout單元可以學習具有多達k段的分段線性的凸函式。
maxout單元因此可以視為學習啟用函式本身而不僅僅是單元之間的關係。使用足夠大的k,maxout可以以任意的精確度來近似任何凸函式。特別地,具有兩塊的maxout層可以學習實現和傳統層相同的輸入x的函式,這些傳統層可以使用relu,prelu等。
每個maxout單元現在由k個權重向量來引數化,而不僅僅是一個,所以maxout單元通常比relu需要更多的正則化。
參考資料
DeepLearning deeplearning.ai
《深度學習》第6章
Introduction to Deep Learning HEC