激活函数为神经网络引入非线性,使其能够拟合复杂关系。无激活函数的多层网络等价于单层线性变换。
经典饱和激活函数(已基本淘汰)
Sigmoid
- 公式:
- 值域:(0, 1)
- ✅ 输出有界,梯度平滑,可解释为概率
- ❌ 梯度消失严重(|x|>4 时梯度趋近于 0),输出非零均值,计算慢
- 适用:二分类输出层,隐藏层几乎不用
Tanh
- 公式:
- 值域:(-1, 1)
- ✅ 零均值输出,收敛比 Sigmoid 快
- ❌ 梯度消失(|x|>2 时梯度趋近于 0),计算复杂
- 适用:早期 RNN,现已被 ReLU 取代
ReLU 家族(隐藏层首选)
ReLU
- 公式:
- 值域:[0, +∞)
- ✅ 计算极快(仅 max 操作),正区间梯度恒为 1,稀疏激活,收敛快
- ❌ 死亡神经元问题:输入恒为负时梯度永远为 0
- 适用:传统 CNN、MLP 隐藏层,默认首选
Leaky ReLU
- 公式: (通常 α=0.01)
- ✅ 解决死亡神经元问题
- ❌ α 需手动调整,效果不稳定
- 适用:ReLU 出现大量死亡神经元时
PReLU
- 公式:
- 特点:α 为可学习参数(每通道一个)
- ✅ 自动学习最优斜率,效果优于 Leaky ReLU
- ❌ 增加少量参数
- 适用:深层网络,高精度任务
ELU
- 公式:
- ✅ 输出接近零均值,负区间平滑,抗噪声
- ❌ 包含指数运算
- 适用:噪声敏感任务
GELU(Transformer 标配)
- 公式: ,Φ(x) 为标准正态分布 CDF
- 近似:
- ✅ 平滑可导,无死亡神经元,自带正则化效果
- 适用:Transformer、BERT、GPT 等大模型
Swish/SiLU
- 公式: (β=1 时称为 SiLU)
- ✅ 平滑可导,无上界有下界,性能优于 ReLU
- 适用:CNN、Transformer
Mish
- 公式:
- ✅ 梯度更连续,CV 任务表现优异
- ❌ 计算复杂度最高
- 适用:高精度 CV 任务
输出层专用
Softmax
- 公式:
- 值域:(0, 1),所有输出和为 1
- 适用:多分类输出层
Sigmoid
- 适用:二分类输出层,多标签分类
其他
Softplus
- 公式:
- 特点:ReLU 的平滑近似
- 适用:需要平滑激活的场景
Hardswish
- 公式:
- 特点:Swish 的分段线性近似
- 适用:移动端、嵌入式设备
激活函数对比
| 激活函数 | 公式 | 值域 | 梯度消失 | 死亡神经元 | 计算速度 | 适用场景 |
|---|---|---|---|---|---|---|
| Sigmoid | (0,1) | 严重 | 无 | 慢 | 二分类输出 | |
| Tanh | (-1,1) | 严重 | 无 | 慢 | 早期 RNN | |
| ReLU | [0,+∞) | 负区间 | 有 | 极快 | CNN/MLP | |
| Leaky ReLU | (-∞,+∞) | 轻微 | 无 | 快 | 解决死亡神经元 | |
| GELU | (-∞,+∞) | 几乎无 | 无 | 中 | Transformer | |
| Swish/SiLU | (-∞,+∞) | 几乎无 | 无 | 中 | CNN/Transformer | |
| Mish | (-∞,+∞) | 几乎无 | 无 | 慢 | 高精度 CV | |
| Softmax | (0,1) | 严重 | 无 | 慢 | 多分类输出 |
选型指南
默认选择:
- 传统 CNN/MLP:ReLU
- Transformer:GELU
- 轻量级/移动端:Hardswish
问题替换:
- ReLU 死亡神经元 → Leaky ReLU/PReLU
- 精度不足 → Swish/Mish
- 过拟合 → GELU(自带正则化)
输出层:
- 二分类:Sigmoid
- 多分类:Softmax
- 回归:无激活函数