激活函数导数完整推导

分类: 神经网络基础 · 难度: 基础 · 关联讲座: L03

激活函数导数完整推导

激活函数是神经网络非线性能力的来源,而它们的导数则是反向传播能否正常工作的关键。本文完整推导 sigmoid、tanh、ReLU 和 GELU 四种主流激活函数的导数,并通过数值计算揭示梯度饱和与死区问题——这些性质直接决定了深度网络的可训练性。

📐 激活函数导数完整推导

反向传播需要激活函数的导数,以下逐一推导:

1. Sigmoid 导数

σ(z)=11+ez=(1+ez)1\sigma(z) = \frac{1}{1+e^{-z}} = (1+e^{-z})^{-1},用链式法则:

σ(z)=(1+ez)2(ez)=ez(1+ez)2\sigma'(z) = -(1+e^{-z})^{-2} \cdot (-e^{-z}) = \frac{e^{-z}}{(1+e^{-z})^2}

注意 ez=1σ(z)1=1σ(z)σ(z)e^{-z} = \frac{1}{\sigma(z)} - 1 = \frac{1 - \sigma(z)}{\sigma(z)},代入:

σ(z)=11+ezez1+ez=σ(z)(1σ(z))\sigma'(z) = \frac{1}{1+e^{-z}} \cdot \frac{e^{-z}}{1+e^{-z}} = \sigma(z) \cdot (1 - \sigma(z))

意义:sigmoid 的导数可以用自身表达,计算极为高效(前向已算出 σ(z)\sigma(z),反向直接用)。

2. tanh 导数

tanh(z)=ezezez+ez\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}},商法则:

tanh(z)=(ez+ez)(ez+ez)(ezez)(ezez)(ez+ez)2\tanh'(z) = \frac{(e^z + e^{-z})(e^z + e^{-z}) - (e^z - e^{-z})(e^z - e^{-z})}{(e^z + e^{-z})^2}

分子 =(ez+ez)2(ezez)2=4= (e^z+e^{-z})^2 - (e^z-e^{-z})^2 = 4(平方差展开),故:

tanh(z)=4(ez+ez)2=1tanh2(z)\tanh'(z) = \frac{4}{(e^z+e^{-z})^2} = 1 - \tanh^2(z)

同样,导数可由自身表达(与 cosh2(z)\cosh^{-2}(z) 等价,但后者更难直接使用)。

3. ReLU 导数

ReLU(z)=max(z,0)={zz>00z0\text{ReLU}(z) = \max(z, 0) = \begin{cases} z & z > 0 \\ 0 & z \le 0 \end{cases}

ReLU(z)=1[z>0]={1z>00z0\text{ReLU}'(z) = \mathbb{1}[z > 0] = \begin{cases} 1 & z > 0 \\ 0 & z \le 0 \end{cases}

z=0z=0 处次梯度(subgradient)通常取 0 或 0.5,实践中影响可忽略。

4. GELU 近似导数

GELU 严格形式:GELU(x)=xΦ(x)\text{GELU}(x) = x \cdot \Phi(x)Φ\Phi 为标准正态 CDF),导数需数值计算。常用近似:

GELU(x)xσ(1.702x)\text{GELU}(x) \approx x \cdot \sigma(1.702x)

ddxGELU(x)σ(1.702x)+1.702xσ(1.702x)(1σ(1.702x))\frac{d}{dx}\text{GELU}(x) \approx \sigma(1.702x) + 1.702x \cdot \sigma(1.702x)(1-\sigma(1.702x))

🔢 数值计算示例

对输入 z{2,0.5,0,0.5,2}z \in \{-2, -0.5, 0, 0.5, 2\},计算各激活函数输出:

zzσ(z)\sigma(z)tanh(z)\tanh(z)ReLU(z)\text{ReLU}(z)σ(z)\sigma'(z)tanh(z)\tanh'(z)ReLU(z)\text{ReLU}'(z)
-2.00.119-0.9640.0000.1050.0710
-0.50.378-0.4620.0000.2350.7860
0.00.5000.0000.0000.2501.0000
0.50.6220.4620.5000.2350.7861
2.00.8810.9642.0000.1050.0711

关键观察

  • sigmoid 和 tanh 在 z|z| 较大时导数趋近于 0(梯度饱和
  • ReLU 正区导数恒为 1(无饱和),负区恒为 0(死区)
  • tanh 在 z=0z=0 处导数最大(= 1),梯度传播最顺畅

💡 为什么 ReLU 训练快?

sigmoid/tanh 的导数在 z>2|z|>2 时已经很小(sigmoid 在 z=2z=2 时导数仅 0.105),深层网络中梯度连乘后趋近于零,即梯度消失问题

ReLU 在正区导数恒为 1,梯度可以无损地流过任意多层,深层网络得以有效训练。这是 ReLU 在 2010 年代席卷深度学习的核心原因。

⚠️ 常见误区

  1. 误区:ReLU 没有梯度消失问题 → 正确:ReLU 消除了饱和区梯度消失,但存在 Dead ReLU 问题:若某神经元在训练过程中始终接收负输入,梯度永远为 0,权重永远不更新,该神经元”死亡”且无法恢复。学习率过大容易触发。
  2. 误区:tanh 的导数是 1cosh2(z)\frac{1}{\cosh^2(z)}正确1cosh2(z)=1tanh2(z)\frac{1}{\cosh^2(z)} = 1 - \tanh^2(z) 两者数学等价,但 1tanh2(z)1 - \tanh^2(z) 在反向传播中可直接用已算出的 tanh(z)\tanh(z) 值,更高效。
  3. 误区:GELU 只比 ReLU 稍好一点 → 正确:GELU 在 Transformer(BERT、GPT)中的表现远优于 ReLU,现代 LLM 几乎全用 SwiGLU/GELU 变体,这是架构设计上的重要选择。