6 种激活函数核心知识点,请务必掌握!
點(diǎn)擊上方“AI有道”,選擇“置頂公眾號”
關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)!
我們知道,神經(jīng)網(wǎng)絡(luò)模型中,各隱藏層、包括輸出層都需要激活函數(shù)(Activation Function)。我們比較熟悉的、常用的激活函數(shù)也有 ReLU、Sigmoid 等等。但是,對于各個(gè)激活函數(shù)的選取方法、區(qū)別特點(diǎn)還有幾點(diǎn)需要特別注意的地方。今天紅色石頭就和大家一起來總結(jié)一下常用激活函數(shù) Sigmoid、tanh、ReLU、Leaky ReLU、ELU、Maxout 的關(guān)鍵知識點(diǎn)。
1
為什么需要激活函數(shù)
神經(jīng)網(wǎng)絡(luò)單個(gè)神經(jīng)元的基本結(jié)構(gòu)由線性輸出 Z 和非線性輸出 A 兩部分組成。如下圖所示:
其中,f(x) 即為線性輸出 Z,g(x) 即為非線性輸出,g() 表示激活函數(shù)。通俗來說,激活函數(shù)一般是非線性函數(shù),其作用是能夠給神經(jīng)網(wǎng)絡(luò)加入一些非線性因素,使得神經(jīng)網(wǎng)絡(luò)可以更好地解決較為復(fù)雜的問題。
舉個(gè)簡單的例子,二分類問題,如果不使用激活函數(shù),例如使用簡單的邏輯回歸,只能作簡單的線性劃分,如下圖所示:
如果使用激活函數(shù),則可以實(shí)現(xiàn)非線性劃分,如下圖所示:
可見,激活函數(shù)能夠幫助我們引入非線性因素,使得神經(jīng)網(wǎng)絡(luò)能夠更好地解決更加復(fù)雜的問題。
有個(gè)問題,為什么激活函數(shù)一般都是非線性的,而不能是線性的呢?從反面來說,如果所有的激活函數(shù)都是線性的,則激活函數(shù) g(z)=z,即 a=z。那么,以兩層神經(jīng)網(wǎng)絡(luò)為例,最終的輸出為:
經(jīng)過推導(dǎo)我們發(fā)現(xiàn)網(wǎng)絡(luò)輸出仍是 X 的線性組合。這表明,使用神經(jīng)網(wǎng)絡(luò)與直接使用線性模型的效果并沒有什么兩樣。即便是包含多層隱藏層的神經(jīng)網(wǎng)絡(luò),如果使用線性函數(shù)作為激活函數(shù),最終的輸出仍然是線性模型。這樣的話神經(jīng)網(wǎng)絡(luò)就沒有任何作用了。因此,隱藏層的激活函數(shù)必須要是非線性的。
值得一提的是,如果所有的隱藏層全部使用線性激活函數(shù),只有輸出層使用非線性激活函數(shù),那么整個(gè)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)就類似于一個(gè)簡單的邏輯回歸模型,效果與單個(gè)神經(jīng)元無異。另外,如果是擬合問題而不是分類問題,輸出層的激活函數(shù)可以使用線性函數(shù)。
2
Sigmoid
激活函數(shù) Sigmoid 的圖形表達(dá)式如下所示:
Sigmoid 函數(shù)的取值范圍在 (0,1) 之間,單調(diào)連續(xù),求導(dǎo)容易,一般用于二分類神經(jīng)網(wǎng)絡(luò)的輸出層。
下面重點(diǎn)談一下 Sigmoid 函數(shù)的缺點(diǎn)。
首先,Sigmoid 函數(shù)飽和區(qū)范圍廣,容易造成梯度消失。飽和區(qū)如下圖所示:
上圖中紅色橢圓標(biāo)注的飽和區(qū)曲線平緩,梯度的值很小,近似為零。而且 Sigmoid 函數(shù)的飽和區(qū)范圍很廣,例如除了 [-5,5],其余區(qū)域都近似飽和區(qū)。這種情況很容易造成梯度消失,梯度消失會(huì)增大神經(jīng)網(wǎng)絡(luò)訓(xùn)練難度,影響神經(jīng)網(wǎng)絡(luò)模型的性能。
其次,Sigmoid 函數(shù)輸出是非零對稱的,即輸出恒大于零。這會(huì)產(chǎn)生什么影響呢?我們來看,假如 Sigmoid 函數(shù)的輸出為 σ(Wx+b),且滿足 0<σ(Wx+b)<1。在反向求導(dǎo)過程中,令損失函數(shù) J 對?σ(Wx+b) 的求導(dǎo)為 dσ,現(xiàn)在計(jì)算 J 對 W 的偏導(dǎo)數(shù):
其中,σ(Wx+b)>0,1-σ(Wx+b)>0。
若神經(jīng)元的輸入 x>0,則無論?dσ 正負(fù)如何,總能得到 dW 恒為正或者恒為負(fù)。也就是說參數(shù)矩陣 W 的每個(gè)元素都會(huì)朝著同一個(gè)方向變化,同為正或同為負(fù)。這對于神經(jīng)網(wǎng)絡(luò)訓(xùn)練是不利的,所有的 W 都朝著同一符號方向變化會(huì)減小訓(xùn)練速度,增加模型訓(xùn)練時(shí)間。就好比我們下樓梯的所需的時(shí)間總比直接滑梯下來的時(shí)間要長得多,如下圖所示:
圖中,紅色折線是上文討論的情況,藍(lán)色斜線是 W 不全朝同一方向變化的情況。
值得一提的是,針對 Sigmoid 函數(shù)的這一問題,神經(jīng)元的輸入 x 常會(huì)做預(yù)處理,即將均值歸一化到零值。這樣也能有效避免?dW 恒為正或者恒為負(fù)。
最后還有一點(diǎn),Sigmoid 函數(shù)包含 exp 指數(shù)運(yùn)算,運(yùn)算成本也比較大。
3
tanh
激活函數(shù) tanh 的圖形表達(dá)式如下所示:
tanh 函數(shù)的取值范圍在 (-1,1) 之間,單調(diào)連續(xù),求導(dǎo)容易。
相比于 Sigmoid 函數(shù),tanh 函數(shù)的優(yōu)點(diǎn)主要有兩個(gè):其一,收斂速度更快,如下圖所示,tanh 函數(shù)線性區(qū)斜率較 Sigmoid 更大一些。在此區(qū)域內(nèi)訓(xùn)練速度會(huì)更快。其二,tanh 函數(shù)輸出均值為零,也就不存在 Sigmoid 函數(shù)中?dW 恒為正或者恒為負(fù),從而影響訓(xùn)練速度的問題。
但是,tanh 函數(shù)與 Sigmoid 函數(shù)一樣,也存在飽和區(qū)梯度消失問題。其飽和區(qū)甚至比 Sigmoid 還要大一些,但不明顯。
4
ReLU
激活函數(shù) ReLU 的全稱是?Rectified Linear Unit,其圖形表達(dá)式如下所示:
ReLU 函數(shù)是最近幾年比較火熱的激活函數(shù)之一。相比 Sigmoid 和 tanh 函數(shù),其主要優(yōu)點(diǎn)包括以下幾個(gè)方面:
沒有飽和區(qū),不存在梯度消失問題。
沒有復(fù)雜的指數(shù)運(yùn)算,計(jì)算簡單、效率提高。
實(shí)際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。
比 Sigmoid 更符合生物學(xué)神經(jīng)激活機(jī)制。
下面這張圖對比了 ReLU 與 tanh 的收斂速度差異性。數(shù)據(jù)集是 CIFAR 10,模型是四層的卷積神經(jīng)網(wǎng)絡(luò)。圖中,實(shí)線代表 ReLU,虛線代表 tanh,ReLU 比 tanh 更快地到達(dá)了錯(cuò)誤率 0.25 處。(引自論文《ImageNet Classification with Deep Convolutional Neural Networks》)
但是,ReLU 函數(shù)的缺點(diǎn)也比較明顯。首先,ReLU 的輸出仍然是非零對稱的,可能出現(xiàn)?dW 恒為正或者恒為負(fù),從而影響訓(xùn)練速度。
其次,也是最為重要的,當(dāng) x<0 時(shí),ReLU 輸出總為零。該神經(jīng)元輸出為零,則反向傳播時(shí),權(quán)重、參數(shù)的梯度橫為零,造成權(quán)重、參數(shù)永遠(yuǎn)不會(huì)更新,即造成神經(jīng)元失效,形成了“死神經(jīng)元”。所以,針對這一問題,有時(shí)候會(huì)將 ReLU 神經(jīng)元初始化為正偏值,例如 0.01。
5
Leaky ReLU
Leaky ReLU 對 ReLU 進(jìn)行了改進(jìn),其圖形表達(dá)式如下所示:
Leaky ReLU 的優(yōu)點(diǎn)與 ReLU 類似:
沒有飽和區(qū),不存在梯度消失問題。
沒有復(fù)雜的指數(shù)運(yùn)算,計(jì)算簡單、效率提高。
實(shí)際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。
不會(huì)造成神經(jīng)元失效,形成了“死神經(jīng)元”。
當(dāng)然,0.01 的系數(shù)是可調(diào)的,一般不會(huì)太大。
6
ELU
ELU(Exponential Linear Units)也是 ReLU 的一個(gè)變種,其圖形表達(dá)式如下所示:
ELU 繼承了 Leaky ReLU 的所有優(yōu)點(diǎn):
沒有飽和區(qū),不存在梯度消失問題。
沒有復(fù)雜的指數(shù)運(yùn)算,計(jì)算簡單、效率提高。
實(shí)際收斂速度較快,大約是 Sigmoid/tanh 的 6 倍。
不會(huì)造成神經(jīng)元失效,形成了“死神經(jīng)元”。
輸出均值為零
負(fù)飽和區(qū)的存在使得 ELU 比 Leaky ReLU 更加健壯,抗噪聲能力更強(qiáng)。
但是,ELU 包含了指數(shù)運(yùn)算,存在運(yùn)算量較大的問題。
7
Maxout
Maxout 最早出現(xiàn)在 ICML2013 上,由 Goodfellow 提出。其表達(dá)式如下所示:
Maxout 的擬合能力是非常強(qiáng)的,它可以擬合任意的的凸函數(shù)。最直觀的解釋就是任意的凸函數(shù)都可以由分段線性函數(shù)以任意精度擬合,而 Maxout 又是取 k 個(gè)隱藏層節(jié)點(diǎn)的最大值,這些”隱藏層"節(jié)點(diǎn)也是線性的,所以在不同的取值范圍下,最大值也可以看做是分段線性的(上面的公式中 k = 2)。
上圖引自論文《Maxout Networks.? Ian J. Goodfellow, David Warde-Farley, Mehdi Mirza, Aaron Courville, Yoshua Bengio》,可以說,Maxout 可以擬合任意凸函數(shù),k 值越大,分段越多,擬合效果也就越好。
Maxout 保證了始終是線性區(qū)域,沒有飽和區(qū),訓(xùn)練速度快,而且不會(huì)出現(xiàn)壞死神經(jīng)元。
8
如何選擇合適的激活函數(shù)
1)首選 ReLU,速度快,但是要注意學(xué)習(xí)速率的調(diào)整,
2)如果 ReLU 效果欠佳,嘗試使用 Leaky ReLU、ELU 或 Maxout 等變種。
3)可以嘗試使用 tanh。
4)Sigmoid 和 tanh 在 RNN(LSTM、注意力機(jī)制等)結(jié)構(gòu)中有所應(yīng)用,作為門控或者概率值。其它情況下,減少 Sigmoid 的使用。
5)在淺層神經(jīng)網(wǎng)絡(luò)中,選擇使用哪種激勵(lì)函數(shù)影響不大。
推薦閱讀:
【干貨】我的機(jī)器學(xué)習(xí)入門路線圖
白話生成對抗網(wǎng)絡(luò) GAN,50 行代碼玩轉(zhuǎn) GAN!
7 種回歸方法!請務(wù)必掌握!
機(jī)器學(xué)習(xí)筆試題精選
機(jī)器學(xué)習(xí)筆試題精選
點(diǎn)擊“閱讀原文”,獲取更多干貨文章!總結(jié)
以上是生活随笔為你收集整理的6 种激活函数核心知识点,请务必掌握!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白话生成对抗网络 GAN,50 行代码玩
- 下一篇: 嫌Python太慢了?让Cython带你