Ch06 神经网络基础修订于 二〇二六年七月六日

6.5 常见激活函数深入

前面介绍了四种激活函数的基本形态,这里深入讲几个关键细节。

6.5.1 ReLU的死亡神经元问题

ReLU的公式 f(x) = max(0, x) 有一个致命缺陷:一旦某个神经元的所有输入都让它输出0(即加权和+bias为负),该神经元的梯度就永远是0——梯度为0意味着参数不再更新,这个神经元就”死”了。它再也不会对任何输入产生反应,相当于脑细胞坏死。

死亡神经元常见于以下场景:

  • 学习率过大,一次更新把bias推到了很负的区域
  • 权重初始化不当,导致大量神经元一开始就输出负值
  • 梯度爆炸后参数被推到极端值

解决方案:Leaky ReLU(f(x) = max(0.01x, x))给负数区域一个很小的斜率,让梯度不至于完全为零。不过实践中,合理的权重初始化和适中的学习率已经能大幅缓解ReLU死亡问题,所以Leaky ReLU反而不如ReLU常见。

6.5.2 GELU:为什么平滑更好

GELU(Gaussian Error Linear Unit)的公式是 f(x) = x * Φ(x),其中Φ是标准正态分布的累积分布函数。与ReLU的硬截断(负数直接归零)不同,GELU在x=0附近是平滑过渡的——负数不会完全消失,而是被”软性抑制”。

平滑的好处在于梯度的连续性。ReLU在x=0处梯度不连续(左导数为0,右导数为1),这会让优化路径在零点附近”抖动”。GELU处处可导,梯度流动更稳定,训练更平滑。这也是为什么Transformer全系列(BERT、GPT、T5、Llama)都用GELU——在大规模训练中,梯度稳定性的微小优势会放大成显著的收敛速度差异。

6.5.3 Swish / SiLU:ReLU的进化版

Swish由Google Brain在2017年通过自动化搜索发现,公式为 f(x) = x * sigmoid(βx)。当β=1时就是SiLU(Sigmoid Linear Unit),已被PyTorch、Llama等广泛采用。

Swish/SiLU的特点:

  • 非单调:在x<0区域不是单调递减的,有一个小”凸起”,这给了网络更多表达空间
  • 无上界:正数区域不受限,避免了Sigmoid/Tanh的梯度饱和问题
  • 平滑:处处可导

Llama 2和Llama 3都使用SiLU作为前馈网络的激活函数,实践验证了它在LLM训练中的效果优于ReLU和GELU。

6.5.4 激活函数选择指南

场景推荐激活函数原因
简单分类/回归(小网络)ReLU简单高效,死亡神经元问题在小网络上不明显
Transformer / LLM 前馈层Swish/SiLU 或 GELU平滑梯度,大规模训练收敛更稳定
CNN 图像分类(ResNet等)ReLU经典搭配,BatchNorm已缓解死亡问题
二分类输出层Sigmoid输出天然在(0,1),可直接解释为概率
多分类输出层Softmax输出和为1的多类别概率分布
RNN / LSTMTanh + SigmoidLSTM门控结构的历史惯例
2026年新架构默认Swish/SiLU新一代模型(Llama 3/4、Gemma等)的标配

← 上一节:6.4 激活函数:为什么不能全用线性 | 下一节:6.6 归一化层:BatchNorm 与 LayerNorm →

关联8

知识图谱

局部图谱 · 点节点跳转