深度學習——激活函數

激活函數

1.介紹

激活函數(Activation Function)層又稱非線性映射(Non-Linearity Mapping)層,作用是增加整個網絡的非線性(即表達能力或抽象能力)。深度學習之所以擁有強大的表示能力 ,關鍵就在於激活函數的非線性

然而物極必反。由於 非線性設計 所帶來的一系列 副作用(如 期望均值不爲0、死區),迫使煉丹師們設計出種類繁多的激活函數來 約束 非線性 的 合理範圍

由於激活函數接在BN之後,所以激活函數的輸入被限制在了(1,1)(-1,-1)之間。因此,即使是ReLu這種簡易的激活函數,也能很好地發揮作用

2.函數類型

Sigmoid

Sigmoid函數,即著名的 Logistic 函數。被用作神經網絡的閾值函數,將變量映射到(0,1)(0,1)之間
S(x)=11+ex S(x)=\frac{1}{1+e^{-x}}
在這裏插入圖片描述

缺點:

(1)輸出值落在(0,1)(0,1)之間,期望均值爲 0.5 ,不符合均值爲 0 的理想狀態(2)受現有的梯度下降算法所限(嚴重依賴逐層的梯度計算值),Sigmoid函數對落入(,5)(5,)(-\infty,-5)\bigcup(5,\infty)的輸入值,梯度計算爲 0,發生梯度彌散,因此該函數存在一正一負兩塊“死區”

tanh(x)

tanh是雙曲函數中的一種,又名雙曲正切
tanh(x)=2S(2x)1=exexex+ex tanh(x)=2S(2x)-1=\frac{e^x-e^{-x}}{e^x+e^{-x}}
在這裏插入圖片描述

改進:

將期望均值平移到了0這一理想狀態

缺點:

本質上依然是Sigmoid函數,依然無法迴避一左一右兩塊 “死區”(此時“死區”甚至還擴張了區間範圍)

ReLu

ReLu函數,Rectified Linear Unit,又稱 修正線性單元
ReLu(x)=max(0,x) ReLu(x)=max(0,x)
在這裏插入圖片描述
ReLu設計已成爲了深度網絡的標配,當下深度網絡的結構和relu相關的兩大標配:He初始化(對ReLu網絡有利)和Conv->BN->ReLu(默認採用relu)

改進:

徹底消滅了正半軸上的死區;計算超簡單;正是因爲Alex Net中提出了ReLu,在當時很好地緩解了梯度彌散,使得網絡深度的天花板第一次被打破;該設計有助於使模型參數稀疏。

缺點

期望均值跑得離0更遠了;負半軸上的死區直接蠶食到了 0點

ReLu6

由於Relu函數的正半軸不施加任何非線性約束,因此當輸入爲正大數時,易引起正半軸上的梯度爆炸。因此,Relu6 應運而生
ReLu6(x)=min(max(0,x),6) ReLu6(x)=min(max(0,x),6)
在這裏插入圖片描述

改進:

對正半軸 施加了 非線性約束;計算超簡單

缺點:

期望均值依然不爲 0 ;正半軸上的“死區”死灰復燃,從ReLu的(,0)(-\infty,0)蠶食至 ReLu6的(,0)(6,)(-\infty,0)\bigcup(6,\infty),但是15年BN出來之後,輸入被歸一化到了(1,1)(-1,1)之間。因此,ReLu6的設計就顯得沒有必要了

Leaky ReLu

對ReLu函數新增一超參數λ\lambda,以解決負半軸的“死區”問題

其中,超參數常被設定爲0.01或0.001數量級的較小正數

改進:

把 負半軸上的“死區”也端了,從此再無“死區”

缺點:

期望均值依然不爲0;合適的λ\lambda值較難設定且較爲敏感,導致在實際使用中性能不穩定

參數化ReLu

將Leaky ReLu函數中的超參數λ\lambda設置爲和模型一起被訓練到的變量,以解決λ\lambda值較難設定的問題

改進:

更大自由度

缺點:

更大的過擬合風險;較爲麻煩

隨機化ReLu

將 Leaky ReLu函數中的超參數λ\lambda隨機設置

ELU

ELU函數,Exponential Linear Unit,又稱指數化線性單元 ,於2016年提出
ELU(x)={x,x0λ(ex1),x<0 ELU(x)=\left\{ \begin{aligned} x,x\ge0\\ \lambda(e^x-1),x<0 \\ \end{aligned} \right.
其中,超參數λ\lambda常備設定爲1

改進:

完美解決了“死區”問題

缺點:

期望均值依然不爲0;計算較爲複雜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章