激活函數
1.介紹
激活函數(Activation Function)層又稱非線性映射(Non-Linearity Mapping)層,作用是增加整個網絡的非線性(即表達能力或抽象能力)。深度學習之所以擁有強大的表示能力 ,關鍵就在於激活函數的非線性
然而物極必反。由於 非線性設計 所帶來的一系列 副作用(如 期望均值不爲0、死區),迫使煉丹師們設計出種類繁多的激活函數來 約束 非線性 的 合理範圍
由於激活函數接在BN之後,所以激活函數的輸入被限制在了之間。因此,即使是ReLu這種簡易的激活函數,也能很好地發揮作用
2.函數類型
Sigmoid
Sigmoid函數,即著名的 Logistic 函數。被用作神經網絡的閾值函數,將變量映射到之間
缺點:
(1)輸出值落在之間,期望均值爲 0.5 ,不符合均值爲 0 的理想狀態(2)受現有的梯度下降算法所限(嚴重依賴逐層的梯度計算值),Sigmoid函數對落入的輸入值,梯度計算爲 0,發生梯度彌散,因此該函數存在一正一負兩塊“死區”
tanh(x)
tanh是雙曲函數中的一種,又名雙曲正切
改進:
將期望均值平移到了0這一理想狀態
缺點:
本質上依然是Sigmoid函數,依然無法迴避一左一右兩塊 “死區”(此時“死區”甚至還擴張了區間範圍)
ReLu
ReLu函數,Rectified Linear Unit,又稱 修正線性單元
ReLu設計已成爲了深度網絡的標配,當下深度網絡的結構和relu相關的兩大標配:He初始化(對ReLu網絡有利)和Conv->BN->ReLu(默認採用relu)
改進:
徹底消滅了正半軸上的死區;計算超簡單;正是因爲Alex Net中提出了ReLu,在當時很好地緩解了梯度彌散,使得網絡深度的天花板第一次被打破;該設計有助於使模型參數稀疏。
缺點
期望均值跑得離0更遠了;負半軸上的死區直接蠶食到了 0點
ReLu6
由於Relu函數的正半軸不施加任何非線性約束,因此當輸入爲正大數時,易引起正半軸上的梯度爆炸。因此,Relu6 應運而生
改進:
對正半軸 施加了 非線性約束;計算超簡單
缺點:
期望均值依然不爲 0 ;正半軸上的“死區”死灰復燃,從ReLu的蠶食至 ReLu6的,但是15年BN出來之後,輸入被歸一化到了之間。因此,ReLu6的設計就顯得沒有必要了
Leaky ReLu
對ReLu函數新增一超參數,以解決負半軸的“死區”問題
其中,超參數常被設定爲0.01或0.001數量級的較小正數
改進:
把 負半軸上的“死區”也端了,從此再無“死區”
缺點:
期望均值依然不爲0;合適的值較難設定且較爲敏感,導致在實際使用中性能不穩定
參數化ReLu
將Leaky ReLu函數中的超參數設置爲和模型一起被訓練到的變量,以解決值較難設定的問題
改進:
更大自由度
缺點:
更大的過擬合風險;較爲麻煩
隨機化ReLu
將 Leaky ReLu函數中的超參數隨機設置
ELU
ELU函數,Exponential Linear Unit,又稱指數化線性單元 ,於2016年提出
其中,超參數常備設定爲1
改進:
完美解決了“死區”問題
缺點:
期望均值依然不爲0;計算較爲複雜