跳到主要内容

激活函数与门控前馈网络

“ReLU 已过时”太宽泛;“只需掌握 ReLU、Sigmoid、Tanh”又明显落后。激活选择已经按架构、训练规模、数值精度和硬件分化。现代 Transformer 还常把普通两层 FFN 改成门控结构,这不只是更换一个逐元素函数。

逐元素激活

名称定义或近似角色优点主要边界
ReLUmax(0,x)\max(0,x)便宜、正半轴不饱和、产生精确零负半轴梯度为零;零点不光滑
Leaky/PReLUmax(ax,x)\max(ax,x)给负半轴保留梯度aa 是新假设/参数;不保证更好
GELUxΦ(x)x\Phi(x)平滑地按输入幅度缩放,BERT 等使用计算/近似实现不同;不产生严格稀疏
SiLU/Swishxσ(βx)x\sigma(\beta x)平滑、允许小负值;β=1\beta=1 时常称 SiLU/Swish非单调区与 kernel/量化成本
Sigmoidσ(x)\sigma(x)[0,1][0,1] 门控或概率映射大幅度饱和,不适合深层隐藏单元的通用默认
Tanhtanh(x)\tanh(x)有界且零中心,常见于循环状态两端饱和

Φ\Phi 是标准正态 CDF。GELU 常用 tanh 或 erf 近似,不同 kernel 在混合精度下可能有小差异。Swish 论文讨论可学习 β\beta,而框架中的 SiLU 通常固定 β=1\beta=1;文献常把二者近似同义,比较时必须写清实现。

为什么“更平滑”不等于“更先进”

平滑函数可改善某些优化轨迹和大规模训练结果,但收益与初始化、归一化、宽度、数据、优化器和 fused kernel 纠缠。ReLU 仍有三个实际反例:

  1. 卷积、轻量或量化部署中,简单 kernel 和精确零可能更重要;
  2. 小数据或小模型的误差常由数据与正则化主导;
  3. 一个稳定 ReLU 基线可以揭示复杂门控的收益是否只是参数增加。

因此“论文中的更高平均分”不能直接变成所有任务的默认。

GLU 与门控 FFN

普通 Transformer FFN 常写成

FFN(x)=W2ϕ(W1x+b1)+b2.\operatorname{FFN}(x)=W_2\,\phi(W_1x+b_1)+b_2.

门控线性单元(GLU)把两条投影相乘。简化写法为

GLU(x)=A(x)σ(B(x)).\operatorname{GLU}(x)=A(x)\odot\sigma(B(x)).

在 Transformer 中,常见变体可写为

GEGLU(x)=Wo(GELU(Wgx)Wvx),\operatorname{GEGLU}(x)=W_o\left(\operatorname{GELU}(W_gx)\odot W_vx\right), SwiGLU(x)=Wo(SiLU(Wgx)Wvx).\operatorname{SwiGLU}(x)=W_o\left(\operatorname{SiLU}(W_gx)\odot W_vx\right).

ReGLU 则把门分支换成 ReLU。门控层有 WgW_gWvW_vWoW_o 三个主要投影,普通 FFN 只有输入/输出两个;若仍使用相同中间宽度,参数和计算都会增加。等参数比较通常要缩小门控层的中间维度,具体比例取决于是否计 bias、embedding 和对齐约束,不能把某个固定比例当定律。

现代架构中的位置

  • BERT 原始架构使用 GELU;
  • PaLM 报告采用 SwiGLU;
  • Llama 3 架构报告也采用 SwiGLU,并把它与 RMSNorm、RoPE、GQA 等一起作为完整 block 的一部分;
  • ConvNeXt 展示了现代 ConvNet 也可采用 GELU,而非只有 Transformer 使用平滑激活。

这些是论文所述实例,不证明 GELU/SwiGLU 对所有规模、模态或硬件占优。架构包中的多项改动共同变化时,也不能把收益全部归因于激活。

输出激活不要混入隐藏层争论

  • 二分类常训练一个 logit,并在解释概率时应用 Sigmoid;
  • 互斥多分类使用 logits 与 Softmax;
  • 多标签使用独立 Sigmoid;
  • 回归可用线性、正值或有界变换,取决于目标支持集。

为数值稳定,训练损失通常直接接收 logits,而不是先手动计算 Sigmoid/Softmax 再取对数。

失败模式

现象可能原因检查
大量永久零激活ReLU 单元失活、学习率过大、bias/输入偏移激活直方图、梯度、较小学习率或 Leaky 对照
梯度接近零Sigmoid/Tanh 饱和、深链路、缩放错误pre-activation 分布、归一化、初始化
门控输出塌缩gate/value 尺度失衡或饱和分支范数、gate 分布、无门控基线
混合精度 NaN极值、近似/kernel、loss scalingfp32 对照、有限值断言、稳定实现
新激活更慢缺少 fused kernel、额外投影、内存带宽端到端吞吐而非只看 FLOPs
量化后退化非线性范围和校准样本不匹配目标硬件上的真实量化评估

公平选择协议

  1. 先固定数据切分、初始化族、优化器、步数和停止规则;
  2. 比较普通 ReLU/GELU/SiLU FFN 时保持宽度和参数可解释;
  3. 比较 GEGLU/SwiGLU 时同时给出中间维、总参数、FLOPs 和峰值内存;
  4. 至少重复多个 seed,报告均值、离散度和失败;
  5. 在目标 dtype、编译器和硬件上测端到端吞吐;
  6. 预先确定质量、延迟、内存与稳定性阈值,而不是结果出来后挑指标。

更新规则与偏差

本文偏重稠密网络、Transformer 和 GPU 训练。脉冲神经网络、周期激活、隐式神经表示、可学习 spline、符号/逻辑门以及特定加速器可能需要完全不同的选择。每次出现新函数时,应先问它改变的是表达、优化、参数预算还是 kernel,而不是继续扩充“激活函数动物园”。