AI 的激活函數:為什麼需要非線性
梯度性質良好:不能讓梯度在傳遞過程中被過度壓縮或放大。
輸出範圍合理:避免數值爆炸,也影響收斂速度。
值得注意的是,這些條件之間往往互相衝突。Sigmoid 可微、輸出有界,但梯度會飽和;ReLU 計算快、梯度簡單,卻不可微且有死亡神經元問題。整部激活函數的發展史,其實就是工程師在這些取捨之間不斷尋找平衡的過程。
二、為什麼一定要非線性?三個關鍵理由
這是本文的核心問題。很多人知道「激活函數要非線性」,但說不清楚為什麼。以下從代數、幾何與學習理論三個角度,把這件事講透。
2.1 理由一:線性函數的疊加,仍然是線性函數
假設我們有一個兩層的網絡,第一層是 W₁x + b₁,第二層是 W₂h + b₂,而且中間沒有激活函數。那麼整個網絡的輸出就是:
y = W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂)
令 W' = W₂W₁、b' = W₂b₁ + b₂,你會發現輸出仍然是 W'x + b' 的形式——一個單純的線性變換。不論你疊了兩層、十層還是一百層,只要中間沒有非線性,整個網絡在數學上等價於「一層線性層」。多加的層數只會增加參數冗餘,不會增加任何表達能力。
這是一個致命的限制。這意味著:如果沒有非線性,深度學習根本不會存在,因為「深」這個概念本身失去了意義。深度帶來的表達能力提升,完全建立在「每一層都對上一層的輸出做非線性扭曲」這個前提上。
2.2 理由二:單層線性模型無法解決簡單的分類問題
從幾何角度來看,一個線性分類器能做的,只是在特徵空間裡畫一個超平面(在二維是直線,在三維是平面)把資料切開。這意味著它只能處理「線性可分」的問題。
最經典的反例是 XOR(異或)問題。XOR 的輸入輸出關係是:輸入 (0,0) 和 (1,1) 輸出 0,輸入 (0,1) 和 (1,0) 輸出 1。如果你把它畫在二維平面上,這四個點呈現對角分佈,任何一條直線都不可能把兩組點分開。這正是 1969 年 Minsky 與 Papert 在《Perceptrons》一書中指出的問題,也是神經網絡研究第一次進入寒冬的原因之一。
出路在哪裡?就是引入非線性。一旦加入激活函數,網絡就不再只能畫直線,而是可以彎曲、折疊特徵空間,把原本線性不可分的資料映射到一個新的空間,在那裡它就變成線性可分了。這個「映射到高維空間使其線性可分」的思路,與支持向量機中的核方法(Kernel Method)是相通的——差別在於,神經網絡是自動學習這個映射,而不是人工指定核函數。
2.3 理由三:通用近似定理的成立前提
1989 年,George Cybenko 提出了著名的通用近似定理(Universal Approximation Theorem):一個只有單一隱藏層的前饋神經網絡,只要隱藏層神經元數量足夠多,就能以任意精度逼近定義在緊集上的任意連續函數。
這條定理聽起來非常強大,等同於說「神經網絡理論上可以學會任何東西」。但很多人忽略了它的關鍵前提:激活函數必須是非線性的(更精確地說,不能是多項式函數)。如果激活函數是線性的,這個定理立刻失效,因為整個網絡退化為線性函數,只能表示線性函數,連一個簡單的二次曲線都學不會。
所以非線性不只是「讓模型變強」的加分項,而是通用近似定理能夠成立的必要條件。沒有它,神經網絡的理論基礎就崩塌了。
2.4 幾何直覺:每一次非線性,都是一次空間折疊
如果數學推導太抽象,可以換一個幾何圖像來理解。以 ReLU 為例,f(z) = max(0, z),它做的事情是「把負半軸壓平、正半軸原樣保留」。這個操作在幾何上相當於沿著某個超平面把空間「對折」了一次。
每一個 ReLU 神經元,就是一次對折;一層有幾十個神經元,就是同時沿著多個方向對折;幾十層疊起來,就是反覆折疊、扭轉、拉伸。原本均勻分佈的資料點,經過這番操作後,會被擠壓到各種不同的區域,於是原本混在一起的類別就分開了。
研究者甚至量化了這種表達能力。2014 年 Montúfar 等人的研究指出,由 ReLU 組成的深層網絡,其輸入空間會被切分成大量的線性區域,而這些區域的數量會隨層數呈指數增長。换句话说,深度加上非線性,帶來的是表達能力的指數級爆炸。這才是深度學習之所以「深」的根本原因。
三、激活函數的演化史:從 Sigmoid 到 SwiGLU
理解了「為什麼需要非線性」之後,下一個問題是「該用哪一種非線性」。這個問題沒有標準答案,因為不同時代的模型架構、資料規模與訓練技巧都不同,最適合的激活函數也隨之改變。
3.1 啟蒙時代:Sigmoid 與 Tanh
Sigmoid 函數定義為 σ(x) = 1 / (1 + e⁻ˣ),輸出範圍在 (0, 1) 之間,形狀像一條平滑的 S 曲線。它的優點是輸出有界、可微、而且輸出可以自然地被解釋為機率,因此在早期的多層感知機與邏輯回歸中被廣泛使用。
但 Sigmoid 有兩個致命缺點。第一是梯度飽和:當輸入的絕對值很大時,函數進入平坦區域,導數趨近於 0。而 Sigmoid 的導數最大值只有 0.25(發生在 x = 0 處)。在反向傳播中,梯度需要逐層相乘,若每層都乘上一個小於 0.25 的數,十層之後梯度就會縮小到百萬分之一以下,這就是所謂的梯度消失(Vanishing Gradient)。第二是輸出非零中心:Sigmoid 的輸出恆為正,會導致下一層的梯度更新方向出现偏差,收斂速度變慢。
Tanh 函數是 Sigmoid 的改良版,定義為 tanh(x) = (eˣ − e⁻ˣ) / (eˣ + e⁻ˣ),輸出範圍在 (−1, 1) 之間,並且是零中心的。它的導數最大值為 1,比 Sigmoid 好一些,但本質上仍然是飽和函數,深層網絡中梯度消失的問題依然存在。在 RNN 時代,Tanh 曾經是隱藏層的標準選擇。
3.2 ReLU 革命:簡單到不像話,卻改變了一切
2010 年前後,Nair 與 Hinton 以及 Glorot 等人的工作讓 ReLU(Rectified Linear Unit) 開始流行。它的定義簡單到不可思議:f(x) = max(0, x)。輸入為正就原樣輸出,輸入為負就輸出 0。
這個看似粗暴的函數,卻解決了深度學習的關鍵瓶頸:
2012 年 AlexNet 在 ImageNet 競賽中大幅領先,ReLU 正是背後的關鍵功臣之一。從此之後,ReLU 成為卷積神經網絡的預設選擇,也奠定了此後十年的主流地位。
3.3 現代變體:Leaky ReLU、ELU、GELU、SiLU 與 SwiGLU
ReLU 雖然好用,但仍有缺陷,於是各種改良版本陸續出現。
Leaky ReLU 針對「死亡 ReLU」問題設計:在負區間不再輸出 0,而是給一個很小的斜率 α(例如 0.01),即 f(x) = max(αx, x)。這樣即使輸入為負,梯度也不會完全消失。PReLU 更進一步,把 α 變成可學習的參數,讓網路自己決定負區間的斜率。
ELU(Exponential Linear Unit) 在負區間使用指數函數,讓輸出更接近零中心,有助於加速收斂。而 SELU 則是透過精心設計的參數,讓網路在特定條件下具有自歸一化(Self-Normalizing)的性質。
GELU(Gaussian Error Linear Unit) 是近年來最重要的進展之一,定義為 f(x) = x · Φ(x),其中 Φ 是標準常態分佈的累積分佈函數。它的直覺是「根據輸入的大小,以一種平滑的機率方式決定保留多少」。相較於 ReLU 的硬性截斷,GELU 更平滑,在 0 附近有負值區域,實驗中通常能帶來更好的表現。BERT、GPT 系列模型都採用了 GELU。
SiLU(又稱 Swish) 定義為 f(x) = x · sigmoid(x),是 Google 在 2017 年透過自動化搜尋找到的激活函數。它平滑、非單調,在深層網路中表現優異。
SwiGLU 則是目前大型語言模型的主流選擇。它源自 Google 在 PaLM 模型中引入的 GLU(Gated Linear Unit)變體,公式為 SwiGLU(x) = Swish(W₁x) ⊗ (W₃x),其中 ⊗ 是逐元素相乘。這種「閘控」結構讓網路可以動態決定哪些資訊要通過,表達能力更強。Llama、Mistral 等開源模型都採用了 SwiGLU。
激活函數
公式
主要優點
主要缺點
典型應用
Sigmoid
1 / (1 + e⁻ˣ)
輸出有界、可解釋為機率
梯度消失、非零中心
輸出層、早期 MLP
Tanh
(eˣ − e⁻ˣ)/(eˣ + e⁻ˣ)
零中心、收斂較快
仍會飽和、梯度消失
RNN 隱藏層
ReLU
max(0, x)
計算快、緩解梯度消失、稀疏
死亡神經元、非零中心
CNN、早期 Transformer
Leaky ReLU
max(αx, x)
解決死亡 ReLU
多一個超參數
GAN、深層 CNN
GELU
x · Φ(x)
平滑、表現穩定優異
計算稍貴
BERT、GPT
SiLU / Swish
x · sigmoid(x)
平滑、非單調
計算稍貴
EfficientNet
SwiGLU
Swish(W₁x) ⊗ (W₃x)
閘控機制、表達能力強
參數量增加
PaLM、Llama、Mistral
四、非線性帶來的副作用:梯度消失、飽和與死亡神經元
非線性是必要的,但它同時也是許多訓練問題的來源。理解這些副作用,才能真正理解為什麼激活函數的設計如此困難。
4.1 梯度消失與梯度爆炸
反向傳播的核心是鏈式法則:誤差梯度從輸出層往回傳時,每經過一層就要乘上該層的權重與激活函數的導數。這意味著梯度的總大小,大致等於「各層導數與權重的連乘」。如果每一層的乘積都小於 1,梯度就會指數級縮小;如果都大於 1,就會指數級放大。
以 Sigmoid 為例,導數最大只有 0.25。假設一個十層的網路,最理想的情況(所有輸入都恰好在 0 附近),梯度衰減因子也有 0.25¹⁰ ≈ 9.5 × 10⁻⁷。實際上大部分神經元的輸入都遠離 0,導數更小,梯度幾乎消失殆盡,前面的層根本學不到東西。反過來,如果權重初始化過大,就可能造成梯度爆炸,訓練直接發散。
這也是 ReLU 的價值所在:正區間導數恆為 1,不會壓縮梯度。但 ReLU 本身並沒有解決所有問題——它只是把問題從「梯度消失」轉移到了「死亡神經元」。真正讓深層網路穩定訓練的,其實是後來一系列工程技術的組合:He 初始化、批次正規化(Batch Normalization)、殘差連接(Residual Connection)等。
4.2 死亡 ReLU 與非零中心問題
ReLU 在負區間的導數為 0。如果某個神經元的權重在訓練過程中被更新到「對所有輸入都輸出負值」的位置,那麼它的梯度將永遠是 0,權重再也不會更新——這個神經元就「死」了。學習率設得太大時,這種情況特別容易發生,甚至可能導致網路中相當比例的神經元永久失效。
Leaky ReLU、PReLU、ELU 等變體正是為了緩解這個問題而誕生:在負區間保留一個微小的梯度,讓神經元有機會「復活」。
另一個問題是非零中心。ReLU 的輸出恆為非負,這會導致下一層的輸入分佈偏移,梯度更新的方向出現鋸齒狀震盪,收斂變慢。這也是為什麼後來的研究者傾向於選擇 GELU、SiLU 這類在 0 附近有負值區域的平滑函數——它們的輸出更接近零中心。
4.3 非線性的「強度」與模型泛化
非線性不是越強越好,這點常被忽略。過於劇烈的非線性(例如極度陡峭的飽和函數)會讓損失函數的地形變得崎嶇,最佳化變得困難;過於溫和的非線性則可能不足以提供足夠的表達能力。
此外,非線性與泛化之間也存在微妙關係。研究顯示,ReLU 網路本質上是分段線性函數,其複雜度與線性區域的數量有關。區域數量太少,模型欠擬合;太多,則可能過度擬合訓練資料。如何在兩者之間取得平衡,是模型設計與正則化策略共同面對的課題。
五、不同架構中的非線性:CNN、RNN 與 Transformer
5.1 卷積神經網絡:ReLU 的黃金時代
在 CNN 中,非線性通常緊接在卷積層之後。卷積本身是線性運算(本質上是滑動視窗的加權求和),如果沒有激活函數,再多層卷積堆疊起來仍然等價於一個大的線性濾波器。正是 ReLU 的出現,讓 CNN 能夠學習到層次化的特徵:淺層偵測邊緣與紋理,深層組合成物件部件,最終形成完整的語義表徵。
值得注意的是,CNN 中的非線性並不只有激活函數。池化層(Pooling)取最大值或平均值,也是一種非線性操作;而現代網路中的批次正規化,同樣引入了非線性的統計變換。這些機制共同作用,才讓 CNN 具備強大的視覺理解能力。
5.2 循環神經網絡:飽和函數的困境
RNN 需要在時間轴上反覆傳遞隱藏狀態,梯度要沿著時間步展開並連乘。這種結構讓梯度消失問題更加嚴重——序列越長,早期資訊的梯度衰減得越厲害。這也是為什麼早期 RNN 幾乎只能用 Tanh 或 Sigmoid,而它們的飽和特性又反過來加劇了問題。
LSTM 與 GRU 的門控機制,本質上是在網路內部設計了更精巧的非線性結構:遺忘門、輸入門、輸出門各自使用 Sigmoid 來產生 0 到 1 之間的「開關訊號」,再與候選狀態做逐元素相乘。這種閘控式的非線性,讓網路能夠選擇性地保留或丟棄資訊,從根本上緩解了長序列的梯度問題。可以說,LSTM 的成功,很大程度是「非線性設計」的成功。
5.3 Transformer 與大型語言模型:非線性藏在哪裡
Transformer 架構乍看之下好像「沒什麼激活函數」,但實際上非線性無處不在。
首先是注意力機制中的 Softmax。Softmax 將注意力分數轉換為機率分佈,這本身就是一個非線性歸一化操作,決定了模型「該看哪裡」。
其次是前饋網路(FFN)。每個 Transformer 區塊中的 FFN,通常是「線性層 → 激活函數 → 線性層」的結構。原始 Transformer 論文使用的是 ReLU,後來的 BERT、GPT 改用 GELU,而 PaLM、Llama 則採用了 SwiGLU。這個 FFN 區塊承擔了模型中大部分的參數,也是非線性表達的主要來源。有研究指出,FFN 可以被視為一種「鍵值記憶」,而激活函數則決定了記憶的讀取方式。
第三是LayerNorm 與殘差連接中的非線性成分。雖然它們的主要目的是穩定訓練,但歸一化本質上也是一種非線性變換。
有趣的是,隨著模型規模變大,激活函數的選擇對最終效能的影響反而變得相對次要——資料品質、架構設計、訓練策略的影響更大。但在同等條件下,SwiGLU 這類閘控式非線性仍然能帶來可觀的效能提升,這也是它成為當前主流的原因。
六、常見迷思與實務選擇建議
6.1 三個常見迷思
迷思一:激活函數越多越好。 有些初學者會以為在網路中塞入更多激活函數能提升表現,但實際上,激活函數的數量是由網路層數與每層神經元數決定的,額外堆疊只會增加計算成本與訓練難度,並不會自動提升表達能力。關鍵在於「深度」與「寬度」的合理配置,而不是激活函數的密度。
迷思二:非線性越強越好。 前面已經提過,過強的非線性會造成訓練不穩定。ReLU 之所以成功,恰恰是因為它「簡單」——大部分區域是線性的,只在原點做一次折疊。這種「溫和的非線性」反而比複雜的飽和函數更容易訓練。
迷思三:一定要用最新、最潮的激活函數。 事實上,很多成功的模型至今仍在使用 ReLU。激活函數的選擇應該配合架構、資料規模與訓練策略,而不是盲目追新。一個經過充分調校的 ReLU 網路,往往能打敗激活函數選得很潮但其他部分沒調好的模型。
6.2 實務上怎麼選?
七、未來展望:可學習的非線性
7.1 從手工設計到自動搜尋
過去,激活函數是由研究者手工設計的。但近年來,一個明顯的趨勢是「讓模型自己決定要用什麼非線性」。PReLU 讓負區間的斜率成為可學習參數,只是一個開端;此後出現了各種可學習的激活函數,例如參數化的分段線性函數、以樣條曲線參數化的函數,甚至是透過神經架構搜尋(NAS)自動找出來的激活函數。
2024 年引起廣泛討論的 Kolmogorov-Arnold Network(KAN),更是把這個思路推到極致:它把可學習的激活函數放在網路的「邊」上,而不是節點上,並用樣條函數來參數化。雖然 KAN 是否會取代 MLP 仍有爭議,但它提醒了我們:非線性的形式本身,也可以是學習的對象。
7.2 稀疏化、閘控與混合專家
另一個明顯的趨勢是「條件式的非線性」。傳統激活函數對每個輸入都套用同一個函數,但未來的模型越來越傾向於根據輸入動態決定非線性的強度與形式。SwiGLU 的閘控機制就是一個例子:它讓網路自己決定要讓多少資訊通過。混合專家模型(MoE)則更進一步,讓不同的輸入由不同的「專家」子網路處理,每個專家可以有自己的非線性特性。
此外,硬體友善性也成為設計考量。隨著 AI 晶片的多樣化,激活函數的選擇不再只考慮數學性質,還要考慮它在特定硬體上的執行效率。這意味著未來的激活函數設計,會是一場數學、統計與工程之間的綜合權衡。
結語:非線性,是 AI 學會「思考」的起點
回到最初的問題:為什麼 AI 需要非線性?答案其實很樸素——因為世界本身是非線性的。一張圖片中的貓,不是像素的加權總和;一句話的語義,不是詞向量的簡單疊加;股市的漲跌、天氣的變化、蛋白質的折疊,這些現象背後的規律都充滿了交互作用與臨界轉折。如果模型只能用線性函數去逼近,它注定只能看到世界的一個粗糙投影。
激活函數就是那個讓模型「長出曲線」的裝置。它讓神經網絡從只能畫直線,變成可以折疊空間、逼近任意函數;從感知機的階躍函數,到 ReLU 的簡單折疊,再到 GELU 與 SwiGLU 的平滑閘控,這條演化路線反映了整個深度學習的發展脈絡:從追求理論可行性,到追求訓練穩定性,再到追求極致的表達效率。
下次當你寫下 nn.ReLU() 或 nn.GELU() 這一行的時候,不妨想想它背後的故事。它不只是一行程式碼,而是整個神經網絡能夠從資料中學到複雜規律的關鍵樞紐。理解了非線性,你才真正理解了深度學習為什麼「深」得有意義。
如果你對這類 AI 基礎原理與趨勢解析有興趣,歡迎持續關注雅寶社區 · 頂客論壇的 🤖 AI 趨勢專欄,我們會持續帶來更多從原理到實務的深度內容。