深度学习中的激活函数全解析:该选哪一个?
激活函数的作用
激活函数为神经网络引入非线性,使模型能够拟合复杂数据模式。没有激活函数,神经网络仅能表达线性变换,无法处理图像、自然语言等高维非线性数据。
常用激活函数及特点
Sigmoid
- 数学形式:$f(x) = \frac{1}{1 + e^{-x}}$
- 输出范围:(0, 1),适合二分类输出层
- 缺点:梯度消失问题显著,非零中心输出可能导致收敛变慢
Tanh
- 数学形式:$f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$
- 输出范围:(-1, 1),零中心特性缓解了Sigmoid的部分问题
- 仍存在梯度消失,但比Sigmoid更优
ReLU
- 数学形式:$f(x) = \max(0, x)$
- 计算高效,缓解梯度消失(正区间梯度为1)
- 缺点:神经元死亡问题(负区间梯度为0)
Leaky ReLU
- 数学形式:$f(x) = \max(\alpha x, x)$(通常$\alpha=0.01$)
- 解决ReLU的神经元死亡问题,负区间保留微小梯度
Swish
- 数学形式:$f(x) = x \cdot \sigma(\beta x)$($\sigma$为Sigmoid)
- 自门控特性,实验显示优于ReLU
- 计算代价略高
选择建议
隐藏层推荐
- 优先尝试ReLU及其变种(Leaky ReLU、Swish),尤其深层网络
- 简单场景ReLU足够,复杂任务可测试Swish或GELU
输出层推荐
- 二分类:Sigmoid
- 多分类:Softmax
- 回归任务:线性激活(无激活函数)
注意事项
- 避免Sigmoid/Tanh用于深层网络隐藏层
- 监控神经元死亡率,高时切换至Leaky ReLU
- 批量归一化(BatchNorm)可缓解部分激活函数缺陷
前沿进展
- GELU(高斯误差线性单元):结合随机正则化思想,用于Transformer
- Mish:$f(x) = x \cdot \tanh(\ln(1+e^x))$,平滑且无饱和区,部分CV任务表现优异
实际选择需结合任务架构实验验证,通常ReLU家族作为基线,Swish/GELU在调优阶段尝试。
