本文為 cs231n 中關於啟用函式部分的筆記。
啟用函式(activation function)能夠把輸入的特徵保留並對映下來。
sigmoid 非線性函式將輸入對映到 (0,
1)(0,1)
之間。它的數學公式為:σ(x
)=11
+e−x
σ(x)=11+e−x
。歷史上,sigmoid 函式曾非常常用,然而現在它已經不太受歡迎,實際很少使用了,因為它主要有兩個缺點:
1. 函式飽和使梯度消失
sigmoid 神經元在值為 0 或 1 的時候接近飽和,這些區域,梯度幾乎為 0。因此在反向傳播時,這個區域性梯度會與整個代價函式關於該單元輸出的梯度相乘,結果也會接近為 0 。
這樣,幾乎就沒有訊號通過神經元傳到權重再到資料了,因此這時梯度就對模型的更新沒有任何貢獻。
除此之外,為了防止飽和,必須對於權重矩陣的初始化特別留意。比如,如果初始化權重過大,那麼大多數神經元將會飽和,導致網路就幾乎不學習。
2. sigmoid 函式不是關於原點中心對稱的
這個特性會導致後面網路層的輸入也不是零中心的,進而影響梯度下降的運作。
因為如果輸入都是正數的話(如 f=w
tx+b
f=wtx+b
中每個元素都 x
>
0x>0
),那麼關於 w
w 的梯度在反向傳播過程中,要麼全是正數,要麼全是負數(具體依據整個表示式 f
f 而定),這將會導致梯度下降權重更新時出現 z 字型的下降。
當然,如果是按 batch 去訓練,那麼每個 batch 可能得到不同的訊號,整個批量的梯度加起來後可以緩解這個問題。因此,該問題相對於上面的神經元飽和問題來說只是個小麻煩,沒有那麼嚴重。
tanh 函式同樣存在飽和問題,但它的輸出是零中心的,因此實際中 tanh 比 sigmoid 更受歡迎。
tanh 函式實際上是乙個放大的 sigmoid 函式,數學關係為:tanh(x
relu 近些年來非常流行。它的數學公式為:f(x
是二維時,relu 的效果如圖:
relu 的優點:
相較於 sigmoid 和 tanh 函式,relu 對於 sgd 的收斂有巨大的加速作用(alex krizhevsky 指出有 6 倍之多)。有人認為這是由它的線性、非飽和的公式導致的。
相比於 sigmoid/tanh,relu 只需要乙個閾值就可以得到啟用值,而不用去算一大堆複雜的(指數)運算。
relu 的缺點是,它在訓練時比較脆弱並且可能「死掉」。
舉例來說:乙個非常大的梯度經過乙個 relu 神經元,更新過引數之後,這個神經元再也不會對任何資料有啟用現象了。如果這種情況發生,那麼從此所有流過這個神經元的梯度將都變成 0。
也就是說,這個 relu 單元在訓練中將不可逆轉的死亡,導致了資料多樣化的丟失。實際中,如果學習率設定得太高,可能會發現網路中 40% 的神經元都會死掉(在整個訓練集中這些神經元都不會被啟用)。
合理設定學習率,會降低這種情況的發生概率。
leaky relu 是為解決「 relu 死亡」問題的嘗試。
relu 中當 x<0 時,函式值為 0。而 leaky relu 則是給出乙個很小的負數梯度值,比如 0.01。
有些研究者的**指出這個啟用函式表現很不錯,但是其效果並不是很穩定。
kaiming he 等人在 2015 年發布的** delving deep into rectifiers 中介紹了一種新方法prelu,把負區間上的斜率當做每個神經元中的乙個引數來訓練。然而該啟用函式在在不同任務中表現的效果也沒有特別清晰。
maxout 是對 relu 和 leaky relu 的一般化歸納,它的函式公式是(二維時):max(w
t1+b
1,wt
2+b2
)max(w1t+b1,w2t+b2)
。relu 和 leaky relu 都是這個公式的特殊情況(比如 relu 就是當 w1,
b1=0
w1,b1=0
時)。這樣 maxout 神經元就擁有 relu 單元的所有優點(線性和不飽和),而沒有它的缺點(死亡的relu單元)。然而和 relu 對比,它每個神經元的引數數量增加了一倍,這就導致整體引數的數量激增。
通常來說,很少會把各種啟用函式串起來在乙個網路中使用的。
如果使用 relu,那麼一定要小心設定 learning rate,而且要注意不要讓你的網路出現很多 「dead」 神經元,如果這個問題不好解決,那麼可以試試 leaky relu、prelu 或者 maxout.
最好不要用 sigmoid,可以試試 tanh,不過可以預期它的效果會比不上 relu 和 maxout.
常用啟用函式總結
神經網路從數學上來說,就是用來擬合乙個函式。把資料扔進去,得到乙個 結果,以此來解決分類和回歸等問題。但是針對不同的問題,需要擬合不同的函式,包括線性函式和非線性函式。神經網路中常常會見到各種啟用函式,當需要擬合非線性函式時就需要啟用函式登場了。對於每個神經元來說,都是先進行線性變換,再將線性變換的...
NLP複習 常用啟用函式的比較
sigmoid的導數的影象 缺點 x較大時,導數接近0,導致引數長時間得不到更新。因此除了輸出層是乙個二分類問題,其他基本不用它。pytorch torch.sigmoid tanh導數影象 優缺點 解決了sigmoid函式的不是zero centered輸出問題 y軸方向均值為0 然而仍有梯度消失...
啟用函式的比較
在深度網路中啟用函式的作用 引入非線性。提公升網路的表達能力 啟用函式的對比 sigmoid sigmoid的計算量大 相比relu 反向傳播容易出現梯度消失,輸出均大於0,使得輸出均值不為0,出現偏移現象。tanh 雙曲正切計算量更大,依然有軟飽和性 relu 收斂速度比sigmoid和tanh快...