⑴ 激活函數思考
激活函數 : 神經網路神經元中,輸入的 inputs 通過加權,求和後,還被作用了一個函數,這個函數就是激活函數 Activation Function。
1. 為什麼要用激活函數?
神經網路中激活函數的主要作用是提供網路的非線性建模能力,如不特別說明,激活函數一般而言是非線性函數。 假設一個示例神經網路中僅包含線性卷積和全連接運算,那麼該網路僅能夠表達線性映射,即便增加網路的深度也依舊還是線性映射,難以有效建模實際環境中非線性分布的數據。 加入(非線性)激活函數之後,深度神經網路才具備了分層的非線性映射學習能力。
激活函數通常有如下一些性質:
(1)非線性: 如果不用激勵函數,每一層輸出都是上層輸入的線性函數,無論神經網路有多少層,輸出都是輸入的線性組合。如果使用的話,激活函數給神經元引入了非線性因素,使得神經網路可以任意逼近任何非線性函數,這樣神經網路就可以應用到眾多的非線性模型中。 當激活函數是非線性的時候,一個兩層的神經網路就可以逼近基本上所有的函數了。但是,如果激活函數是恆等激活函數的時候(即),就不滿足這個性質了,而且如果MLP使用的是恆等激活函數,那麼其實整個網路跟單層神經網路是等價的。
(2)可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
(3)單調性: 當激活函數是單調的時候,單層網路能夠保證是凸函數。 當激活函數滿足這個性質的時候,如果參數的初始化是random的很小的值,那麼神經網路的訓練將會很高效;如果不滿足這個性質,那麼就需要很用心的去設置初始值。
(4)輸出值的范圍: 當激活函數輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因為特徵的表示受有限權值的影響更顯著;當激活函數的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的learning rate。
2. 激活函數如何選擇?
從定義來看,幾乎所有的連續可導函數都可以用作激活函數。但目前 常見的多是分段線性和具有指數形狀的非線性函數 。
選擇的時候,就是根據各個函數的優缺點來配置,例如:
如果使用 ReLU,要小心設置 learning rate, 注意不要讓網路出現很多 「dead」 神經元 ,如果不好解決,可以試試 Leaky ReLU、PReLU 或者 Maxout。
最好不要用 sigmoid,你可以試試 tanh,不過可以預期它的效果會比不上 ReLU 和 Maxout。
一般來說,在分類問題上建議首先嘗試 ReLU,其次ELU,這是兩類不引入額外參數的激活函數。
然後可考慮使用具備學習能力的PReLU和MPELU,並 使用正則化技術 ,例如應該考慮在網路中增加Batch Normalization層。
通常來說,很少會把各種激活函數串起來在一個網路中使用的。
3. 為什麼引入非線性激勵函數?
激活函數通常分為 線性激活函數 和 非線性激活函數 。一般情況下,如果神經網路中使用的是線性激活函數,那麼每一層就相當於是上一層的線性組合,其輸入和輸出均是線性的,類似於感知機模型,則hidden layers沒有存在的意義了,同時這種線性函數對於 復雜的非線性問題擬合欠佳 。當我們使用非線性激活函數時,模型可以擬合任意函數的輸出,表現空間更大、使用該范圍廣、且效果更優。下圖為單層的感知機,是常用的神經網路組合單元,用它可以畫出一條線,把平面分開。
很容易聯想到多個感知機組和,獲得更強的分類能力,效果如下所示:
但是感知機的輸出是線性的,如下所示。當然可以用無限條線性的線擬合曲線,然而復雜度較高。
如果不用激勵函數(其實相當於激勵函數是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函數,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與只有一個隱藏層效果相當,這種情況就是多層感知機(MLP)了。
正因為上面的原因,我們決定引入非線性函數作為激勵函數,這樣深層神經網路就有意義了(不再是輸入的線性組合,可以逼近任意函數)。
當拓展到多層的情況時,就會變成一個復雜的函數,可以輕松擬合非線性的復雜場景。最早的想法是sigmoid函數或者tanh函數,輸出有界,很容易充當下一層輸入(以及一些人的生物解釋balabala)。
比較線性激活和非線性激活下的平滑分類平面,兩者分別如下。
非線性激活函數可以擬合出曲線的邊界。圖像的非線性特點,可以理解為在一些應用中,其分布為非線性的,無法通過直線來完整的分離開。
4. 為什麼引入ReLU呢?
第一,採用sigmoid等函數,反向傳播求誤差梯度時,求導計算量很大,而Relu求導非常容易,使得訓練時間短。
第二,對於深層網路,sigmoid函數反向傳播時,很容易就會出現梯度消失的情況(在sigmoid接近飽和區時,變換太緩慢,導數趨於0),從而無法完成深層網路的訓練。
第三,Relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,並且減少了參數的相互依存關系,緩解了過擬合問題的發生(以及一些人的生物解釋balabala)。
參考:
[1] 神經網路之激活函數 https://www.csuldw.com/2019/05/26/2019-05-26-activation-function/
[2] 激活函數的解釋 https://www.hu.com/question/22334626