學習神經網路的時候我們總是聽到啟用函式這個詞,而且很多資料都會提到常用的啟用函式,比如sigmoid函式、tanh函式、relu函式。那麼我們就來詳細了解下啟用函式方方面面的知識。本文的內容包括幾個部分:
什麼是啟用函式?
啟用函式的用途(為什麼需要啟用函式)?
有哪些啟用函式,都有什麼性質和特點?
應用中如何選擇合適的啟用函式?
如果你對以上幾個問題不是很清楚,下面的內容對你是有價值的。
首先要了解神經網路的基本模型
單一神經元模型如下圖所示。
神經網路中的每個神經元節點接受上一層神經元的輸出值作為本神經元的輸入值,並將輸入值傳遞給下一層,輸入層神經元節點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在多層神經網路中,上層節點的輸出和下層節點的輸入之間具有乙個函式關係,這個函式稱為啟用函式(又稱激勵函式)。
如果不用激勵函式(其實相當於激勵函式是f(x) = x),在這種情況下你每一層節點的輸入都是上層輸出的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(perceptron)了,那麼網路的逼近能力就相當有限。正因為上面的原因,我們決定引入非線性函式作為激勵函式,這樣深層神經網路表達能力就更加強大(不再是輸入的線性組合,而是幾乎可以逼近任意函式)。
早期研究神經網路主要採用sigmoid函式或者tanh函式,輸出有界,很容易充當下一層的輸入。
近些年relu函式及其改進型(如leaky-relu、p-relu、r-relu等)在多層神經網路中應用比較多。下面我們來總結下這些啟用函式:
sigmoid 是常用的非線性的啟用函式,它的數學形式如下:
f (z
)=11+
e−zf
(z)=
11+e−
zf(z
)=11
+e−z
f(z)=11+e−zf(z)=11+e−z f(z)=\frac}
f(z)=1
1+e−
zf(z
)=11
+e−z
f(z)
=1+e
−z1
f(x)
=}f(
z)=1
1+e−
zf(z
)=11
+e−z
f(z)
=1+e
−z1
f(x)
={x,
α(ex
−1),
if
x>
0otherwise
函式及其導數的影象如下圖所示:
elu也是為解決relu存在的問題而提出,顯然,elu有relu的基本所有優點,以及:
不會有dead relu問題輸出的均值接近0,zero-centered
它的乙個小問題在於計算量稍大。類似於leaky relu,理論上雖然好於relu,但在實際使用中目前並沒有好的證據elu總是優於relu。
這個函式可以參考**《maxout networks》,maxout是深度學習網路中的一層網路,就像池化層、卷積層一樣等,我們可以把maxout 看成是網路的啟用函式層,我們假設網路某一層的輸入特徵向量為:x=(x1,x2,……xd),也就是我們輸入是d個神經元。maxout隱藏層每個神經元的計算公式如下:
上面的公式就是maxout隱藏層神經元i的計算公式。其中,k就是maxout層所需要的引數了,由我們人為設定大小。就像dropout一樣,也有自己的引數p(每個神經元dropout概率),maxout的引數是k。公式中z的計算公式為:
權重w是乙個大小為(d,m,k)三維矩陣,b是乙個大小為(m,k)的二維矩陣,這兩個就是我們需要學習的引數。如果我們設定引數k=1,那麼這個時候,網路就類似於以前我們所學普通的mlp網路。
我們可以這麼理解,本來傳統的mlp演算法在第i層到第i+1層,引數只有一組,然而現在我們不這麼幹了,我們在這一層同時訓練n組的w、b引數,然後選擇啟用值z最大的作為下一層神經元的啟用值,這個max(z)函式即充當了啟用函式。
這個問題目前沒有確定的方法,憑一些經驗吧。
1)深度學習往往需要大量時間來處理大量資料,模型的收斂速度是尤為重要的。所以,總體上來講,訓練深度學習網路盡量使用zero-centered資料 (可以經過資料預處理實現) 和zero-centered輸出。所以要盡量選擇輸出具有zero-centered特點的啟用函式以加快模型的收斂速度。
2)如果使用 relu,那麼一定要小心設定 learning rate,而且要注意不要讓網路出現很多 「dead」 神經元,如果這個問題不好解決,那麼可以試試 leaky relu、prelu 或者 maxout.
3)最好不要用 sigmoid,你可以試試 tanh,不過可以預期它的效果會比不上 relu 和 maxout.
常用啟用函式(激勵函式)理解與總結
學習神經網路的時候我們總是聽到啟用函式這個詞,而且很多資料都會提到常用的啟用函式,比如sigmoid函式 tanh函式 relu函式。那麼我們就來詳細了解下啟用函式方方面面的知識。本文的內容包括幾個部分 什麼是啟用函式?啟用函式的用途 為什麼需要啟用函式 有哪些啟用函式,都有什麼性質和特點?應用中如...
Swish Mish 啟用函式 理解
啟用函式鼻祖sigmoid雖然現在感覺相當lj,但它的非線性表達能力其實很好,求導性質也不錯 e xe x ex求導仍是自己 最大的問題是飽和導致的梯度瀰散。而之後流行的relu啟用函式,避免了飽和問題,但非線性表達能力其實很弱,因此需要堆疊多層網路,而且求導性質也不好 y x y xy x二次求導...
深度學習中常用的激勵函式
我們知道深度學習的理論基礎是神經網路,在單層神經網路中 感知機 輸入和輸出計算關係如下圖所示 可見,輸入與輸出是乙個線性關係,對於增加了多個神經元之後,計算公式也是類似,如下圖 這樣的模型就只能處理一些簡單的線性資料,而對於非線性資料則很難有效地處理 也可通過組合多個不同線性表示,但這樣更加複雜和不...