1. 程式人生 > >聊一聊深度學習中常用的激勵函式

聊一聊深度學習中常用的激勵函式

 
神經元生物學模型 
神經元數學模型

大家都知道,人腦的基本計算單元叫做神經元。現代生物學表明,人的神經系統中大概有860億神經元,而這數量巨大的神經元之間大約是通過10141015個突觸連線起來的。上面這一幅示意圖,粗略地描繪了一下人體神經元與我們簡化過後的數學模型。每個神經元都從樹突接受訊號,同時順著某個軸突傳遞訊號。而每個神經元都有很多軸突和其他的神經元樹突連線。而我們可以看到右邊簡化的神經元計算模型中,訊號也是順著軸突(比如x0)傳遞,然後在軸突處受到激勵(w0倍)然後變成w0x0。我們可以這麼理解這個模型:在訊號的傳導過程中,突觸可以控制傳導到下一個神經元的訊號強弱(數學模型中的權重w),而這種強弱是可以學習到的。在基本生物模型中,樹突傳導訊號到神經元細胞,然後這些訊號被加和在一塊兒了,如果加和的結果被神經元感知超過了某種閾值,那麼神經元就被啟用,同時沿著軸突向下一個神經元傳導訊號。在我們簡化的數學計算模型中,我們假定有一個『激勵函式』來控制加和的結果對神經元的刺激程度,從而控制著是否啟用神經元和向後傳導訊號。比如說,我們在邏輯迴歸中用到的sigmoid函式就是一種激勵函式,因為對於求和的結果輸入,sigmoid函式總會輸出一個0-1之間的值,我們可以認為這個值表明訊號的強度、或者神經元被啟用和傳導訊號的概率。

 

我們知道深度學習的理論基礎是神經網路,在單層神經網路中(感知機),輸入和輸出計算關係如下圖所示:
 
可見,輸入與輸出是一個線性關係,對於增加了多個神經元之後,計算公式也是類似,如下圖:
 
這樣的模型就只能處理一些簡單的線性資料,而對於非線性資料則很難有效地處理(也可通過組合多個不同線性表示,但這樣更加複雜和不靈活),如下圖所示:
 
那麼,通過在神經網路中加入非線性激勵函式後,神經網路就有可能學習到平滑的曲線來實現對非線性資料的處理了。如下圖所示:
 
因此,神經網路中激勵函式的作用通俗上講就是將多個線性輸入轉換為非線性的關係。如果不使用激勵函式的話,神經網路的每層都只是做線性變換,即使是多層輸入疊加後也還是線性變換。通過激勵函式引入非線性因素後,使神經網路的表示能力更強了。

下面介紹幾個常用的激勵函式
1、sigmoid 函式
 
這應該是神經網路中使用最頻繁的激勵函數了,它把一個實數壓縮至0到1之間,當輸入的數字非常大的時候,結果會接近1,當輸入非常大的負數時,則會得到接近0的結果。在早期的神經網路中使用得非常多,因為它很好地解釋了神經元受到刺激後是否被啟用和向後傳遞的場景(0:幾乎沒有被啟用,1:完全被啟用),不過近幾年在深度學習的應用中比較少見到它的身影,因為使用sigmoid函式容易出現梯度彌散或者梯度飽和。當神經網路的層數很多時,如果每一層的激勵函式都採用sigmoid函式的話,就會產生梯度彌散的問題,因為利用反向傳播更新引數時,會乘以它的導數,所以會一直減小。如果輸入的是比較大或者比較小的數(例如輸入100,經Sigmoid函式後結果接近於1,梯度接近於0),會產生飽和效應,導致神經元類似於死亡狀態。

【小白科普】什麼是飽和呢?

2、tanh 函式
 
tanh函式將輸入值壓縮至-1到1之間。該函式與Sigmoid類似,也存在著梯度彌散或梯度飽和的缺點。

3、ReLU函式
 
ReLU是修正線性單元(The Rectified Linear Unit)的簡稱,近些年來在深度學習中使用得很多,可以解決梯度彌散問題,因為它的導數等於1或者就是0。相對於sigmoid和tanh激勵函式,對ReLU求梯度非常簡單,計算也很簡單,可以非常大程度地提升隨機梯度下降的收斂速度。(因為ReLU是線性的,而sigmoid和tanh是非線性的)。
但ReLU的缺點是比較脆弱,隨著訓練的進行,可能會出現神經元死亡的情況,例如有一個很大的梯度流經ReLU單元后,那權重的更新結果可能是,在此之後任何的資料點都沒有辦法再啟用它了。如果發生這種情況,那麼流經神經元的梯度從這一點開始將永遠是0。也就是說,ReLU神經元在訓練中不可逆地死亡了。

4、Leaky ReLU 函式
 
Leaky ReLU主要是為了避免梯度消失,當神經元處於非啟用狀態時,允許一個非0的梯度存在,這樣不會出現梯度消失,收斂速度快。它的優缺點跟ReLU類似。

5、ELU 函式
 
ELU在正值區間的值為x本身,這樣減輕了梯度彌散問題(x>0區間導數處處為1),這點跟ReLU、Leaky ReLU相似。而在負值區間,ELU在輸入取較小值時具有軟飽和的特性,提升了對噪聲的魯棒性
下圖是ReLU、LReLU、ELU的曲線比較圖:

6、Maxout 函式
 
Maxout也是近些年非常流行的激勵函式,簡單來說,它是ReLU和Leaky ReLU的一個泛化版本,當w1、b1設定為0時,便轉換為ReLU公式。
因此,Maxout繼承了ReLU的優點,同時又沒有“一不小心就掛了”的擔憂。但相比ReLU,因為有2次線性對映運算,因此計算量也會翻倍。(原文出處https://blog.csdn.net/Stephen_shijun/article/details/83142598)