02-神经网络原理 核心 预计 20 分钟 ★ 最小路径

激活函数:为什么要非线性

激活函数(Activation Function)是对每层加权和 z 逐元素施加的非线性变换 φ(z),它让多层网络的复合函数脱离线性代数的表达能力天花板,是「深度」二字成立的前提。

一句话定义

激活函数(Activation Function)是对每层加权和 z 逐元素施加的非线性变换 φ(z),它让多层网络的复合函数脱离线性代数的表达能力天花板,是「深度」二字成立的前提。

直觉

没有激活函数的网络像一排只会直线拉伸的橡皮筋——拉多少次都还是直线;激活函数像在橡皮筋上打的结,每个结允许网络「拐弯」,结足够多就能弯出任意曲线去贴合数据。

为什么重要

kp-005 已证明:无非线性则千层等价一层。而选错激活函数会直接导致训练失败——sigmoid 的两端饱和是深层网络梯度消失的历史罪魁,ReLU 的出现被视为深度学习能「深」起来的关键工程决策之一(与 kp-031 的 2012 年复兴、kp-023 的梯度消失专题直接相连)。写模型时几乎每个 Conv/Linear 后面都跟着它,是出镜率最高的模块。

前置知识

  • kp-005(MLP 结构与 φ 的位置)。
  • 库外前置:基本求导;指数函数的图像直觉。

核心概念

  • Sigmoid:σ(z) = 1/(1+e⁻ᶻ),输出压到 (0,1),两端饱和。
  • Tanh:双曲正切,输出 (−1,1),零中心但同样两端饱和。
  • ReLU:φ(z) = max(0, z),正区线性、负区归零,分段线性。
  • 饱和(saturation):输入过正或过负时导数趋近 0,梯度无法回传的状态。
  • 死 ReLU(dying ReLU):神经元对几乎所有输入都落在负区、输出恒 0 且梯度恒 0 的失效状态。
  • Leaky ReLU / GELU:负区给小斜率的修正版 / 现代 Transformer 常用的平滑版。

原理与机制

判断一个激活函数合格的三条标准:非线性(否则层堆叠失效,kp-005)、导数行为良好(反向传播要乘 φ'(z),见 kp-007)、输出不饱和(防止梯度链中断)。Sigmoid 的导数为 σ'(z) = σ(z)(1−σ(z)),最大值仅 0.25 且发生在 z=0;一旦 |z| > 4,导数小于 0.018。在 L 层网络里梯度每过一层近似要乘一次 φ',L 层后量级按 (0.25)ᴸ 甚至更小衰减——这就是梯度消失的数学根源(kp-023 专题展开)。ReLU 的机制性优势有三:正区导数恒 1,梯度按原样回传不衰减;负区输出 0 使网络天然稀疏(约 50% 神经元失活),计算与统计上都高效;计算只需一次比较。代价是负区导数为 0,若某神经元的偏置把 z 长期压在负区,它就「死」了,Leaky ReLU 用 0.01x 的负斜率给负区留一条生路。GELU 用概率门控平滑地近似 ReLU,是 Transformer 系的标准选择,但其分析超出本库范围(指路 Transformer 站点)。Tanh 零中心的特性让下一层输入均值接近 0,配合 kp-014 的归一化思想可以缓解内部协变量偏移。

公式或模型

三个主力激活函数及其导数(反向传播直接消费):

Sigmoid: σ(z)  = 1/(1+e^{-z})     σ'(z)  = σ(z)·(1−σ(z))     最大 0.25
Tanh:    tanh(z) ∈ (−1,1)         tanh'(z) = 1−tanh²(z)       最大 1.0
ReLU:    φ(z)   = max(0, z)       φ'(z)  = 1{z>0}             正区恒 1

变量说明:z 为该层加权和;1{·} 为指示函数。kp-007 的 δ⁽ˡ⁾ 公式中 φ'(z⁽ˡ⁾) 即来自此表。

图示

Sigmoid                    ReLU
 1 ┤        ╭──────        1 ┤            ╱
   │      ╱                  │           ╱
   │    ╱                    │          ╱
 0 ┼──╯                  0 ┼─────────╯
   │  |z|大 → 导数≈0        │  z<0 → 输出0、导数0(可能「死」)
   └──────────► z           └──────────► z

直观类比

Sigmoid 像音量旋钮拧到头:两端再拧也不动(饱和),调节信息丢失;ReLU 像「单向阀门」:正信号畅通(增益 1),负信号直接截断——简单粗暴但信号不会越传越小。

实例或案例

同一任务上观察激活函数的影响:在 MNIST 上训练 5 层全连接网络,用 sigmoid 时前几个 epoch 损失几乎不动、深层梯度接近 0;换成 ReLU 后第一轮损失即显著下降。2010 年前后 Nair 与 Hinton 在语音、Glorot 与 Bordes 在视觉任务上系统证实了这一差异,ReLU 因此成为 2012 年 AlexNet 的标配部件之一(kp-019、kp-031)。工程检查法:训练中统计每层输出的零值比例,ReLU 网络若某层零值率持续高于 90%,就应怀疑死神经元并考虑 Leaky ReLU 或调整学习率/初始化(kp-012)。

常见误区

  • 「输出层也想用 ReLU」:输出层激活由任务决定(分类概率用 softmax、回归可恒等),ReLU 是隐藏层专属的默认选项。
  • 「sigmoid 输出在 (0,1) 所以适合所有概率场景」:作为隐藏层激活它已被 ReLU 系取代,仅二分类输出层仍有其位置。
  • 「死 ReLU 是 bug」:它是模型与数据、学习率共同作用的正常现象,处理手段是调参而非修框架。
  • 「激活函数越平滑越好」:平滑(GELU)与简单(ReLU)各有所长,选型要看任务与容量预算。

与其他知识点的关系

φ'(z⁽ˡ⁾) 是 kp-007 反向传播公式中的乘性因子;kp-012 的初始化方差公式按 ReLU 特化(Kaiming);kp-014 批归一化把 z 拉回非饱和区间接保护激活函数;kp-020 残差连接是应对深层梯度衰减的另一条路线;kp-023 把 sigmoid 饱和导致的序列模型梯度问题推向 LSTM 门控设计。

自测题

  1. 写出 sigmoid 的导数并说明它的最大值为什么是 0.25。

答案要点:σ'=σ(1−σ),在 σ=0.5 处取最大 0.25;两端趋 0。

  1. ReLU 为什么能缓解梯度消失?又带来什么新问题?

答案要点:正区导数恒 1 不衰减梯度;新问题是负区导数 0 可能产生死神经元。

  1. 若把所有激活函数换成恒等函数 φ(z)=z,网络表达能力如何变化?

答案要点:退化为单个线性变换,层数失去意义(与 kp-005 结论一致)。

延伸阅读

  • Glorot、Bordes、Bengio《Deep Sparse Rectifier Neural Networks》AISTATS 2011,ReLU 稀疏性的系统分析。
  • Goodfellow 等《Deep Learning》6.3 节「隐藏单元」。

学习状态

状态保存在浏览器本地,用于首页与路径页的进度统计。