1. 程式人生 > >深度學習中啟用函式的選擇

深度學習中啟用函式的選擇

為什麼引入非線性啟用函式

如果不使用非線性的啟用函式,無論疊加多少層,最終的輸出依然只是輸入的線性組合。
引入非線性的啟用函式,使得神經網路可以逼近任意函式。

常用啟用函式

這裡寫圖片描述

sigmoid函式

這裡寫圖片描述
σ(z)=11+ez
σ(z)=σ(z)(1σ(z))
sigmoid函式是最常見的啟用函式,常用於輸出層。其值域為0到1。

tanh雙曲正切函式

這裡寫圖片描述
g(z)=ezezez+ez
g(z)=1g(z)2
tanh函式的值域位於-1和1之間。
可以看作是sigmoid函式向下平移和伸縮的結果。
經驗表明,在隱藏層中使用tanh函式的效果是優於sigmoid函式的,因為其輸出更接近零均值。這會使得下一層的學習更加簡單。

sigmoid函式和tanh函式共同的缺點是,在z特別大或者特別小的情況下,函式的梯度會變得特別小,接近0,這會使得梯度下降的速度變慢。
一般在二分類問題的輸出層使用,不在隱藏層使用。

ReLU修正線性單元

這裡寫圖片描述
relu(z)=max(0,z)
當z為正的時候,導數恆為1,當z為負的時候,導數恆為0。
在零點的導數不存在,在實際使用中,z不會恰好為0,一般為一個很小的浮點數,這時導數取0或1都可以。

ReLU易於優化。只要出與啟用狀態,導數都能保持較大。梯度不僅大而且一致。二階導數幾乎處處為0,並且在ReLU處於啟用狀態時,一階導數處處為1。

通常將偏置b設定成一個小的正值,如0.1。使得其對訓練集中大多數輸入呈現啟用狀態,並且允許導數通過。

ReLU是最常用的啟用函式。

Leaky ReLU

這裡寫圖片描述
leakyrelu(z)=max(0.01z,z)
relu和leakyrelu的優點

  • 相比於sigmoid等,計算量小,
  • 相比於sigmoid,不容易出現梯度消失情況,能加速網路訓練速度
  • 使得一些神經元輸出為0,增加稀疏性,防止過擬合。

PReLU

g(z)=max(az,z)
a作為學習的引數。

maxout 單元

maxout單元進一步擴充套件了relu。maxout將z劃分為每組具有k各值的組,而不是使用作用於每個元素的函式g(z)。每個maxout單元則輸出每組中的最大元素
g(z)i=maxjG(

i)zj
這提供了一種方法來學習對輸入x空間中多個方向響應的分段線性函式。
maxout單元可以學習具有多達k段的分段線性的凸函式

maxout單元因此可以視為學習啟用函式本身而不僅僅是單元之間的關係。使用足夠大的k,maxout可以以任意的精確度來近似任何凸函式。特別地,具有兩塊的maxout層可以學習實現和傳統層相同的輸入x的函式,這些傳統層可以使用relu,prelu等。

每個maxout單元現在由k個權重向量來引數化,而不僅僅是一個,所以maxout單元通常比relu需要更多的正則化。

參考資料

DeepLearning deeplearning.ai
《深度學習》第6章
Introduction to Deep Learning HEC