激活函數(shù)和損失函數(shù)

3.1 激活函數(shù)

關(guān)于激活函數(shù),首先要搞清楚的問題是,激活函數(shù)是什么,有什么用?不用激活函數(shù)可不可以?答案是不可以。激活函數(shù)的主要作用是提供網(wǎng)絡(luò)的非線性建模能力。如果沒有激活函數(shù),那么該網(wǎng)絡(luò)僅能夠表達(dá)線性映射,此時(shí)即便有再多的隱藏層,其整個(gè)網(wǎng)絡(luò)跟單層神經(jīng)網(wǎng)絡(luò)也是等價(jià)的。因此也可以認(rèn)為,只有加入了激活函數(shù)之后,深度神經(jīng)網(wǎng)絡(luò)才具備了分層的非線性映射學(xué)習(xí)能力。

那么激活函數(shù)應(yīng)該具有什么樣的性質(zhì)呢?

可微性: 當(dāng)優(yōu)化方法是基于梯度的時(shí)候,這個(gè)性質(zhì)是必須的。

單調(diào)性: 當(dāng)激活函數(shù)是單調(diào)的時(shí)候,單層網(wǎng)絡(luò)能夠保證是凸函數(shù)。

輸出值的范圍: 當(dāng)激活函數(shù)輸出值是 有限 的時(shí)候,基于梯度的優(yōu)化方法會更加 穩(wěn)定,因?yàn)樘卣鞯谋硎臼苡邢迿?quán)值的影響更顯著;當(dāng)激活函數(shù)的輸出是 無限 的時(shí)候,模型的訓(xùn)練會更加高效,不過在這種情況小,一般需要更小的learning rate

從目前來看,常見的激活函數(shù)多是分段線性和具有指數(shù)形狀的非線性函數(shù)

3.1.1 sigmoid

f(x)=11+e?x

sigmoid 是使用范圍最廣的一類激活函數(shù),具有指數(shù)函數(shù)形狀,它在物理意義上最為接近生物神經(jīng)元。此外,(0, 1) 的輸出還可以被表示作概率,或用于輸入的歸一化,代表性的如Sigmoid交叉熵?fù)p失函數(shù)。

然而,sigmoid也有其自身的缺陷,最明顯的就是飽和性。從上圖可以看到,其兩側(cè)導(dǎo)數(shù)逐漸趨近于0

limx?>∞f′(x)=0

具有這種性質(zhì)的稱為軟飽和激活函數(shù)。具體的,飽和又可分為左飽和與右飽和。與軟飽和對應(yīng)的是硬飽和, 即

f′(x)=0,當(dāng)|x|>c,其中c為常數(shù)。

sigmoid 的軟飽和性,使得深度神經(jīng)網(wǎng)絡(luò)在二三十年里一直難以有效的訓(xùn)練,是阻礙神經(jīng)網(wǎng)絡(luò)發(fā)展的重要原因。具體來說,由于在后向傳遞過程中,sigmoid向下傳導(dǎo)的梯度包含了一個(gè)f′(x)因子(sigmoid關(guān)于輸入的導(dǎo)數(shù)),因此一旦輸入落入飽和區(qū),f′(x)就會變得接近于0,導(dǎo)致了向底層傳遞的梯度也變得非常小。此時(shí),網(wǎng)絡(luò)參數(shù)很難得到有效訓(xùn)練。這種現(xiàn)象被稱為梯度消失。一般來說, sigmoid 網(wǎng)絡(luò)在 5 層之內(nèi)就會產(chǎn)生梯度消失現(xiàn)象

此外,sigmoid函數(shù)的輸出均大于0,使得輸出不是0均值,這稱為偏移現(xiàn)象,這會導(dǎo)致后一層的神經(jīng)元將得到上一層輸出的非0均值的信號作為輸入。

3.1.2 tanh

f(x)=1?e?2x1+e?2x

tanh也是一種非常常見的激活函數(shù)。與sigmoid相比,它的輸出均值是0,使得其收斂速度要比sigmoid快,減少迭代次數(shù)。然而,從途中可以看出,tanh一樣具有軟飽和性,從而造成梯度消失。

3.1.3 ReLU,P-ReLU, Leaky-ReLU

f(x)={x,ifx≥00,ifx<0f(x)=max(0,x)

ReLU的全稱是Rectified Linear Units,是一種后來才出現(xiàn)的激活函數(shù)。 可以看到,當(dāng)x<0時(shí),ReLU硬飽和,而當(dāng)x>0時(shí),則不存在飽和問題。所以,ReLU 能夠在x>0時(shí)保持梯度不衰減,從而緩解梯度消失問題。這讓我們能夠直接以監(jiān)督的方式訓(xùn)練深度神經(jīng)網(wǎng)絡(luò),而無需依賴無監(jiān)督的逐層預(yù)訓(xùn)練。

然而,隨著訓(xùn)練的推進(jìn),部分輸入會落入硬飽和區(qū),導(dǎo)致對應(yīng)權(quán)重?zé)o法更新。這種現(xiàn)象被稱為“神經(jīng)元死亡”。與sigmoid類似,ReLU的輸出均值也大于0,偏移現(xiàn)象和 神經(jīng)元死亡會共同影響網(wǎng)絡(luò)的收斂性。

針對在x<0的硬飽和問題,我們對ReLU做出相應(yīng)的改進(jìn),使得

f(x)={x,ifx≥0αx,ifx<0

這就是Leaky-ReLU, 而P-ReLU認(rèn)為,α也可以作為一個(gè)參數(shù)來學(xué)習(xí),原文獻(xiàn)建議初始化a為0.25,不采用正則。

3.1.4 ELU

f(x)={x,ifx≥0α(ex?1),ifx<0

融合了sigmoid和ReLU,左側(cè)具有軟飽和性,右側(cè)無飽和性。右側(cè)線性部分使得ELU能夠緩解梯度消失,而左側(cè)軟飽能夠讓ELU對輸入變化或噪聲更魯棒。ELU的輸出均值接近于零,所以收斂速度更快。在 ImageNet上,不加 Batch Normalization 30 層以上的 ReLU 網(wǎng)絡(luò)會無法收斂,PReLU網(wǎng)絡(luò)在MSRA的Fan-in (caffe )初始化下會發(fā)散,而 ELU 網(wǎng)絡(luò)在Fan-in/Fan-out下都能收斂

3.1.5 Maxout

f(x)=max(wT1x+b1,wT2x+b2,?,wTn+bn)

在我看來,這個(gè)激活函數(shù)有點(diǎn)大一統(tǒng)的感覺,因?yàn)閙axout網(wǎng)絡(luò)能夠近似任意連續(xù)函數(shù),且當(dāng)w2,b2,…,wn,bn為0時(shí),退化為ReLU。Maxout能夠緩解梯度消失,同時(shí)又規(guī)避了ReLU神經(jīng)元死亡的缺點(diǎn),但增加了參數(shù)和計(jì)算量。

3.2 損失函數(shù)

在之前的內(nèi)容中,我們用的損失函數(shù)都是平方差函數(shù),即

C=12(a?y)2

其中y是我們期望的輸出,a為神經(jīng)元的實(shí)際輸出(a=σ(Wx+b)。也就是說,當(dāng)神經(jīng)元的實(shí)際輸出與我們的期望輸出差距越大,代價(jià)就越高。想法非常的好,然而在實(shí)際應(yīng)用中,我們知道參數(shù)的修正是與?C?W和?C?b成正比的,而根據(jù)

?C?W=(a?y)σ′(a)xT?C?b=(a?y)σ′(a)

我們發(fā)現(xiàn)其中都有σ′(a)這一項(xiàng)。因?yàn)閟igmoid函數(shù)的性質(zhì),導(dǎo)致σ′(z)在z取大部分值時(shí)會造成飽和現(xiàn)象,從而使得參數(shù)的更新速度非常慢,甚至?xí)斐呻x期望值越遠(yuǎn),更新越慢的現(xiàn)象。那么怎么克服這個(gè)問題呢?我們想到了交叉熵函數(shù)。我們知道,熵的計(jì)算公式是

H(y)=?∑iyilog(yi)

而在實(shí)際操作中,我們并不知道y的分布,只能對y的分布做一個(gè)估計(jì),也就是算得的a值, 這樣我們就能夠得到用a來表示y的交叉熵

H(y,a)=?∑iyilog(ai)

如果有多個(gè)樣本,則整個(gè)樣本的平均交叉熵為

H(y,a)=?1n∑n∑iyi,nlog(ai,n)

其中n表示樣本編號,i表示類別編。 如果用于logistic分類,則上式可以簡化成

H(y,a)=?1n∑nylog(a)+(1?y)log(1?a)

與平方損失函數(shù)相比,交叉熵函數(shù)有個(gè)非常好的特質(zhì),

H′=1n∑(an?yn)=1n∑(σ(zn)?yn)

可以看到其中沒有了σ′這一項(xiàng),這樣一來也就不會受到飽和性的影響了。當(dāng)誤差大的時(shí)候,權(quán)重更新就快,當(dāng)誤差小的時(shí)候,權(quán)重的更新就慢。這是一個(gè)很好的性質(zhì)。

原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容