深度神經網絡中常用的激活函數的優缺點分析

深度神經網絡中常用的激活函數的優缺點分析

本文主要總結了深度神經網絡中常用的激活函數,根據其數學特性分析它的優缺點。
在開始之前,我們先討論一下什麼是激活函數(激活函數的作用)?
如果將一個神經元的輸出通過一個非線性函數,那麼整個神經網絡的模型也就不在是線性的了,這個非線性函數就是激活函數。 顯然非線性函數具有更強的表達能力。引入非線性函數作爲激勵函數,這樣深層神經網絡表達能力(泛化能力)就更加強大(不再是輸入的線性組合,而是幾乎可以逼近任意函數)。

1. Sigmoid 函數

Sigmoid函數是傳統的神經網絡和深度學習領域開始時使用頻率最高的激活函數。
Sigmoid函數的數學表達式如下:

f(x)=11+ex f(x) = \frac 1{1+e^{-x}}\

σ(x)=11+ex \sigma(x) = \frac 1{1+e^{-x}}\

f(x)=σ(x)f(x) = \sigma(x)

其導數爲

f(x)=σ(x)(1σ(x))f'(x) = \sigma(x)(1 - \sigma(x))

它的函數圖像如下。
在這裏插入圖片描述
作爲最早開始使用的激活函數之一, Sigmoid 函數具有如下優點。

  • 連續,且平滑便於求導
    但是缺點也同樣明顯。
  • none-zero-centered(非零均值, Sigmoid 函數 的輸出值恆大於0),會使訓練出現 zig-zagging dynamics 現象,使得收斂速度變慢。
  • 梯度消失問題。 由於Sigmoid的導數總是小於1,所以當層數多了之後,會使回傳的梯度越來越小,導致梯度消失問題。而且在前向傳播的過程中,通過觀察Sigmoid的函數圖像,當 x 的值大於2 或者小於-2時,Sigmoid函數的輸出趨於平滑,會使權重和偏置更新幅度非常小,導致學習緩慢甚至停滯。
  • 計算量大。由於採用了冪計算。

建議:基於上面Sigmoid的性質,所以不建議在中間層使用Sigmoid激活函數,因爲它會讓梯度消失。

2. Tanh 函數

tanh 函數的表達式爲:

tanh(x)=exexex+extanh(x) = \frac {e^x-e^{-x}}{e^x+e^{-x}}

其倒數爲

tanh(x)=1tanh2(x)tanh‘(x) = 1 - tanh^2(x)

它們的函數圖像如下。
在這裏插入圖片描述
通過觀察其函數圖像,可以發現它的優點主要是解決了none-zero-centered 的問題,但是缺點依然是梯度消失,計算消耗大。但是如果和上面的 sigmoid 激活函數相比, tanh 的導數的取值範圍爲(0, 1), 而 sigmoid 的導數的取值範圍爲(0,1/4),顯然sigmoid 會更容易出現梯度消失,所以 tanh 的收斂速度會比 sigmoid 快。

3. ReLU

ReLU 是 Hinton 大神於 2010 在 Rectified Linear Units Improve Restricted Boltzmann Machines 中提出, 更多關於 ReLU 的介紹可以參考 [ReLU_WiKi]

ReLU 的函數表達式爲:

Relu(x)=max{0,x}Relu(x) = max \lbrace 0,x \rbrace

它的函數圖像如下。
在這裏插入圖片描述

其優點如下

  • x 大於0時,其導數恆爲1,這樣就不會存在梯度消失的問題
  • 計算導數非常快,只需要判斷 x 是大於0,還是小於0
  • 收斂速度遠遠快於前面的 Sigmoid 和 Tanh函數

缺點

  • none-zero-centered
  • Dead ReLU Problem,指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新。因爲當x 小於等於0時輸出恆爲0,如果某個神經元的輸出總是滿足小於等於0 的話,那麼它將無法進入計算。有兩個主要原因可能導致這種情況產生: (1) 非常不幸的參數初始化,這種情況比較少見 (2) learning rate太高導致在訓練過程中參數更新太大,不幸使網絡進入這種狀態。解決方法是可以採用 MSRA 初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的算法。

這個激活函數應該是在實際應用中最廣泛的一個。

4. Leaky ReLU

Leaky ReLU 由 Andrew L. Maas 等人於 2014 年 在 Rectifier Nonlinearities Improve Neural Network Acoustic Models 中提出。

Leaky ReLU 函數表達式爲

f(x)=max{0.01x,x}f(x) = max \lbrace 0.01x,x \rbrace

其函數圖像爲
在這裏插入圖片描述

Leaky ReLU 的提出主要是爲了解決前面提到的 Dead ReLUProblem 的問題,因爲當 x 小於 0 時,其輸出不再是 0.
而同時 Leaky ReLU 具有 ReLU 的所有優點。聽上去貌似很好用,只是在實際操作中並沒有完全證明好於 ReLU 函數。

這裏其實還有一個小的變種 PRelu,其函數表達式如下:
f(x)=max{αx,x}f(x) = max \lbrace \alpha x,x \rbrace. 在實際的使用中PRelu使用的是比較多的。

5. ELU(Exponential Lenear Unit)

ELU 是 Clevert, Djork-Arné 等人於 2015 年在 Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs) 中提出。

ELU 函數表達式爲:

f(x)={α(ex1),x0x,x>0 f(x)=\left\{ \begin{aligned} \alpha(e^x -1), x \leq0\\ x, x >0\\ \end{aligned} \right.

其函數圖像爲
在這裏插入圖片描述

ELU 主要是對小於等於 0 的部分進行了改進,使得函數在 x = 0 處可導, 而且 使得神經元的平均激活均值趨近爲 0,對噪聲更具有魯棒性。
缺點是由於又引入了指數,計算量增大了。

6. SELU(Self_Normalizing Neural Networks)

SELU 函數表達式爲:

f(x)=λ{α(ex1),x0x,x>0 f(x)=\lambda\left\{ \begin{aligned} \alpha(e^x -1), x \leq0\\ x, x >0\\ \end{aligned} \right.

顯然僅僅是在 ELU 的基礎上加了一個係數。其目的據說(Self-Normalizing Neural Networks是爲了使輸入在經過一定層數之後變成固定的分佈。

7. Softmax

SoftMax 函數表達式爲:

Softmax(x)=exik=1KexkSoftmax(x) = \frac {e^ {x_i}} {\sum_{k=1} ^K e^ {x_k}}

Softmax 函數可視爲 Sigmoid 函數的泛化形式, 其本質就是將一個 K 維的任意實數向量壓縮(映射)成另一個 K 維的實數向量, 其中向量中的每個元素的取值範圍都介於 [01][0,1] 之間(可以理解爲概率)。Softmax 常常是作爲多分類神經網絡的輸出,比如 LeNet-5 中就用Softmax 映射到最後的輸入結果,其表示1~10的概率。

引用

本文主要參考《深度學習之圖像識別》和 常用激活函數(激勵函數)理解與總結
關於 Swish & Maxout 可以參考激活函數(ReLU, Swish, Maxout)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章