在神经网络中选择合适的激活函数(Activation Function)对模型的性能至关重要。不同的激活函数适用于不同的任务和网络结构,选择时需综合考虑梯度传播、计算效率、输出范围、稀疏性等因素。以下是选取激活函数的系统方法:
输出层:用 Sigmoid
(输出范围 (0,1),表示概率)
隐藏层:ReLU 或其变体(如 LeakyReLU)
(避免梯度消失,加速训练)
输出层:用 Softmax
(输出概率分布,满足多类互斥)
隐藏层:ReLU/Swish
(平衡计算效率和梯度稳定性)
输出层:
无约束回归(如预测房价)→ 线性激活(f(x)=x)
正数输出(如预测价格)→ ReLU
概率输出(如 (0,1))→ Sigmoid
隐藏层:ReLU/Tanh(根据数据分布选择)
隐藏层:优先 ReLU(计算快,缓解梯度消失)
若出现“死亡神经元”(Dead ReLU),改用 LeakyReLU 或 Swish
对初始化敏感时,可尝试 Tanh(但需注意梯度消失)
隐藏层:ReLU(稀疏激活,适合图像特征提取)
更复杂任务(如 ImageNet)可尝试 Swish(Google 实验证明优于 ReLU)
隐藏层:Tanh(梯度更稳定,缓解梯度爆炸)
门控结构(如 LSTM)中配合 Sigmoid(控制信息流)
激活函数 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Sigmoid | 输出概率,平滑梯度 | 梯度消失,非零中心 | 输出层(二分类) |
Tanh | 零中心,梯度比 Sigmoid 稳定 | 梯度消失 | RNN/LSTM |
ReLU | 计算快,稀疏激活 | 死亡神经元 | 隐藏层(DNN/CNN) |
LeakyReLU | 解决死亡神经元 | 需调参数 α | 替代 ReLU |
Swish | 平滑,自门控,实验表现优 | 计算稍复杂 | 深层网络 |
默认首选:隐藏层用 ReLU,输出层根据任务选择(Sigmoid/Softmax/线性)。
遇到问题:
梯度消失 → 换 LeakyReLU/Swish
输出不稳定 → 换 Tanh(但需小心梯度消失)
死亡神经元 → 调小学习率或用 LeakyReLU
高级策略:
在残差网络(ResNet)中,ReLU 放在残差连接之前(Pre-activation)。
对噪声敏感的任务(如强化学习),尝试 SELU(自归一化激活)。