干貨 | 深入理解深度學習中的激活函數


理解深度學習中的激活函數

在這個文章中,我們將會了解幾種不同的激活函數,同時也會了解到哪個激活函數優於其他的激活函數,以及各個激活函數的優缺點。

1. 什么是激活函數?

生物神經網絡是人工神經網絡的起源。然而,人工神經網絡(ANNs)的工作機制與大腦的工作機制並不是十分的相似。不過在我們了解為什么把激活函數應用在人工神經網絡中之前,了解一下激活函數與生物神經網絡的關聯依然是十分有用的。

一個典型神經元的物理結構由細胞體、向其他神經元發送信息的軸突以及從其他神經元接受信號或信息的樹突組成。

ki2mBd.png

​ 圖一 生物神經網絡

​ 圖一中,紅色的圓圈表示兩個神經元連接的區域。神經元通過樹突從其他神經元中接受信號。樹突的信號強度稱為突觸權值,用於與傳入信號相乘。樹突傳出的信號在細胞體中累積,如果最后的信號強度超過了某個閾值,神經元就會允許軸突中的信息繼續傳遞。否則,信號就會被阻止而得不到進一步的傳播。

​ 激活函數決定了信號是否能夠被通過。這個例子僅僅是個只有閾值這一個參數的簡單的階躍函數。現在,當我們學習了一些新東西(或者忘掉一些東西)時,閾值以及一些神經元的突觸權重會發生改變。這在神經元中創造了新的連接從而使得大腦能學習到新的東西。

​ 讓我們在人工神經元的基礎上來再次理解相同的概念。

ki2tBj.png

​ 圖二 所示的例子是一個輸入為\((x_1-x_n)\)的神經元,輸入對應

​ 的權重分布為\((w_1-w_n)\),偏置為(b),激活函數\((f)\)作用於輸入

​ 的權重之和上面。

​ 圖二中的\((x_1,...,x_n)\)是與權重\((w_1,...,w_n)\)相乘的信號向量,接着是累加(例如:總和+偏置b)。最后,激活函數f作用於這個累加的總和。請注意,權重\((w_1,...,w_n)\)和偏置b把輸入信號轉換為線性的。而另一方面,激活函數把信號轉換為非線性的,而這種非線性使得我們能夠學習到輸入與輸出之間任意復雜的變換關系。

​ 這些年來,人們使用了各種各樣的激活函數,但是尋找一個合適的激活函數使神經網絡學習得更好更快依然是一個非常活躍的研究領域。

2. 網絡是怎么學習的?

​ 理解神經網絡學習的基本概念是關鍵。假設網絡原本應該得到的輸出為y。網絡產生的輸出為\(y'\)。應該得到的輸出與實際得到的輸出之間的差值\((y-y')\)被轉換為損失函數\((J)\)的度量。當神經網絡的錯誤很多時,該損失很大,而當損失很小時則網絡的錯誤也很少。整個訓練過程就是在訓練集上尋找使損失函數最小的權值和偏置。

ki2enH.png

​ 圖三 梯度下降

在圖三中,損失函數的形狀像一個碗。在訓練過程中的任何一點,損失函數關於權值的偏導數只是在碗的當前位置上的斜率。可見通過向偏導數預測出的方向移動,我們可以到達碗的底部,從而最小化了損失函數。這個使用函數的偏導數來迭代找到局部最小值的方法稱為梯度下降法。

​ 在人工神經網絡中,權值通過稱為反向傳播的方法來更新。損失函數關於權值的偏導數用於更新權值。在某種意義上來說,誤差是在網絡上用導數來反向傳播的。這是用迭代的方式來完成的,在許多輪迭代之后,損失達到最小值,並且損失函數的導數變為0。

3. 激活函數的類型

  • 線性激活函數:形式為\(f(x)=x\)的簡單的線性函數。基本上,輸入不經過任何修正就傳遞給輸出。

ki2Vje.png

​ 圖四 線性激活函數

  • 非線性激活函數:這些函數用於分離非線性可分的數據,並且是最常使用的激活函數。一個非線性等式決定了從輸入到輸出的映射。不同類型的非線性激活函數分別有sigmod, tanh, relu, lrelu, prelu, swish等等。本文接下來會詳細的討論這些激活函數。

    ki2Q4P.png

    ​ 圖五 非線性激活函數

4. 在一個人工神經網絡中,我們為什么需要非線性激活函數?

​ 神經網絡用於實現復雜的函數,而非線性激活函數能夠使神經網絡逼近任意復雜的函數。如果沒有激活函數引入的非線性,多層神經網絡就相當於單層的神經網絡。

​ 讓我們看一個簡單的例子來理解為什么沒有非線性,神經網絡甚至不可能逼近像XOR和XNOR門這樣簡單的函數。在圖六中,我們用圖表表示了XOR門。我們的數據集中有兩個類,分別用交叉和圓圈來表示。當兩個特征\(x_1\)\(x_2\)相同時,類的標簽為紅色交叉,否則就是藍色圓圈。當輸入為(0,0)與(1,1)時紅色交叉的輸出為0,輸入為(0,1)和(1,0)時的藍色圓圈的輸出為1。

ki2nHA.png

​ 圖六 XOR門的圖形表示

​ 通過圖六我們可以看到數據點都是非線性可分的。也就是說,我們無法畫出一條筆直的直線來分開藍色圓圈和紅色交叉。因此,我們才需要非線性的決策邊界來將它們分開。如果沒有非線性,神經網絡就不能逼近XOR門。

​ 激活函數對控制神經網絡的輸出范圍也起着至關重要的作用。神經元的輸出\(\sum_i^n{w_ix_i+b}\)可以是非常大的值。而這個輸出,若我們不經修改就輸入到下一層神經元中,有可能演變成一個非常大的數從而使得計算過程非常難以處理。而激活函數的任務之一就是將神經元的輸出映射到某個范圍內(例如:0到1之間)。
接下來,我們准備去了解一下不同類型的激活函數。

5. 非線性激活函數的類型

5.1 Sigmoid激活函數

​ Sigmoid也被稱為邏輯激活函數(Logistic Activation Function)。它將一個實數值壓縮到0至1的范圍內。當我們的最終目標是預測概率時,它可以被應用到輸出層。它使很大的負數向0轉變,很大的正數向1轉變。在數學上表示為

\[\alpha(x)=\frac{1}{1+e^{-x}} \]

下圖為sigmoid函數以及它的導數圖像。

ki2KAI.png ki2MNt.png

​ 圖七 Sigmoid激活函數 圖八 Sigmoid激活函數的導數

​ Sigmoid激活函數的三個主要缺點是:

  • 梯度消失:sigmoid函數在0和1附近是平坦的。也就是說,sigmoid的梯度在0和1附近為0。在通過sigmoid函數網絡反向傳播時,當神經元的輸出近似於0和1時它的梯度接近於0。這些神經元被稱為飽和神經元。因此,這些神經元的權值無法更新。不僅如此,與這些神經元相連接的神經元的權值也更新得非常緩慢。這個問題也被稱為梯度消失。所以,想象如果有一個大型網絡包含有許多處於飽和動態的sigmoid激活函數的神經元,那么網絡將會無法進行反向傳播。

  • 不是零均值:sigmoid的輸出不是零均值的。

  • 計算量太大:指數函數與其它非線性激活函數相比計算量太大了。

    下一個要討論的是解決了sigmoid中零均值問題的非線性激活函數。

5.2 Tanh激活函數

ki2338.pngki2Gjg.png

​ 圖九 Tanh激活函數 圖十 Tanh激活函數的導數

​ Tanh也被稱為雙曲正切激活函數。類似sigmoid,tanh也是把一個實數值壓縮到-1到1的范圍內。與sigmoid不同的是,tanh在-1到1的輸出范圍內是零均值的。你可以把tanh函數看做是兩個sigmoid加在一起。在實際運用中,tanh比sigmoid更好。負數的輸入被認為是更大的負數,零值輸入映射到零的附近,而正數的輸入被認為是正的。Tanh唯一的缺點是:tanh函數也存在着梯度消失的問題,因此在飽和時會導致梯度消失。

​ 為了解決梯度消失問題,讓我們討論另一個被稱為線性整流函數(ReLU)的非線性激活函數,它比我們之前討論的兩個激活函數都更好,並且也是在今天應用最為廣泛的激活函數。

5.3 線性整流函數(ReLU)

ki219f.pngki28gS.png

​ 圖十一 ReLU激活函數 圖十二 ReLU激活函數的導數

​ 如圖十一所示,ReLU激活函數從底部進行了半矯正(half-rectified)。在數學上,它可以由這個簡單的表達式表達:$$f(x)=max(x,0)$$

​ 這意味着,當輸入\(x<0\)時,輸出為0。當輸入\(x>0\)時,輸出就是輸入x的值。這個激活函數能夠使網絡更快的收斂。沒有飽和意味着至少在正數范圍內\((x>0)\)能夠對梯度消失有抵抗能力,所以神經元至少在一半的輸入范圍內不會反向傳播回全部都是0的結果。ReLU在計算上非常有效率,因為它是使用簡單的閾值實現的。

​ 但是Relu神經元有幾個缺點:

  • 不是零均值的:與sigmoid相同,它的輸出不是零均值的。

  • Relu的另一個問題是,如果在前向傳播的過程中\(x<0\),神經元保持沒有被激活的狀態並且在反向傳播時抵消了梯度。此時權值得不到更新,網絡無法學習。當\(x=0\)時,斜率在這個點是沒有定義的,不過這個問題在實現的過程中通過選擇左或者右梯度解決。

    為了解決relu激活函數在x<0時的梯度消失問題, 我們提出了被稱為泄漏relu(Leaky Relu)的激活函數,這個激活函數試圖解決ReLU激活函數”Dead ReLU”的問題。讓我們詳細了解一下leaky relu。

5.4泄漏ReLU激活函數(leaky relu)

ki2NHs.png

​ 圖十三 Leaky ReLU激活函數

​ Leaky ReLU激活函數是一個想要緩解relu消亡問題的嘗試。它的函數表達式如下:

​ $$f(x)=max(0.1x,x)$$

​ Leaky relu的思想就是當\(x<0\)時,會有個很小0.1的正斜率。這個函數多少消除了relu的消亡問題,但是它的結果並不一致。雖然它具有relu激活函數的所有特征,例如:計算效率高、收斂速度快、在正區域不飽和等。

​ 它的思想可以進一步的擴展。如用一個常數項代替乘以x,從而使我們能夠將這個常數項乘以一個能夠使leaky relu更好工作的超參數。這個leaky relu的拓展被稱為parametric relu(參數relu)。

5.5 參數ReLU激活函數(Parametric ReLU)

​ PRelu的函數為:\(f(x)=max(\alpha{x},x)\)

​ 其中\(\alpha\)為超參數。PRelu的思想是引進任意超參數\(\alpha\),而這個\(\alpha\)可以通過反向傳播學習。這賦予了神經元在負區域內選擇最好斜率的能力,因此,他們可以變成單純的ReLU激活函數或者Leaky ReLU激活函數。

​ 總之,它優於ReLU,但是你可以通過實驗使用Leaky ReLU或者Parametric ReLU來觀察它們是否能對你的問題給出最好的結果。

5.6 SWISH激活函數

ki2YuQ.png

​ 圖十四 SWISH激活函數

​ Swish也被稱為self-gated(自門控)激活函數,最近由谷歌研究人員發布。它的數學表達式為:

\[\alpha{(x)}=\frac{x}{1+e^{-x}} \]

​ 通過閱讀論文我們可以了解到,swish激活函數的表現比relu更好。從圖十四中我們可以觀察到swish激活函數在x軸的負區域內末端的圖像形狀與relu激活函數是不同的,這是因為swich激活函數即使輸入的值在增加,它的輸出也可以減少。大部分的激活函數都是單調的,即他們的輸出值在輸入增加的時候是不會減少的。Swish在0點具有單邊有界性,平滑且不單調。

參考:
https://www.learnopencv.com/understanding-activation-functions-in-deep-learning/

推薦閱讀

原來CNN是這樣提取圖像特征的。。。
算力限制場景下的目標檢測實戰淺談
開源 | 用深度學習讓你的照片變得美麗
面試時讓你手推公式不在害怕 | 線性回歸
深度學習在計算機視覺各項任務中的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM