🎯 学习目标

  • 理解激活函数的作用与重要性
  • 掌握常用激活函数的特点
  • 了解梯度消失与梯度爆炸问题
  • 学会选择合适的激活函数
激活函数概念图

为什么需要激活函数

激活函数为神经网络引入非线性。没有激活函数,无论多少层神经网络都等价于单层线性变换。 非线性激活使神经网络能够学习复杂的模式。

📊 常用激活函数

ReLU

ReLU(x) = max(0, x)
  • 计算简单高效
  • 缓解梯度消失
  • 存在死亡ReLU问题
  • 隐藏层首选

Sigmoid

σ(x) = 1 / (1 + e⁻ˣ)
  • 输出范围(0,1)
  • 适合二分类输出层
  • 易导致梯度消失
  • 计算开销较大

Tanh

tanh(x) = (eˣ - e⁻ˣ)/(eˣ + e⁻ˣ)
  • 输出范围(-1,1)
  • 零中心化
  • 仍有梯度消失
  • RNN中常用

Softmax

softmax(x)ᵢ = eˣⁱ/Σeˣʲ
  • 输出和为1
  • 多分类输出层
  • 输出概率分布
  • 与交叉熵配合

💻 PyTorch实现

import torch.nn as nn import torch # 各种激活函数 relu = nn.ReLU() leaky_relu = nn.LeakyReLU(0.01) sigmoid = nn.Sigmoid() tanh = nn.Tanh() softmax = nn.Softmax(dim=1) gelu = nn.GELU() # 在模型中使用 model = nn.Sequential( nn.Linear(784, 256), nn.ReLU(), # 隐藏层用ReLU nn.Linear(256, 10), nn.Softmax(dim=1) # 输出层用Softmax )

⚖️ 激活函数对比

函数 优点 缺点 适用场景
ReLU 计算快,缓解梯度消失 死亡ReLU 隐藏层首选
LeakyReLU 解决死亡ReLU 需调参 替代ReLU
Sigmoid 输出(0,1) 梯度消失 二分类输出
Tanh 零中心 梯度消失 RNN
GELU 平滑、效果好 计算复杂 Transformer
💡
选择建议

隐藏层:优先使用ReLU或LeakyReLU。输出层:二分类用Sigmoid,多分类用Softmax,回归任务不用激活函数。

激活函数
图:不同激活函数的曲线对比

📝 本节小结

  • • 激活函数为神经网络引入非线性
  • • ReLU是隐藏层的首选激活函数
  • • Sigmoid适合二分类,Softmax适合多分类
  • • 选择激活函数需考虑梯度问题和计算效率