神經(jīng)網(wǎng)絡初學者的激活函數(shù)指南
如果你剛剛開始學習神經(jīng)網(wǎng)絡,激活函數(shù)的原理一開始可能很難理解。但是如果你想開發(fā)強大的神經(jīng)網(wǎng)絡,理解它們是很重要的。
但在我們深入研究激活函數(shù)之前,先快速回顧一下神經(jīng)網(wǎng)絡架構的基本元素。如果你已經(jīng)熟悉神經(jīng)網(wǎng)絡的工作原理,可以直接跳到下一節(jié)。
神經(jīng)網(wǎng)絡架構
神經(jīng)網(wǎng)絡由稱為神經(jīng)元的鏈接節(jié)點層組成,神經(jīng)元通過稱為突觸的加權連接來處理和傳輸信息。
每個神經(jīng)元從上一層的神經(jīng)元獲取輸入,對其輸入的和應用激活函數(shù),然后將輸出傳遞給下一層。
神經(jīng)網(wǎng)絡的神經(jīng)元!包含輸入層、隱藏層和輸出層。
輸入層只接收來自域的原始數(shù)據(jù)。這里沒有計算,節(jié)點只是簡單地將信息(也稱為特征)傳遞給下一層,即隱藏層。隱藏層是所有計算發(fā)生的地方。它從輸入層獲取特征,并在將結(jié)果傳遞給輸出層之前對它們進行各種計算。輸出層是網(wǎng)絡的最后一層。它使用從隱藏層獲得的所有信息并產(chǎn)生最終值。
為什么需要激活函數(shù)。為什么神經(jīng)元不能直接計算并將結(jié)果轉(zhuǎn)移到下一個神經(jīng)元?激活函數(shù)的意義是什么?
激活函數(shù)在神經(jīng)網(wǎng)絡中的作用
網(wǎng)絡中的每個神經(jīng)元接收來自其他神經(jīng)元的輸入,然后它對輸入進行一些數(shù)學運算以生成輸出。一個神經(jīng)元的輸出可以被用作網(wǎng)絡中其他神經(jīng)元的輸入。
如果沒有激活函數(shù),神經(jīng)元將只是對輸入進行線性數(shù)學運算。這意味著無論我們在網(wǎng)絡中添加多少層神經(jīng)元,它所能學習的東西仍然是有限的,因為輸出總是輸入的簡單線性組合。
激活函數(shù)通過在網(wǎng)絡中引入非線性來解決問題。通過添加非線性,網(wǎng)絡可以模擬輸入和輸出之間更復雜的關系,從而發(fā)現(xiàn)更多有價值的模式。
簡而言之,激活函數(shù)通過引入非線性并允許神經(jīng)網(wǎng)絡學習復雜的模式,使神經(jīng)網(wǎng)絡更加強大。
理解不同類型的激活函數(shù)
我們可以將這些函數(shù)分為三部分:二元、線性和非線性。
二元函數(shù)只能輸出兩個可能值中的一個,而線性函數(shù)則返回基于線性方程的值。
非線性函數(shù),如sigmoid函數(shù),Tanh, ReLU和elu,提供的結(jié)果與輸入不成比例。每種類型的激活函數(shù)都有其獨特的特征,可以在不同的場景中使用。
1、Sigmoid / Logistic激活函數(shù)
Sigmoid激活函數(shù)接受任何數(shù)字作為輸入,并給出0到1之間的輸出。輸入越正,輸出越接近1。另一方面,輸入越負,輸出就越接近0,如下圖所示。
它具有s形曲線,使其成為二元分類問題的理想選擇。如果要創(chuàng)建一個模型來預測一封電子郵件是否為垃圾郵件,我們可以使用Sigmoid函數(shù)來提供一個0到1之間的概率分數(shù)。如果得分超過0.5分,則認為該郵件是垃圾郵件。如果它小于0.5,那么我們可以說它不是垃圾郵件。
函數(shù)定義如下:
但是Sigmoid函數(shù)有一個缺點——它受到梯度消失問題的困擾。當輸入變得越來越大或越來越小時,函數(shù)的梯度變得非常小,減慢了深度神經(jīng)網(wǎng)絡的學習過程,可以看上面圖中的導數(shù)(Derivative)曲線。
但是Sigmoid函數(shù)仍然在某些類型的神經(jīng)網(wǎng)絡中使用,例如用于二進制分類問題的神經(jīng)網(wǎng)絡,或者用于多類分類問題的輸出層,因為預測每個類的概率Sigmoid還是最好的解決辦法。
2、Tanh函數(shù)(雙曲正切)
Tanh函數(shù),也被稱為雙曲正切函數(shù),是神經(jīng)網(wǎng)絡中使用的另一種激活函數(shù)。它接受任何實數(shù)作為輸入,并輸出一個介于-1到1之間的值。
Tanh函數(shù)和Sigmoid函數(shù)很相似,但它更以0為中心。當輸入接近于零時,輸出也將接近于零。這在處理同時具有負值和正值的數(shù)據(jù)時非常有用,因為它可以幫助網(wǎng)絡更好地學習。
函數(shù)定義如下:
與Sigmoid函數(shù)一樣,Tanh函數(shù)也會在輸入變得非常大或非常小時遭遇梯度消失的問題。
3、線性整流單元/ ReLU函數(shù)
ReLU是一種常見的激活函數(shù),它既簡單又強大。它接受任何輸入值,如果為正則返回,如果為負則返回0。換句話說,ReLU將所有負值設置為0,并保留所有正值。
函數(shù)定義如下:
使用ReLU的好處之一是計算效率高,并且實現(xiàn)簡單。它可以幫助緩解深度神經(jīng)網(wǎng)絡中可能出現(xiàn)的梯度消失問題。
但是,ReLU可能會遇到一個被稱為“dying ReLU”問題。當神經(jīng)元的輸入為負,導致神經(jīng)元的輸出為0時,就會發(fā)生這種情況。如果這種情況發(fā)生得太頻繁,神經(jīng)元就會“死亡”并停止學習。
4、Leaky ReLU
Leaky ReLU函數(shù)是ReLU函數(shù)的一個擴展,它試圖解決“dying ReLU”問題。Leaky ReLU不是將所有的負值都設置為0,而是將它們設置為一個小的正值,比如輸入值的0.1倍。他保證即使神經(jīng)元接收到負信息,它仍然可以從中學習。
函數(shù)定義如下:
Leaky ReLU已被證明在許多不同類型的問題中工作良好。
5、指數(shù)線性單位(elu)函數(shù)
ReLU一樣,他們的目標是解決梯度消失的問題。elu引入了負輸入的非零斜率,這有助于防止“dying ReLU”問題
公式為:
這里的alpha是控制負飽和度的超參數(shù)。
與ReLU和tanh等其他激活函數(shù)相比,elu已被證明可以提高訓練和測試的準確性。它在需要高準確度的深度神經(jīng)網(wǎng)絡中特別有用。
6、Softmax函數(shù)
在需要對輸入進行多類別分類的神經(jīng)網(wǎng)絡中,softmax函數(shù)通常用作輸出層的激活函數(shù)。它以一個實數(shù)向量作為輸入,并返回一個表示每個類別可能性的概率分布。
softmax的公式是:
這里的x是輸入向量,i和j是從1到類別數(shù)的索引。
Softmax對于多類分類問題非常有用,因為它確保輸出概率之和為1,從而便于解釋結(jié)果。它也是可微的,這使得它可以在訓練過程中用于反向傳播。
7、Swish
Swish函數(shù)是一個相對較新的激活函數(shù),由于其優(yōu)于ReLU等其他激活函數(shù)的性能,在深度學習社區(qū)中受到了關注。
Swish的公式是:
這里的beta是控制飽和度的超參數(shù)。
Swish類似于ReLU,因為它是一個可以有效計算的簡單函數(shù)。并且有一個平滑的曲線,有助于預防“dying ReLU”問題。Swish已被證明在各種深度學習任務上優(yōu)于ReLU。
選擇哪一種?
首先,需要將激活函數(shù)與你要解決的預測問題類型相匹配??梢詮腞eLU激活函數(shù)開始,如果沒有達到預期的結(jié)果,則可以轉(zhuǎn)向其他激活函數(shù)。
以下是一些需要原則:
- ReLU激活函數(shù)只能在隱藏層中使用。
- Sigmoid/Logistic和Tanh函數(shù)不應該用于隱藏層,因為它們會在訓練過程中引起問題。
- Swish函數(shù)用于深度大于40層的神經(jīng)網(wǎng)絡會好很多。
輸出層的激活函數(shù)是由你要解決的預測問題的類型決定的。以下是一些需要記住的基本原則:
- 回歸-線性激活函數(shù)
- 二元分類- Sigmoid
- 多類分類- Softmax
- 多標簽分類- Sigmoid
選擇正確的激活函數(shù)可以使預測準確性有所不同。所以還需要根據(jù)不同的使用情況進行測試。