激活函数为神经网络引入非线性,使其能够拟合复杂关系。无激活函数的多层网络等价于单层线性变换。

经典饱和激活函数(已基本淘汰)

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
  • 回归:无激活函数