大家好,我是沛哥兒,我們今天一起來學習下神經網絡的三個常用的激活函數。
引言:什么是激活函數
激活函數是神經網絡中非常重要的組成部分,它引入了非線性因素,使得神經網絡能夠學習和表示復雜的函數關系。
在神經網絡中,神經元接收到多個輸入信號,將這些輸入信號進行加權求和后,再通過一個激活函數進行轉換,得到神經元的輸出。激活函數決定了神經元是否被激活,即是否將信號傳遞給下一層神經元。
一、為什么神經網絡需要激活函數?
在探討具體的激活函數之前,我們先來理解一下它在神經網絡中扮演的關鍵角色。
神經網絡,從本質上來說,是一種模仿生物神經系統結構和功能的計算模型。它由大量的神經元相互連接組成,這些神經元按照層次結構排列,包括輸入層、隱藏層和輸出層。
在神經網絡里,每個神經元的基礎操作是對輸入進行線性加權求和,然后輸出結果。簡單來說,如果輸入為 $ x_1, x_2, …, x_n $,對應的權重為 $ w_1, w_2, …, w_n $,偏置為 $ b $,那么神經元的輸出 $ z $ 可以表示為 $ z = w_1x_1 + w_2x_2 + … + w_nx_n + b $ 。這是一個線性變換的過程。
但是,單純的線性變換疊加存在很大的局限性。無論我們堆疊多少層這樣的線性變換,其最終的輸出仍然只是輸入的線性組合。數學上可以證明,多層線性變換的組合等價于一個單層的線性變換 。這就意味著,僅靠線性變換,神經網絡無法學習到數據中的復雜非線性模式。
舉個簡單的例子,異或(XOR)問題是一個典型的線性不可分問題。對于異或運算,輸入有兩個變量 $ x_1 $ 和 $ x_2 $,輸出 $ y $ 滿足:當 $ x_1 = 0, x_2 = 0 $ 時, $ y = 0 $;當 $ x_1 = 0, x_2 = 1 $ 時, $ y = 1 $;當 $ x_1 = 1, x_2 = 0 $ 時, $ y = 1 $;當 $ x_1 = 1, x_2 = 1 $ 時, $ y = 0 $ 。我們無法用一條直線將這四種情況正確地分類,也就是說,簡單的線性模型無法解決異或問題。
再比如在圖像識別任務中,圖像中的物體形狀、顏色、紋理等特征之間存在著復雜的非線性關系。如果神經網絡沒有引入非線性因素,就無法準確地提取和學習這些特征,從而難以實現高精度的圖像分類、目標檢測等任務。
激活函數的出現,就是為了解決這個問題。它的核心作用是為神經網絡引入非線性,讓多層神經網絡能夠學習到數據中的復雜模式。通過在神經元的線性加權求和輸出之后,再經過一個激活函數的變換,神經網絡就具備了強大的非線性表達能力。
根據通用近似定理,一個包含足夠多隱藏層神經元的神經網絡,加上合適的激活函數,可以逼近任意復雜的連續函數 。這使得神經網絡能夠處理各種復雜的任務,如語音識別、自然語言處理、圖像生成等等。
可以說,激活函數是神經網絡的靈魂所在,它賦予了神經網絡強大的學習能力和適應性,讓神經網絡在眾多領域取得了巨大的成功。
接下來,我們就詳細介紹三種常見且重要的激活函數:Sigmoid 函數、ReLU 函數和 Tanh 函數。
二、Sigmoid 函數:從生物曲線到二分類的經典選擇
(一)函數特性與數學表達
Sigmoid 函數在神經網絡的發展歷程中占據著重要的地位。
它的數學表達式為
$ \sigma(x)=\frac{1}{1 + e^{-x}} $
從這個公式可以看出,Sigmoid 函數的輸入 $ x $ 可以是任意實數,而輸出則被限定在 $ (0,1) $ 這個區間內。
- 當 $ x $ 趨近于正無窮時,$ e^{-x} $ 趨近于 0,那么 $ \sigma(x) $ 就趨近于 1;
- 當 $ x $ 趨近于負無窮時,$ e^{-x} $ 趨近于正無窮,此時 $ \sigma(x) $ 趨近于 0 。
- 當 $ x = 0 $ 時,$ \sigma(0)=\frac{1}{1 + e^{0}} = 0.5 $ 。
Sigmoid 函數的圖像是一條非常獨特的 S 型曲線。
- 在 $ x $ 值較小時,函數值接近 0 ,并且隨著 $ x $ 的增加,函數值增長緩慢;
- 當 $ x $ 逐漸增大并接近 0 時,函數值開始快速增長;
- 而當 $ x $ 繼續增大超過 0 后,函數值增長又逐漸變緩,最終趨近于 1 。
這種 S 型的曲線形狀使得 Sigmoid 函數具有很好的平滑性和連續性,在整個實數域上都是可導的。它的導數公式為
$ \sigma’(x)=\sigma(x)(1 - \sigma(x)) $** **
從導數公式可以看出,Sigmoid 函數的導數與它自身的輸出值密切相關 。當 $ \sigma(x) $ 接近 0 或 1 時,導數 $ \sigma’(x) $ 接近 0 ;而當 $ \sigma(x)=0.5 $ 時,導數達到最大值 0.25 。
什么是導數:
設函數$ y=f(x)
在點 在點 在點 x_0
的某個鄰域內有定義,當自變量 的某個鄰域內有定義,當自變量 的某個鄰域內有定義,當自變量 x
在 在 在 x_0 處有增量 處有增量 處有增量 Δx
( ( ( x_0+Δx
仍在該鄰域內)時,相應地函數有增量 仍在該鄰域內)時,相應地函數有增量 仍在該鄰域內)時,相應地函數有增量 Δy=f(x0+Δx)?f(x0)
。如果當 。如果當 。如果當 Δx→0 時,比值 時,比值 時,比值 \frac{Δx}{Δy} 的極限存在,那么稱函數 的極限存在,那么稱函數 的極限存在,那么稱函數 y=f(x) 在點 在點 在點 x_0 處可導,這個極限值就稱為函數 處可導,這個極限值就稱為函數 處可導,這個極限值就稱為函數 y=f(x) 在點 在點 在點 x_0 處的導數,記作 處的導數,記作 處的導數,記作 f′(x0) KaTeX parse error: Expected group after '_' at position 3: ,即_?_ f’(x_0)=\lim\limits_{\Delta x\to0}\frac{\Delta y}{\Delta x}=\lim\limits_{\Delta x\to0}\frac{f(x_0 + \Delta x)-f(x_0)}{\Delta x} $。
Sigmoid 函數的設計靈感來源于生物學中的神經元激活機制。在生物神經系統中,神經元接收到來自其他神經元的信號,當這些信號的強度積累到一定閾值時,神經元就會被激活并發送信號,否則就處于抑制狀態。
Sigmoid 函數就類似于這種神經元的激活過程,輸入信號 $ x $ 越大,越趨近于 1(表示激活),輸入信號越小,越趨近于 0(表示抑制) 。這種直觀的物理意義使得 Sigmoid 函數在早期的神經網絡研究中被廣泛應用。
(二)核心優勢與應用場景
Sigmoid 函數的優點之一是其輸出天然適配二分類概率預測。
在邏輯回歸模型中,我們通過 Sigmoid 函數將線性回歸的輸出 $ z = w^Tx + b $ 轉換為概率值 $ p = \sigma(z) $ ,其中 $ p $ 表示樣本屬于正類的概率。
- 當 $ p \gt 0.5 $ 時,我們將樣本預測為正類;
- 當 $ p \leq 0.5 $ 時,預測為負類。
在圖像二分類任務中,比如判斷一張圖片是貓還是狗,我們可以使用邏輯回歸模型,通過 Sigmoid 函數輸出圖片是貓的概率,如果概率大于 0.5,則認為圖片中的動物是貓,否則是狗。
Sigmoid 函數的梯度計算相對簡單,這在基于梯度下降的優化算法中非常重要。
在反向傳播過程中,我們需要計算每個神經元的梯度來更新權重,Sigmoid 函數簡單的梯度計算公式
$ \sigma’(x)=\sigma(x)(1 - \sigma(x)) $** **
使得梯度計算的效率較高,能夠加快模型的訓練速度。
但是 Sigmoid 函數也存在明顯的缺點,最突出的就是梯度飽和問題。當 $ x $ 的絕對值較大時,也就是 $ x \gt 3 $ 或 $ x \lt -3 $ 時,Sigmoid 函數的梯度接近 0 。
在深層神經網絡中,梯度消失會導致靠近輸入層的神經元權重更新非常緩慢,甚至幾乎不更新,使得模型難以學習到有效的特征。這就好比在一個長長的接力賽中,梯度是傳遞的 “接力棒”,當梯度消失時,前面的 “選手”(靠近輸入層的神經元)就很難接到 “接力棒”,無法有效地進行訓練。
Sigmoid 函數的輸出非零中心化,其輸出值始終大于 0 。這會導致下一層神經元的輸入發生偏置偏移,使得梯度下降的收斂速度變慢。當一個神經元的輸入全是正數時,其梯度在反向傳播過程中也全是正數,這就使得權重更新只能朝著一個方向進行,形成 “Z 字型” 震蕩,不利于模型的收斂。
盡管存在這些缺點,Sigmoid 函數在一些特定場景下仍然有著重要的應用。在早期的神經網絡中,它常被用于輸出層,尤其是在二分類任務中。在生成對抗網絡(GAN)的判別器中,Sigmoid 函數也經常被使用,用于判斷輸入數據是真實數據還是生成數據的概率。
(三)實踐中的注意事項
在使用 Sigmoid 函數時,初始化權重需嚴格控制。由于 Sigmoid 函數的梯度飽和問題,如果初始化權重過大,會導致大部分神經元處于飽和狀態,使得梯度消失,模型無法正常訓練。因此,通常會使用一些特定的權重初始化方法,如 Xavier 初始化,來確保權重在合適的范圍內,避免落入飽和區。
為了緩解梯度消失問題,在輸出層搭配交叉熵損失函數是一個有效的方法。交叉熵損失函數與 Sigmoid 函數結合時,在反向傳播過程中能夠避免梯度消失的問題,使得模型能夠更好地進行訓練。在二分類的邏輯回歸模型中,我們通常使用交叉熵損失函數 $ L = -[y\log§+(1 - y)\log(1 - p)] $ ,其中 $ y $ 是真實標簽,$ p $ 是通過 Sigmoid 函數得到的預測概率,這種組合能夠有效地優化模型的性能。
Xavier 初始化
Xavier 初始化是一種在神經網絡訓練中用于初始化權重參數的方法,目的是讓網絡在訓練初期能更穩定地學習,減少梯度消失或梯度爆炸問題。
- 原理:Xavier 初始化基于這樣的想法,即如果每一層輸入的方差在經過該層傳遞到輸出時保持不變,那么網絡訓練過程會更穩定。它通過計算每層神經元的輸入和輸出數量,按照特定公式來確定權重的初始分布。假設某一層神經網絡的輸入維度為nin,輸出維度為nout ,對于服從均勻分布的權重初始化,權重參數$ W < f o n t s t y l e = " c o l o r : r g b ( 31 , 35 , 41 ) ; b a c k g r o u n d ? c o l o r : r g b ( 239 , 240 , 241 ) ; " > 在區間 < / f o n t > <font style="color:rgb(31, 35, 41);background-color:rgb(239, 240, 241);">在區間 </font> <fontstyle="color:rgb(31,35,41);background?color:rgb(239,240,241);">在區間</font> [-\frac{\sqrt{6}}{\sqrt{n_{in}+n_{out}}}, \frac{\sqrt{6}}{\sqrt{n_{in}+n_{out}}}]
KaTeX parse error: Expected group after '_' at position 198: …rtant;"></font>_? W < f o n t s t y l e = " c o l o r : r g b ( 31 , 35 , 41 ) ; b a c k g r o u n d ? c o l o r : r g b ( 239 , 240 , 241 ) ; " > 的均值設為 < / f o n t > < f o n t s t y l e = " c o l o r : r g b ( 31 , 35 , 41 ) ; b a c k g r o u n d ? c o l o r : r g b ( 225 , 234 , 255 ) ! i m p o r t a n t ; " > 0 < / f o n t > < f o n t s t y l e = " c o l o r : r g b ( 31 , 35 , 41 ) ; b a c k g r o u n d ? c o l o r : r g b ( 239 , 240 , 241 ) ; " > ,方差設為 < / f o n t > <font style="color:rgb(31, 35, 41);background-color:rgb(239, 240, 241);">的均值設為</font><font style="color:rgb(31, 35, 41);background-color:rgb(225, 234, 255) !important;">0</font><font style="color:rgb(31, 35, 41);background-color:rgb(239, 240, 241);">,方差設為 </font> <fontstyle="color:rgb(31,35,41);background?color:rgb(239,240,241);">的均值設為</font><fontstyle="color:rgb(31,35,41);background?color:rgb(225,234,255)!important;">0</font><fontstyle="color:rgb(31,35,41);background?color:rgb(239,240,241);">,方差設為</font> \frac{2}{n_{in}+n_{out}} $。- 優勢:相比隨機初始化,Xavier 初始化能讓網絡在訓練初期的梯度分布更合理,使得網絡訓練更加穩定,加速收斂過程。它能讓信號在網絡中更順暢地傳播,減少因權重過大或過小導致的訓練困難問題。
- 局限:Xavier 初始化的假設是網絡層之間的激活函數是線性的,然而在實際應用中,許多激活函數(如 ReLU、Sigmoid 等)是非線性的,這可能導致其效果受到一定影響。對于一些深度非常深、結構復雜的網絡,Xavier 初始化可能無法完全避免梯度消失或梯度爆炸問題,仍需結合其他技術(如 Batch Normalization)一起使用 。
三、Tanh 函數:對稱輸出的隱層優化方案
(一)函數特性與數學表達
Tanh 函數即雙曲正切函數,在神經網絡的發展歷程中同樣占據著重要的地位,它的數學表達式為 $ \tanh(x)=\frac{e{x}-e{-x}}{e{x}+e{-x}} $
從這個公式我們可以清晰地看到,Tanh 函數通過自然指數函數 $ e^{x} $ 和 $ e^{-x} $ 的組合,將任意實數輸入 $ x $ 映射到了 $ (-1,1) $ 這個區間內。
- 當 $ x $ 趨近于正無窮時,$ e^{x} $ 會遠遠大于 $ e^{-x} $ ,此時分子 $ e{x}-e{-x} $ 趨近于 $ e^{x} $ ,分母 $ e{x}+e{-x} $ 也趨近于 $ e^{x} $ ,那么 $ \tanh(x) $ 就趨近于 1;
- 反之,當 $ x $ 趨近于負無窮時,$ e^{-x} $ 遠遠大于 $ e^{x} $ ,分子趨近于 $ -e^{-x} $ ,分母趨近于 $ e^{-x} $ ,$ \tanh(x) $ 趨近于 - 1 。
- 而當 $ x = 0 $ 時,$ e^{0}=1 $ ,代入公式可得 $ \tanh(0)=\frac{1 - 1}{1 + 1}=0 $ 。
Tanh 函數的圖像呈現出非常獨特的 S 型曲線,并且關于原點對稱。這意味著對于任意的 $ x $ ,都有 $ \tanh(-x)=-\tanh(x) $ 。在 $ x $ 從負無窮逐漸增大到 0 的過程中,函數值從 - 1 逐漸增大到 0,且增長速度逐漸加快;當 $ x $ 從 0 繼續增大到正無窮時,函數值從 0 逐漸增大到 1,增長速度逐漸變慢 。這種對稱的 S 型曲線特性使得 Tanh 函數在處理數據時具有很好的對稱性和平衡性。
與 Sigmoid 函數相比,Tanh 函數可以看作是 Sigmoid 函數的 “中心化” 版本。Sigmoid 函數的輸出范圍是 $ (0,1) $ ,其輸出值始終大于 0 ,而 Tanh 函數的輸出范圍是 $ (-1,1) $ ,輸出均值更接近 0 。這種以 0 為中心的輸出特性,使得 Tanh 函數在神經網絡的隱藏層中表現出更好的性能,能夠讓神經元的輸出在網絡中更有效地傳遞和處理 。
(二)核心優勢與應用場景
Tanh 函數的主要優點之一是解決了 Sigmoid 函數輸出非對稱的問題。
由于其輸出以 0 為中心,當 Tanh 函數作為隱藏層的激活函數時,神經元的輸出在網絡中傳遞時,能夠使下一層神經元接收到的輸入信號在正負兩個方向上都有較好的分布,避免了因輸入信號始終為正而導致的權重更新偏差。在多層神經網絡中,如果前一層神經元使用 Tanh 函數作為激活函數,其輸出會在正負值之間波動,這樣傳遞到下一層神經元時,下一層神經元的權重更新會更加合理,有助于模型更快地收斂。
Tanh 函數的收斂速度略快于 Sigmoid 函數。這是因為在相同的輸入范圍內,Tanh 函數的梯度相對較大。從導數的角度來看,Tanh 函數的導數公式為 $ \tanh’(x)=1-\tanh^{2}(x) $ ,當輸入值在 0 附近時,$ \tanh(x) $ 的值也接近 0,此時導數 $ \tanh’(x) $ 接近 1 ,而 Sigmoid 函數在輸入為 0 時,導數僅為 0.25 。更大的梯度意味著在反向傳播過程中,權重更新的步長可以更大,從而加快模型的訓練速度 。
Tanh 函數的梯度飽和區域相對 Sigmoid 函數更為平緩。雖然當 $ x $ 的絕對值較大時(一般認為 $ x\gt2 $ 或 $ x\lt -2 $ 時),Tanh 函數也會出現梯度飽和問題,即梯度趨近于 0 ,但相比 Sigmoid 函數,Tanh 函數在梯度飽和時的變化更為平緩。這使得在訓練過程中,即使輸入值進入了梯度飽和區域,模型的訓練也不會像 Sigmoid 函數那樣急劇惡化,仍然能夠保持一定的訓練效果 。
然而,Tanh 函數也并非完美無缺。它同樣沒有從根本上解決梯度飽和問題,當輸入值過大或過小時,梯度仍然會趨近于 0 ,這在深層神經網絡中會導致靠近輸入層的神經元權重更新緩慢,影響模型的訓練效果。Tanh 函數的計算過程涉及指數運算,這使得它的計算成本相對較高,在大規模數據集和深層網絡的訓練中,會增加計算資源的消耗和訓練時間 。
在實際應用中,Tanh 函數常用于早期神經網絡的隱藏層。在循環神經網絡(RNN)中,Tanh 函數被廣泛應用于隱藏層,因為 RNN 需要處理序列數據,Tanh 函數的對稱輸出特性能夠更好地捕捉序列中的正負信息,幫助模型學習到序列數據之間的復雜依賴關系。在自然語言處理任務中,文本數據通常以序列的形式呈現,Tanh 函數可以對輸入的詞向量進行有效的變換,提取文本中的關鍵特征,從而提升模型在情感分析、機器翻譯等任務中的性能 。
(三)與 Sigmoid 的關鍵區別
Tanh 函數與 Sigmoid 函數最直觀的區別在于輸出范圍。**Sigmoid 函數的輸出范圍是 **$ (0,1) ? ? ,而 T a n h 函數的輸出范圍是 ? ? ** ,而 Tanh 函數的輸出范圍是 ** ??,而Tanh函數的輸出范圍是?? (-1,1) $
這個差異看似簡單,卻對神經網絡的性能產生了重要影響。在隱藏層中,Tanh 函數的對稱輸出使得神經元的輸出能夠在正負兩個方向上傳遞信息,避免了 Sigmoid 函數輸出始終為正所帶來的權重更新偏差問題。這就好比在一條信息傳遞的鏈條中,Tanh 函數能夠讓信息更加全面地在各個環節中流動,而 Sigmoid 函數可能會導致信息的傳遞出現偏向 。
在輸出層的選擇上,兩者也有所不同。對于多分類任務,通常會使用 Softmax 函數作為輸出層的激活函數,它能夠將輸出值轉換為各個類別的概率分布 。但對于二分類任務,Sigmoid 函數仍然有其用武之地,因為它的輸出可以直接解釋為樣本屬于正類的概率 。而 Tanh 函數由于其輸出范圍和特性,一般不直接用于二分類任務的輸出層 。
從梯度特性來看,雖然兩者都存在梯度飽和問題,但 Tanh 函數在大部分定義域上的梯度大于 Sigmoid 函數。這使得 Tanh 函數在訓練過程中能夠更快地收斂,減少訓練時間 。在計算復雜度方面,兩者都涉及指數運算,但由于 Tanh 函數的輸出范圍和特性,在某些情況下,其計算效率可能會略高于 Sigmoid 函數 。
四、ReLU 函數:開啟深度學習的非線性革命
(一)函數特性與數學表達
ReLU(修正線性單元)在現代深度學習中占據著舉足輕重的地位,它的數學表達式簡潔明了:$ f(x)=\max(0,x) $
這個式子的含義是:
- 當輸入 $ x $ 大于 0 時,函數直接輸出 $ x $ ;
- 當輸入 $ x $ 小于等于 0 時,函數輸出 0 。
從圖像上看,ReLU 函數呈現出一種獨特的分段線性曲線。
- 當 $ x \lt 0 $ 時,函數值恒為 0 ,圖像與 $ x $ 軸重合;
- 當 $ x \gt 0 $ 時,函數值等于 $ x $ ,圖像是一條斜率為 1 的直線。
這種簡單而直觀的函數形式,使得 ReLU 函數在神經網絡中具有高效的計算特性。
與 Sigmoid 和 Tanh 函數相比,ReLU 函數的計算過程大大簡化。Sigmoid 函數涉及指數運算,計算 $ e^{-x} $ 相對復雜;Tanh 函數同樣需要進行指數運算來計算 $ \frac{e{x}-e{-x}}{e{x}+e{-x}} $ 。而 ReLU 函數只需要進行一次簡單的比較操作,判斷輸入值是否大于 0 ,這在大規模的神經網絡計算中,能夠顯著減少計算資源的消耗,提高計算效率。
(二)核心優勢與應用場景
ReLU 函數最突出的優勢之一是它完全避免了梯度飽和問題。在 Sigmoid 和 Tanh 函數中,當輸入值較大或較小時,梯度會趨近于 0 ,導致在深層神經網絡中出現梯度消失,使得靠近輸入層的神經元權重難以更新。而 ReLU 函數在 $ x \gt 0 $ 的區域,梯度始終為 1 。這意味著在反向傳播過程中,梯度能夠穩定地傳遞到前面的層,不會因為多層傳遞而逐漸消失,從而大大加速了模型的收斂速度 。
在計算速度方面,ReLU 函數具有天然的優勢。由于其簡單的計算邏輯,僅需判斷輸入的符號,不需要進行復雜的指數運算,這使得它在處理大規模數據時,能夠快速完成計算,節省大量的計算時間。在圖像識別任務中,一張圖片通常包含大量的像素點,經過多層神經網絡處理時,如果使用計算復雜的激活函數,會極大地增加計算量和處理時間。而 ReLU 函數的高效計算特性,使得模型能夠快速對圖像進行特征提取和分類,提高了整個系統的運行效率 。
ReLU 函數還具有天然的稀疏性。在實際應用中,大約 50% 的神經元輸出會為 0 ,這是因為當輸入為負時,ReLU 函數的輸出為 0 。這種稀疏性使得神經網絡中的神經元激活呈現出稀疏狀態,類似于生物神經元的部分激活特性。稀疏激活有諸多好處,一方面可以減少神經元之間的冗余連接,降低計算量;另一方面,能夠減少參數之間的相互依存關系,從而有效緩解過擬合問題,提高模型的泛化能力 。
然而,ReLU 函數也并非完美無缺。它存在一個被稱為 “死神經元” 的問題。當神經元的輸入持續為負時,該神經元的輸出將始終為 0 ,并且在反向傳播過程中,其梯度也為 0 ,這就導致該神經元的權重無法得到更新,從而永久性地 “死亡” 。如果在訓練過程中,學習率設置過高,可能會導致大量神經元進入這種 “死亡” 狀態,嚴重影響模型的性能。
ReLU 函數在 0 點處不可導,這在使用基于梯度的優化算法時需要特殊處理。雖然在實際應用中,可以通過一些近似方法來解決這個問題,但不可導性仍然給模型的訓練帶來了一定的復雜性 。
ReLU 函數廣泛應用于現代深層神經網絡中,成為默認的隱藏層激活函數。在卷積神經網絡(CNN)中,ReLU 函數被大量使用,通過卷積層和 ReLU 激活函數的組合,能夠有效地提取圖像的特征。在著名的 AlexNet、VGGNet、ResNet 等模型中,ReLU 函數都發揮了關鍵作用,幫助模型在圖像分類、目標檢測等任務中取得了優異的成績 。
在 Transformer 架構中,ReLU 函數同樣是不可或缺的一部分。Transformer 在自然語言處理領域取得了巨大的成功,如 BERT、GPT 等模型,它們利用 ReLU 函數增強了模型的非線性表達能力,能夠更好地處理長序列依賴關系,對文本進行準確的理解和生成 。
(三)改進變種與優化策略
為了緩解 ReLU 函數的 “死神經元” 問題,研究人員提出了多種改進變種。Leaky ReLU 就是其中之一,它的數學表達式為 $ f(x)=\begin{cases}x, & x \gt 0 \ \alpha x, & x \leq 0\end{cases} $ ,其中 $ \alpha $ 是一個很小的正數,通常取值為 0.01 。Leaky ReLU 在輸入為負時,不再將輸出置為 0 ,而是乘以一個小的系數 $ \alpha $ ,這樣即使輸入為負,神經元仍然有微弱的激活,避免了神經元 “死亡” 。
PReLU(參數化 ReLU)則進一步改進了 Leaky ReLU,它將 $ \alpha $ 變成了一個可學習的參數。在訓練過程中,模型可以根據數據自動調整 $ \alpha $ 的值,從而更加靈活地適應不同的數據分布,提高模型的性能 。
在實際應用中,為了避免 ReLU 函數的 “死神經元” 問題,除了使用這些改進變種外,還需要合理控制學習率。學習率過大容易導致神經元 “死亡”,而過小則會使模型收斂速度過慢。通常可以采用一些自適應學習率的優化算法,如 Adagrad、Adadelta、Adam 等,這些算法能夠根據參數的更新情況自動調整學習率,在一定程度上減少 “死神經元” 問題的發生 。
五、如何選擇合適的激活函數?
在實際的深度學習應用中,選擇合適的激活函數是一個關鍵步驟,它直接影響著模型的性能、訓練效率以及泛化能力。不同的任務類型和網絡結構對激活函數的需求各不相同,下面我們就從任務類型、網絡結構以及一些避坑指南等方面來詳細探討如何選擇合適的激活函數。
(一)按任務類型選擇
二分類輸出層:**在二分類任務中,Sigmoid 函數是一個經典的選擇。**由于 Sigmoid 函數的輸出范圍在 (0,1) 之間,它可以自然地表示樣本屬于正類的概率 。在圖像的二分類任務中,判斷一張圖片是貓還是狗,通過 Sigmoid 函數輸出圖片是貓的概率,當概率大于 0.5 時,就認為圖片中的動物是貓,否則是狗。為了避免梯度消失問題,在輸出層搭配交叉熵損失函數是非常必要的。交叉熵損失函數能夠有效地衡量預測概率與真實標簽之間的差異,在反向傳播過程中,它與 Sigmoid 函數結合,可以避免梯度消失,使得模型能夠更好地收斂 。
多分類輸出層:對于多分類任務,Softmax 函數是最常用的激活函數。Softmax 函數將神經網絡的輸出轉換為各個類別的概率分布,并且這些概率之和為 1 。假設我們有一個圖像分類任務,要識別圖片中的物體是貓、狗還是兔子,經過神經網絡的計算后,再通過 Softmax 函數處理,就可以得到圖片分別屬于貓、狗、兔子這三個類別的概率,概率最大的類別就是模型的預測結果 。這里需要注意將 Softmax 函數與 Sigmoid 函數區分開來。
**Sigmoid 函數主要用于二分類任務,它輸出的是一個概率值,表示樣本屬于正類的概率 。**而 Softmax 函數用于多分類任務,它將多個輸出值轉換為各個類別的概率分布,這些概率之間相互關聯,總和為 1 。在一個三分類任務中,Sigmoid 函數會對每個類別分別計算一個概率值,這些概率值之間沒有必然的聯系,總和也不一定為 1 ;而 Softmax 函數會綜合考慮所有類別,計算出每個類別相對于其他類別的概率,最終所有類別的概率之和為 1 。
**隱層首選:在隱藏層中,ReLU 函數通常是默認的首選。**ReLU 函數具有計算簡單、能夠有效避免梯度飽和問題、加速模型收斂等優點,還能使網絡產生稀疏激活,減少參數之間的相互依存關系,緩解過擬合問題 。在卷積神經網絡(CNN)中,大量的隱藏層使用 ReLU 函數,能夠快速地提取圖像的特征,提高模型的訓練效率和準確性 。但是,如果在訓練過程中發現死神經元問題嚴重,導致模型性能下降,就可以考慮換用 Leaky ReLU 或 Tanh 函數。
Leaky ReLU 通過在輸入為負時給予一個小的非零輸出,避免了神經元的 “死亡” 。
Tanh 函數則適用于一些淺層網絡,它的對稱輸出特性在處理某些數據時能夠表現出較好的性能 。在一些簡單的圖像分類任務中,如果使用 ReLU 函數出現了較多的死神經元,導致模型對某些特征的學習能力下降,這時可以嘗試使用 Leaky ReLU 函數,為負輸入提供一定的梯度,使得神經元能夠正常更新權重,提升模型的性能 。
(二)按網絡結構選擇
深層網絡:當網絡層數大于 5 層時,必須使用 ReLU 系激活函數,如 ReLU、Leaky ReLU、PReLU 等。
這是因為在深層網絡中,梯度消失問題會變得非常嚴重,如果使用 Sigmoid 或 Tanh 函數,梯度在反向傳播過程中會迅速趨近于 0 ,導致靠近輸入層的神經元權重幾乎無法更新,使得模型難以訓練 。而 ReLU 系激活函數在正區間的梯度為常數,能夠有效地避免梯度消失問題,保證梯度在網絡中的穩定傳播,使得深層網絡能夠正常訓練 。在著名的 ResNet 網絡中,通過使用 ReLU 激活函數,成功地訓練了高達 152 層的網絡,在圖像分類任務中取得了優異的成績 。
循環網絡:在循環網絡(RNN/LSTM)中,早期常用 Tanh 函數作為激活函數。
這是因為 Tanh 函數的對稱輸出特性能夠較好地捕捉序列數據中的正負信息,幫助模型學習到序列數據之間的復雜依賴關系 。在自然語言處理任務中,文本數據以序列的形式呈現,Tanh 函數可以對輸入的詞向量進行有效的變換,提取文本中的關鍵特征 。然而,隨著研究的發展,當前在循環網絡中也更傾向于使用 ReLU 的變種,如 Leaky ReLU 等。這些變種在一定程度上解決了 ReLU 函數的死神經元問題,同時保持了 ReLU 函數的優點,使得循環網絡在處理長序列數據時能夠表現出更好的性能 。在處理長文本的情感分析任務時,使用 Leaky ReLU 作為循環網絡的激活函數,可以避免死神經元問題,更好地捕捉文本中的情感信息,提高情感分析的準確率 。
(三)避坑指南
避免在隱層使用 Sigmoid/Tanh:除非有特殊的正則化需求,一般應避免在隱藏層使用 Sigmoid 和 Tanh 函數。這兩個函數存在梯度飽和問題,在深層網絡中會導致梯度消失,使得模型的訓練變得非常困難 。它們的計算復雜度相對較高,涉及指數運算,會增加模型的訓練時間和計算資源消耗 。
輸出層激活函數與損失函數匹配:輸出層的激活函數需要與損失函數進行正確匹配。Sigmoid 函數搭配二元交叉熵損失函數(BCELoss)適用于二分類任務,Softmax 函數搭配交叉熵損失函數適用于多分類任務 。如果不進行正確匹配,可能會導致模型的訓練不穩定,無法收斂到較好的結果 。在一個多分類任務中,如果錯誤地使用 Sigmoid 函數作為輸出層激活函數,并且搭配了均方誤差損失函數,就會使得模型的訓練效果很差,無法準確地進行分類 。
結語:激活函數的 “進化” 與未來方向
回顧激活函數的發展歷程,從早期的 Sigmoid 和 Tanh 函數,到如今 ReLU 及其變種在深度學習領域的廣泛應用,我們見證了激活函數不斷演進以適應神經網絡發展的需求。每一種激活函數的出現都伴隨著對前一種函數局限性的突破,Sigmoid 函數為神經網絡引入了非線性,但因其梯度消失和輸出非零中心的問題,在深層網絡中表現不佳;Tanh 函數雖解決了輸出對稱問題且收斂速度略快,但仍未擺脫梯度飽和的困擾;ReLU 函數的誕生則開啟了深度學習的新紀元,其簡單高效、有效避免梯度飽和等特性,使其成為現代神經網絡的首選。
圖片來源網絡