在神经网络中,激活函数用于引入非线性,使模型能够学习复杂的模式。以下是一些常见的激活函数及其特点:
1. Sigmoid
-
公式:
-
输出范围: (0, 1)
-
特点: 常用于二分类问题的输出层,但容易导致梯度消失。
2. Tanh (双曲正切)
-
公式:
-
输出范围: (-1, 1)
-
特点: 比Sigmoid更常用,因为它的输出以0为中心,但仍然存在梯度消失问题。
3. ReLU (Rectified Linear Unit)
-
公式:
-
输出范围: [0, ∞)
-
特点: 计算简单,能有效缓解梯度消失问题,但可能导致神经元“死亡”。
4. Leaky ReLU
-
公式:
,其中 α 是一个小的正数(如0.01)
-
输出范围: (-∞, ∞)
-
特点: 解决了ReLU的“死亡”问题,允许负值通过。
5. Parametric ReLU (PReLU)
-
公式:
,其中 α 是可学习的参数
-
输出范围: (-∞, ∞)
-
特点: 比Leaky ReLU更灵活,允许模型学习最佳的 α。
6. ELU (Exponential Linear Unit)
-
公式:
-
输出范围: (-α, ∞)
-
特点: 在负值区域有非零输出,有助于缓解梯度消失问题。
7. Softmax
-
公式:
-
输出范围: (0, 1)
-
特点: 常用于多分类问题的输出层,将输出转换为概率分布。
8. Swish
-
公式:
,其中
是Sigmoid函数
-
输出范围: (-∞, ∞)
-
特点: 结合了ReLU和Sigmoid的优点,表现优于ReLU。
9. GELU (Gaussian Error Linear Unit)
-
公式:
,其中
是标准正态分布的累积分布函数
-
输出范围: (-∞, ∞)
-
特点: 在Transformer模型中广泛使用,表现优于ReLU。
10. Softplus
-
公式:
-
输出范围: (0, ∞)
-
特点: 平滑版本的ReLU,但计算较慢。
11. Softsign
-
公式:
-
输出范围: (-1, 1)
-
特点: 类似于Tanh,但计算更简单。
12. Linear (恒等函数)
-
公式:
-
输出范围: (-∞, ∞)
-
特点: 无非线性变换,常用于回归问题的输出层。
13. Step (阶跃函数)
-
公式:
-
输出范围: {0, 1}
-
特点: 早期神经网络中使用,现已较少使用。
14. RBF (径向基函数)
-
公式:
-
输出范围: (0, 1]
-
特点: 常用于径向基函数网络。
15. Maxout
-
公式:
-
输出范围: (-∞, ∞)
-
特点: 通过学习多个线性函数的最大值来引入非线性。
16. SELU (Scaled Exponential Linear Unit)
-
公式:
-
输出范围: (-λα, ∞)
-
特点: 自归一化神经网络中使用,能够自动归一化激活值。
17. Mish
-
公式:
-
输出范围: (-∞, ∞)
-
特点: 结合了ReLU和Swish的优点,表现优于ReLU。
18. Hard Sigmoid
-
公式:
-
输出范围: [0, 1]
-
特点: Sigmoid的近似版本,计算更快。
19. Hard Tanh
-
公式:
-
输出范围: [-1, 1]
-
特点: Tanh的近似版本,计算更快。
20. LogSigmoid
-
公式:
-
输出范围: (-∞, 0)
-
特点: Sigmoid的对数版本,常用于损失函数。
21. Softmin
-
公式:
-
输出范围: (0, 1)
-
特点: 类似于Softmax,但用于最小化输出。
22. ArcTan (反正切函数)
-
公式:
-
输出范围: (-π/2, π/2)
-
特点: 平滑且对称,但计算较慢。
23. Bent Identity
-
公式:
-
输出范围: (-∞, ∞)
-
特点: 平滑且非线
以下是常见激活函数的图形、适用场景、优缺点对比的总结:
1. Sigmoid
-
适用场景:
-
二分类问题的输出层。
-
需要概率输出的场景。
-
-
优点:
-
输出平滑,适合概率解释。
-
-
缺点:
-
梯度消失问题严重。
-
输出不以0为中心,可能导致训练效率低。
-
2. Tanh (双曲正切)
-
适用场景:
-
隐藏层激活函数。
-
需要输出以0为中心的场景。
-
-
优点:
-
输出以0为中心,梯度更新更高效。
-
-
缺点:
-
梯度消失问题仍然存在。
-
3. ReLU (Rectified Linear Unit)
-
适用场景:
-
隐藏层的默认选择。
-
深度学习中的主流激活函数。
-
-
优点:
-
计算简单,梯度不会饱和。
-
缓解梯度消失问题。
-
-
缺点:
-
可能导致神经元“死亡”(输出恒为0)。
-
4. Leaky ReLU
-
适用场景:
-
需要解决ReLU“死亡”问题的场景。
-
-
优点:
-
缓解神经元“死亡”问题。
-
-
缺点:
-
需要手动选择 α 值。
-
5. Parametric ReLU (PReLU)
-
适用场景:
-
需要更灵活激活函数的场景。
-
-
优点:
-
自适应学习 α,表现优于Leaky ReLU。
-
-
缺点:
-
增加了计算复杂度。
-
6. ELU (Exponential Linear Unit)
-
适用场景:
-
需要缓解梯度消失和神经元“死亡”问题的场景。
-
-
优点:
-
在负值区域有非零输出,缓解梯度消失问题。
-
-
缺点:
-
计算较慢(涉及指数运算)。
-
7. Softmax
-
适用场景:
-
多分类问题的输出层。
-
-
优点:
-
输出为概率分布,适合分类任务。
-
-
缺点:
-
仅适用于输出层。
-
8. Swish
-
适用场景:
-
需要优于ReLU性能的场景。
-
-
优点:
-
表现优于ReLU。
-
-
缺点:
-
计算较慢(涉及Sigmoid运算)。
-
9. GELU (Gaussian Error Linear Unit)
-
适用场景:
-
Transformer模型中的默认选择。
-
-
优点:
-
表现优于ReLU。
-
-
缺点:
-
计算较慢(涉及正态分布)。
-
10. Softplus
-
适用场景:
-
需要平滑激活函数的场景。
-
-
优点:
-
平滑且可导。
-
-
缺点:
-
计算较慢。
-
11. Softsign
-
适用场景:
-
需要平滑激活函数的场景。
-
-
优点:
-
计算简单。
-
-
缺点:
-
梯度消失问题仍然存在。
-
12. Linear (恒等函数)
-
适用场景:
-
回归问题的输出层。
-
-
优点:
-
简单且无梯度消失问题。
-
-
缺点:
-
无非线性能力。
-
13. Step (阶跃函数)
-
适用场景:
-
早期神经网络。
-
-
优点:
-
简单。
-
-
缺点:
-
不可导,无法用于梯度下降。
-
14. RBF (径向基函数)
-
适用场景:
-
径向基函数网络。
-
-
优点:
-
适合局部特征提取。
-
-
缺点:
-
计算复杂。
-
15. Maxout
-
适用场景:
-
需要学习复杂非线性关系的场景。
-
-
优点:
-
强大的表达能力。
-
-
缺点:
-
计算复杂,参数多。
-
16. SELU (Scaled Exponential Linear Unit)
-
适用场景:
-
自归一化神经网络。
-
-
优点:
-
自动归一化激活值。
-
-
缺点:
-
需要特定初始化。
-
17. Mish
-
适用场景:
-
需要优于ReLU性能的场景。
-
-
优点:
-
表现优于ReLU。
-
-
缺点:
-
计算较慢。
-
18. Hard Sigmoid
-
适用场景:
-
需要快速计算Sigmoid的场景。
-
-
优点:
-
计算快。
-
-
缺点:
-
近似精度较低。
-
19. Hard Tanh
-
适用场景:
-
需要快速计算Tanh的场景。
-
-
优点:
-
计算快。
-
-
缺点:
-
近似精度较低。
-
20. LogSigmoid
-
适用场景:
-
需要计算对数概率的场景。
-
-
优点:
-
适合概率计算。
-
-
缺点:
-
计算较慢。
-
21. Softmin
-
适用场景:
-
需要最小化输出的场景。
-
-
优点:
-
适合特定任务。
-
-
缺点:
-
仅适用于特定场景。
-
22. ArcTan (反正切函数)
-
适用场景:
-
需要平滑激活函数的场景。
-
-
优点:
-
平滑且对称。
-
-
缺点:
-
计算较慢。
-
23. Bent Identity
-
适用场景:
-
需要平滑激活函数的场景。
-
-
优点:
-
平滑且非线性。
-
-
缺点:
-
计算较慢。
-
总结对比
激活函数 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Sigmoid | 输出平滑,适合概率解释 | 梯度消失,输出不以0为中心 | 二分类输出层 |
Tanh | 输出以0为中心 | 梯度消失 | 隐藏层 |
ReLU | 计算简单,缓解梯度消失 | 可能导致神经元“死亡” | 隐藏层(默认选择) |
Leaky ReLU | 缓解神经元“死亡”问题 | 需要手动选择 α | 隐藏层 |
PReLU | 自适应学习 α | 计算复杂 | 隐藏层 |
ELU | 缓解梯度消失和神经元“死亡”问题 | 计算较慢 | 隐藏层 |
Softmax | 输出为概率分布 | 仅适用于输出层 | 多分类输出层 |
Swish | 表现优于ReLU | 计算较慢 | 隐藏层 |
GELU | 表现优于ReLU | 计算较慢 | Transformer模型 |
Softplus | 平滑且可导 | 计算较慢 | 需要平滑激活函数的场景 |
Softsign | 计算简单 | 梯度消失 | 需要平滑激活函数的场景 |
Linear | 简单且无梯度消失问题 | 无非线性能力 | 回归输出层 |
Step | 简单 | 不可导 | 早期神经网络 |
RBF | 适合局部特征提取 | 计算复杂 | 径向基函数网络 |
Maxout | 强大的表达能力 | 计算复杂,参数多 | 需要复杂非线性关系的场景 |
SELU | 自动归一化激活值 | 需要特定初始化 | 自归一化神经网络 |
Mish | 表现优于ReLU | 计算较慢 | 隐藏层 |
Hard Sigmoid | 计算快 | 近似精度较低 | 需要快速计算Sigmoid的场景 |
Hard Tanh | 计算快 | 近似精度较低 | 需要快速计算Tanh的场景 |
LogSigmoid | 适合概率计算 | 计算较慢 | 需要计算对数概率的场景 |
Softmin | 适合特定任务 | 仅适用于特定场景 | 需要最小化输出的场景 |
ArcTan | 平滑且对称 | 计算较慢 | 需要平滑激活函数的场景 |
Bent Identity | 平滑且非线性 | 计算较慢 | 需要平滑激活函数的场景 |
总结
-
图像领域:ReLU、Leaky ReLU、PReLU、ELU、Swish、GELU、Mish(CNN、GAN)。
-
NLP领域:Tanh、ReLU、GELU、Swish、Softmax(RNN、Transformer)。
-
语音识别:ReLU、ELU、GELU(CNN、RNN)。
-
时间序列/金融:Sigmoid、Tanh、Softplus、Linear(DNN、RNN)。
-
推荐系统:Sigmoid、Softmax(DNN)。
根据任务需求选择合适的激活函数,通常ReLU及其变体是隐藏层的默认选择,Softmax用于多分类输出层,Sigmoid用于二分类输出层。