激活函数:为什么要非线性
激活函数(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 门控设计。
自测题
- 写出 sigmoid 的导数并说明它的最大值为什么是 0.25。
答案要点:σ'=σ(1−σ),在 σ=0.5 处取最大 0.25;两端趋 0。
- ReLU 为什么能缓解梯度消失?又带来什么新问题?
答案要点:正区导数恒 1 不衰减梯度;新问题是负区导数 0 可能产生死神经元。
- 若把所有激活函数换成恒等函数 φ(z)=z,网络表达能力如何变化?
答案要点:退化为单个线性变换,层数失去意义(与 kp-005 结论一致)。
延伸阅读
- Glorot、Bordes、Bengio《Deep Sparse Rectifier Neural Networks》AISTATS 2011,ReLU 稀疏性的系统分析。
- Goodfellow 等《Deep Learning》6.3 节「隐藏单元」。
学习状态
状态保存在浏览器本地,用于首页与路径页的进度统计。