03.1 活化函數與泛近似定理#
本章導讀#
XOR 告訴我們:單層網路只能切直線。要切出曲線,需要兩件事—— 非線性活化函數與多層堆疊。 1989 年,Cybenko 等人證明了一個驚人的定理:只要有一層足夠多的神經元,網路可以逼近任何連續函數。
淺顯說明#
活化函數是神經元的「非線性開關」。沒有它,多層網路只是白疊:
加了非線性 \(\sigma\) ,每層之間「彎一下」,網路就能折出任意形狀——像用很多段小直線逼近曲線, 像用很多塊小積木堆出雕像。
正規理論#
常見活化函數#
它們的導數(反向傳播會用到):
sigmoid 兩端飽和時導數趨近 0(梯度消失);ReLU 正區導數恆為 1,成為現代網路主流。
多層前饋網路#
一個 \(L\) 層前饋網路是複合函數:
泛近似定理(Universal Approximation Theorem)#
定理(Cybenko 1989 / Hornik 1991):設 \(\sigma\) 是連續的非常數活化函數, \(K \subset \mathbb{R}^n\) 是緊緻集, \(g: K \to \mathbb{R}\) 是連續函數。 則對任意 \(\varepsilon > 0\) ,存在單隱藏層網路
使得 \(\sup_{\mathbf{x} \in K} |f(\mathbf{x}) - g(\mathbf{x})| < \varepsilon\) 。
意義:單層網路在數學上「表達能力無限」。但注意——定理不保證: (1) \(M\) 有多大(可能是指數級);(2) 權重學不學得到。 深度學習的賭注是:深而窄比淺而寬更容易訓練、更省參數。
為什麼「深」勝過「寬」#
對某些函數(如鋸齒函數的複合),深網路只需 \(O(\text{poly})\) 個神經元, 淺網路卻需要指數個——深度帶來複合的指數效率,這是 ResNet 等深結構的理論根據。
簡易範例:用兩個神經元折出「階梯」#
取 \(\sigma = \mathrm{ReLU}\) ,考慮
- \(x < 0\) :兩項皆 0, \(f = 0\) 。
- \(0 \le x < 1\) : \(f = x\) 。
- \(x \ge 1\) : \(f = x - (x-1) = 1\) 。
兩個神經元就折出一個「斜坡加平台」。堆 \(2M\) 個 ReLU,就能折出 \(M\) 段的階梯; \(M \to \infty\) 時逼近任何連續函數——這就是泛近似定理的直覺核心。
歷史典故#
- 1986 年反向傳播:見卷宗 ../1986-反向傳播演算法.md——讓深網路的權重「學得到」的引擎(下一節細講)。
- 1989 年 LeCun 的 CNN:見 ../1989-LeCunCNN手寫辨識.md——泛近似的結構化版本:用摺積先驗取代任意函數。
- 2015 年 ResNet:見 ../2015-ResNet殘差網路.md——152 層網路終於訓得動,深度的複合效率成為主流。
習題#
- 用 ReLU 神經元表達 \(f(x) = |x|\) (提示: \(\mathrm{ReLU}(x) + \mathrm{ReLU}(-x)\) )。
- 證明:不含活化函數的多層線性網路等價於單層線性網路。
- sigmoid 在 \(|z| > 10\) 時導數約多少?說明這如何導致深網路的「梯度消失」問題。
補充#
1. 數學推導證明#
證明一(習題 1):用 ReLU 表達 \(|x|\) 。
由提示,取 \(f(x) = \mathrm{ReLU}(x) + \mathrm{ReLU}(-x)\) 。分三段討論:
- \(x > 0\) : \(\mathrm{ReLU}(x) = x\) , \(\mathrm{ReLU}(-x) = 0\) ,故 \(f(x) = x\) 。
- \(x < 0\) : \(\mathrm{ReLU}(x) = 0\) , \(\mathrm{ReLU}(-x) = -x\) ,故 \(f(x) = -x\) 。
- \(x = 0\) :兩項皆 0, \(f(0) = 0\) 。
三段合起來正好 \(f(x) = |x|\) ,且在 \(x = 0\) 處連續( \(\lim_{x\to 0^+} f = \lim_{x\to 0^-} f = 0\) )。 \(\blacksquare\)
這說明:兩個 ReLU 神經元就能表達一個不可線性切分的函數——非線性活化是表達力的來源。
證明二:均勻分布在固定區間上熵最大。
設隨機變數 \(X \in [a, b]\) ,密度 \(p(x)\) 。最大化微分熵
用 Lagrange 乘子,令泛函 \(\mathcal{L}[p] = -\int p \log p\,dx - \lambda\left(\int p\,dx - 1\right)\) ,變分(對每個 \(x\) 偏導)得
由歸一化得 \(p(x) = \dfrac{1}{b-a}\) ,即均勻分布,此時熵 \(H = \log(b-a)\) 為最大值。 \(\blacksquare\)
物理對應:溫度 \(T \to \infty\) 時 Gibbs 分布趨於均勻(見 04.2 節)——熵最大的狀態是「最無知」的高溫狀態。
2. 簡易範例#
範例一:ReLU 階梯逼近 \(\sin(x)\) 。 把 \([0, \pi]\) 切成 \(M\) 段,每段用一個「斜坡加平台」(如本章範例的 \(\mathrm{ReLU}(x) - \mathrm{ReLU}(x-1)\) 的平移縮放版)接住 \(\sin\) 的值。程式見 _code/03.1-relu-universal-approximation.py,輸出顯示: \(M = 2\) 段時最大誤差約 \(0.21\) ; \(M = 8\) 時降到約 \(0.019\) ; \(M = 32\) 時約 \(0.0012\) ; \(M = 64\) 時約 \(0.0003\) ——誤差隨分段數下降,數值驗證了泛近似定理「足夠多的神經元可逼近任意連續函數」。
範例二:多層線性網路塌縮。 用隨機 \(W_1, W_2\) 計算 \(W_2 W_1 x\) 與單層 \(W' = W_2W_1\) 的輸出,兩者完全相同(誤差為機器精度 \(10^{-16}\) 級)——數值驗證了「沒有活化函數,深層只是白疊」。