我們知道,神經網絡模型中,各隐藏層、包括輸出層都需要激活函數(Activation Function)。我們比較熟悉的、常用的激活函數也有 ReLU、Sigmoid 等等。但是,對于各個激活函數的選取方法、差別特點還有幾點需要特别注意的地方。今天紅色石頭就和大家一起來總結一下常用激活函數 Sigmoid、tanh、ReLU、Leaky ReLU、ELU、Maxout 的關鍵知識點。
1 為什麼需要激活函數
神經網絡單個神經元的基本結構由線性輸出 Z 和非線性輸出 A 兩部分組成。如下圖所示:

其中,f(x) 即為線性輸出 Z,g(x) 即為非線性輸出,g() 表示激活函數。通俗來說,激活函數一般是非線性函數,其作用是能夠給神經網絡加入一些非線性因素,使得神經網絡可以更好地解決較為複雜的問題。
舉個簡單的例子,二分類問題,如果不使用激活函數,例如使用簡單的邏輯回歸,隻能作簡單的線性劃分,如下圖所示:
可見,激活函數能夠幫助我們引入非線性因素,使得神經網絡能夠更好地解決更加複雜的問題。
有個問題,為什麼激活函數一般都是非線性的,而不能是線性的呢?從反面來說,如果所有的激活函數都是線性的,則激活函數 g(z)=z,即 a=z。那麼,以兩層神經網絡為例,最終的輸出為:
經過推導我們發現網絡輸出仍是 X 的線性組合。這表明,使用神經網絡與直接使用線性模型的效果并沒有什麼兩樣。即便是包含多層隐藏層的神經網絡,如果使用線性函數作為激活函數,最終的輸出仍然是線性模型。這樣的話神經網絡就沒有任何作用了。是以,隐藏層的激活函數必須要是非線性的。
值得一提的是,如果所有的隐藏層全部使用線性激活函數,隻有輸出層使用非線性激活函數,那麼整個神經網絡的結構就類似于一個簡單的邏輯回歸模型,效果與單個神經元無異。另外,如果是拟合問題而不是分類問題,輸出層的激活函數可以使用線性函數。
2 Sigmoid
激活函數 Sigmoid 的圖形表達式如下所示:
Sigmoid 函數的取值範圍在 (0,1) 之間,單調連續,求導容易,一般用于二分類神經網絡的輸出層。
下面重點談一下 Sigmoid 函數的缺點。
首先,Sigmoid 函數飽和區範圍廣,容易造成梯度消失。飽和區如下圖所示:
上圖中紅色橢圓标注的飽和區曲線平緩,梯度的值很小,近似為零。而且 Sigmoid 函數的飽和區範圍很廣,例如除了 [-5,5],其餘區域都近似飽和區。這種情況很容易造成梯度消失,梯度消失會增大神經網絡訓練難度,影響神經網絡模型的性能。
其次,Sigmoid 函數輸出是非零對稱的,即輸出恒大于零。這會産生什麼影響呢?我們來看,假如 Sigmoid 函數的輸出為 σ(Wx+b),且滿足 0<σ(Wx+b)<1。在反向求導過程中,令損失函數 J 對 σ(Wx+b) 的求導為 dσ,現在計算 J 對 W 的偏導數:
其中,σ(Wx+b)>0,1-σ(Wx+b)>0。
若神經元的輸入 x>0,則無論 dσ 正負如何,總能得到 dW 恒為正或者恒為負。也就是說參數矩陣 W 的每個元素都會朝着同一個方向變化,同為正或同為負。這對于神經網絡訓練是不利的,所有的 W 都朝着同一符号方向變化會減小訓練速度,增加模型訓練時間。就好比我們下樓梯的所需的時間總比直接滑梯下來的時間要長得多,如下圖所示:
圖中,紅色折線是上文讨論的情況,藍色斜線是 W 不全朝同一方向變化的情況。
值得一提的是,針對 Sigmoid 函數的這一問題,神經元的輸入 x 常會做預處理,即将均值歸一化到零值。這樣也能有效避免 dW 恒為正或者恒為負。
最後還有一點,Sigmoid 函數包含 exp 指數運算,運算成本也比較大。
3 tanh
激活函數 tanh 的圖形表達式如下所示:
tanh 函數的取值範圍在 (-1,1) 之間,單調連續,求導容易。
相比于 Sigmoid 函數,tanh 函數的優點主要有兩個:其一,收斂速度更快,如下圖所示,tanh 函數線性區斜率較 Sigmoid 更大一些。在此區域内訓練速度會更快。其二,tanh 函數輸出均值為零,也就不存在 Sigmoid 函數中 dW 恒為正或者恒為負,進而影響訓練速度的問題。
但是,tanh 函數與 Sigmoid 函數一樣,也存在飽和區梯度消失問題。其飽和區甚至比 Sigmoid 還要大一些,但不明顯。
4 ReLU
激活函數 ReLU 的全稱是 Rectified Linear Unit,其圖形表達式如下所示:
- 沒有飽和區,不存在梯度消失問題。
- 沒有複雜的指數運算,計算簡單、效率提高。
- 實際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。
- 比 Sigmoid 更符合生物學神經激活機制。
下面這張圖對比了 ReLU 與 tanh 的收斂速度差異性。資料集是 CIFAR 10,模型是四層的卷積神經網絡。圖中,實線代表 ReLU,虛線代表 tanh,ReLU 比 tanh 更快地到達了錯誤率 0.25 處。(引自論文《ImageNet Classification with Deep Convolutional Neural Networks》)
但是,ReLU 函數的缺點也比較明顯。首先,ReLU 的輸出仍然是非零對稱的,可能出現 dW 恒為正或者恒為負,進而影響訓練速度。
其次,也是最為重要的,當 x<0 時,ReLU 輸出總為零。該神經元輸出為零,則反向傳播時,權重、參數的梯度橫為零,造成權重、參數永遠不會更新,即造成神經元失效,形成了“死神經元”。是以,針對這一問題,有時候會将 ReLU 神經元初始化為正偏值,例如 0.01。
5 Leaky ReLU
Leaky ReLU 對 ReLU 進行了改進,其圖形表達式如下所示:
Leaky ReLU 的優點與 ReLU 類似:
- 不會造成神經元失效,形成了“死神經元”。
當然,0.01 的系數是可調的,一般不會太大。
6 ELU
ELU(Exponential Linear Units)也是 ReLU 的一個變種,其圖形表達式如下所示:
ELU 繼承了 Leaky ReLU 的所有優點:
- 輸出均值為零
- 負飽和區的存在使得 ELU 比 Leaky ReLU 更加健壯,抗噪聲能力更強。
但是,ELU 包含了指數運算,存在運算量較大的問題。
7 Maxout
Maxout 最早出現在 ICML2013 上,由 Goodfellow 提出。其表達式如下所示:
Maxout 的拟合能力是非常強的,它可以拟合任意的的凸函數。最直覺的解釋就是任意的凸函數都可以由分段線性函數以任意精度拟合,而 Maxout 又是取 k 個隐藏層節點的最大值,這些”隐藏層"節點也是線性的,是以在不同的取值範圍下,最大值也可以看做是分段線性的(上面的公式中 k = 2)。
上圖引自論文《Maxout Networks. Ian J. Goodfellow, David Warde-Farley, Mehdi Mirza, Aaron Courville, Yoshua Bengio》,可以說,Maxout 可以拟合任意凸函數,k 值越大,分段越多,拟合效果也就越好。
Maxout 保證了始終是線性區域,沒有飽和區,訓練速度快,而且不會出現壞死神經元。
8 如何選擇合适的激活函數
1)首選 ReLU,速度快,但是要注意學習速率的調整,
2)如果 ReLU 效果欠佳,嘗試使用 Leaky ReLU、ELU 或 Maxout 等變種。
3)可以嘗試使用 tanh。
4)Sigmoid 和 tanh 在 RNN(LSTM、注意力機制等)結構中有所應用,作為門控或者機率值。其它情況下,減少 Sigmoid 的使用。
5)在淺層神經網絡中,選擇使用哪種激勵函數影響不大。