激活函数
激活函数决定了神经网络的非线性表达能力与梯度传播特性。理想的激活在非线性、可导性、数值稳定性与计算代价之间取得平衡。不同层、不同任务与不同硬件平台往往偏好不同的激活函数。
1. 经典函数与性质
- Sigmoid:输出 (0,1),具有概率解释;但在大幅度区间梯度接近 0,易致饱和与梯度消失(参见 Sigmoid激活函数)。
- Tanh:零均值,较 Sigmoid 梯度大;但仍存在饱和区间。
- ReLU:(\max(0,x)),计算便宜、稀疏性强;缺点是“死亡 ReLU”(梯度永久为 0)。
- Leaky/Parametric ReLU:为负半轴引入小斜率,缓解死亡问题。
- GELU:基于高斯误差线性单元,兼具平滑性与性能,Transformer 中常用。
- Swish:x·sigmoid(x),在部分任务中优于 ReLU。
- Softmax:用于多分类输出层,将 logits 归一化为概率分布。
2. 选择指南
- 视觉/卷积网络:ReLU/GELU/SiLU 常见;低功耗设备中 ReLU 更合适。
- NLP/Transformer:GELU/SiLU 与归一化结合良好;输出层配合 Softmax + 交叉熵。
- 小模型/嵌入式:优先选择计算简单且量化友好的函数(如 ReLU)。
3. 数值与训练稳定性
- 饱和与梯度:Sigmoid/Tanh 在远离零点区域梯度变小;可通过初始化与归一化缓解。
- 溢出与下溢:Softmax/Log-Sum-Exp 计算注意数值稳定技巧(减去最大值)。
- 量化友好性:激活的动态范围影响 模型量化 效果;对称/非对称、per-tensor/per-channel 标定策略有所不同(参见 GGUF模型量化)。
4. 与架构和优化的关系
- 归一化与残差:激活位置与归一化(BN/LN)次序会影响训练速度与最终精度。
- 正则化:激活诱导的稀疏性本身具有正则效果;与 dropout/权衰等协同。
- 计算图:逐元素激活便于并行;框架提供高效 kernel 实现。
5. 实践清单
- 优先选用 ReLU/GELU 作为默认中间层激活;
- 避免在深层网络中大量使用 Sigmoid/Tanh;
- 对输出层按任务特性选取(分类用 Softmax,回归常用恒等或 Tanh 限幅);
- 关注量化与部署目标下的激活动态范围与近似策略。