跳轉到

03.1 活化函數與泛近似定理#

本章導讀#

XOR 告訴我們:單層網路只能切直線。要切出曲線,需要兩件事—— 非線性活化函數與多層堆疊。 1989 年,Cybenko 等人證明了一個驚人的定理:只要有一層足夠多的神經元,網路可以逼近任何連續函數。

淺顯說明#

活化函數是神經元的「非線性開關」。沒有它,多層網路只是白疊:

\[ f(x) = W_2\,(W_1 x) = (W_2 W_1)\,x = W' x \quad \text{(仍是線性!)} \]

加了非線性 \(\sigma\) ,每層之間「彎一下」,網路就能折出任意形狀——像用很多段小直線逼近曲線, 像用很多塊小積木堆出雕像。

正規理論#

常見活化函數#

\[ \sigma(z) = \frac{1}{1+e^{-z}} \quad (\text{sigmoid}), \qquad \tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}, \qquad \mathrm{ReLU}(z) = \max(0, z) \]

它們的導數(反向傳播會用到):

\[ \sigma'(z) = \sigma(z)(1 - \sigma(z)), \qquad \tanh'(z) = 1 - \tanh^2(z), \qquad \mathrm{ReLU}'(z) = \mathbb{1}[z > 0] \]

sigmoid 兩端飽和時導數趨近 0(梯度消失);ReLU 正區導數恆為 1,成為現代網路主流。

多層前饋網路#

一個 \(L\) 層前饋網路是複合函數:

\[ f_\theta(\mathbf{x}) = W_L\,\sigma(W_{L-1}\,\sigma(\cdots \sigma(W_1\mathbf{x})\cdots)) \]

泛近似定理(Universal Approximation Theorem)#

定理(Cybenko 1989 / Hornik 1991):設 \(\sigma\) 是連續的非常數活化函數, \(K \subset \mathbb{R}^n\) 是緊緻集, \(g: K \to \mathbb{R}\) 是連續函數。 則對任意 \(\varepsilon > 0\) ,存在單隱藏層網路

\[ f(\mathbf{x}) = \sum_{j=1}^{M} \alpha_j\, \sigma(\mathbf{w}_j^\top \mathbf{x} + b_j) \]

使得 \(\sup_{\mathbf{x} \in K} |f(\mathbf{x}) - g(\mathbf{x})| < \varepsilon\) 。

意義:單層網路在數學上「表達能力無限」。但注意——定理不保證: (1) \(M\) 有多大(可能是指數級);(2) 權重學不學得到。 深度學習的賭注是:深而窄比淺而寬更容易訓練、更省參數。

為什麼「深」勝過「寬」#

對某些函數(如鋸齒函數的複合),深網路只需 \(O(\text{poly})\) 個神經元, 淺網路卻需要指數個——深度帶來複合的指數效率,這是 ResNet 等深結構的理論根據。

簡易範例:用兩個神經元折出「階梯」#

取 \(\sigma = \mathrm{ReLU}\) ,考慮

\[ f(x) = \mathrm{ReLU}(x) - \mathrm{ReLU}(x - 1) \]
  • \(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\) 時逼近任何連續函數——這就是泛近似定理的直覺核心。

歷史典故#

習題#

  1. 用 ReLU 神經元表達 \(f(x) = |x|\) (提示: \(\mathrm{ReLU}(x) + \mathrm{ReLU}(-x)\) )。
  2. 證明:不含活化函數的多層線性網路等價於單層線性網路。
  3. 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)\) 。最大化微分熵

\[ H = -\int_a^b p(x) \log p(x)\, dx, \qquad \text{條件 } \int_a^b p(x)\,dx = 1 \]

用 Lagrange 乘子,令泛函 \(\mathcal{L}[p] = -\int p \log p\,dx - \lambda\left(\int p\,dx - 1\right)\) ,變分(對每個 \(x\) 偏導)得

\[ \frac{\partial}{\partial p}\left[-p\log p - \lambda p\right] = -\log p - 1 - \lambda = 0 \quad\Rightarrow\quad p(x) = e^{-1-\lambda} = \text{常數} \]

由歸一化得 \(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}\) 級)——數值驗證了「沒有活化函數,深層只是白疊」。