简单记录学习~
激活函数(Activation Function)是神经网络中用于增加非线性的关键部分,它决定了神经网络是否能够学习和表示复杂的函数。激活函数帮助网络学习输入与输出之间的复杂关系,常用的激活函数包括 Sigmoid、Tanh、ReLU 及其变种(如 Leaky ReLU、ELU、SELU 等),每种激活函数都有其特点和适用场景。
1. Sigmoid 激活函数
Sigmoid 函数将输入映射到 [0, 1] 区间,公式如下:
特点:
- 输出范围:0 到 1,适用于二分类任务的输出层。
- 它具有平滑的梯度,可以提供稳定的学习过程。
缺点:
- 梯度消失问题:当输入值非常大或非常小的时候,Sigmoid 的梯度会变得非常小,导致梯度消失,从而影响模型的学习。
- 输出非零中心:当输入接近 0 时,Sigmoid 输出接近 0.5,导致梯度更新不平衡。
适用场景:
- 二分类问题的输出层。
2. Tanh 激活函数
Tanh(双曲正切)是 Sigmoid 的一个变种,输出范围为 [-1, 1]。公式如下:
特点:
- 输出范围:-1 到 1,比 Sigmoid 更适合神经网络训练,梯度更大。
- 也有平滑的导数,使得反向传播时可以传递梯度。
缺点:
- 梯度消失问题:虽然 Tanh 的输出范围是 [-1, 1],但是当输入过大或过小时,梯度也会变得非常小。
- 非零中心:对于非常大的或非常小的输入值,Tanh 的输出会趋近于 1 或 -1,仍然存在梯度消失的风险。
适用场景:
- 在一些神经网络中,尤其是 RNN(循环神经网络)中常用,尤其是对于需要输出范围在 [-1, 1] 的问题。
3. ReLU 激活函数
ReLU(Rectified Linear Unit,修正线性单元)是最常用的激活函数之一。公式如下:
特点:
- 输出范围:[0, ∞),非常简单且计算效率高。
- 非线性:可以有效地处理梯度消失问题,使得网络可以更深层次地训练。
缺点:
- Dying ReLU 问题:如果 ReLU 函数的输入值总是负数,那么该神经元将始终输出零,无法更新权重,导致该神经元“死亡”。
- 不具有输出的平滑性。
适用场景:
- 在深度神经网络、卷积神经网络(CNN)中广泛使用,尤其是当网络深度较大时,ReLU 带来的优势非常明显。
4. Leaky ReLU 激活函数
Leaky ReLU 是 ReLU 的一种改进,旨在解决 Dying ReLU 问题。公式如下:
其中, 是一个很小的常数,通常设为 0.01。
特点:
- 允许负数值通过,即使对于负值也有一定的梯度(
)。
- 解决了 Dying ReLU 问题。
缺点:
- 仍然存在 ReLU 的其他问题,如训练时可能会出现梯度消失。
适用场景:
- 适用于深度神经网络,尤其是在使用 ReLU 时出现 Dying ReLU 问题时。
5. ELU 激活函数
ELU(Exponential Linear Unit)是另一种常见的 ReLU 改进版,公式如下:
其中 是一个常数,通常设为 1。
特点:
- 输出范围:
,对于负值区域,ELU 输出是指数形式的平滑函数。
- 解决了 ReLU 中的“死神经元”问题(Dying ReLU),并且能够保持负值信息。
缺点:
- 计算较复杂,可能影响运行速度。
适用场景:
- 适用于深度神经网络,尤其是需要避免 ReLU 死神经元问题的场景。
6. SELU 激活函数
SELU(Scaled Exponential Linear Unit)是 ELU 的一个变种,通过自我归一化的方式进一步提高了模型的表现。公式如下:
其中, 和
是常数。通常,
和
。
特点:
- 自我归一化:能够自动处理激活值的范围,使得神经网络能够保持均值和方差恒定。
- 具有 ELU 的优点,并且在特定的初始化条件下表现更好。
缺点:
- 依赖于网络的初始化方法,需要特定的条件才能实现最优效果。
适用场景:
- 适用于深度神经网络,尤其是在使用特定初始化策略时(例如,使用 He 初始化)。
7. Softmax 激活函数
Softmax 激活函数常用于分类问题的输出层,尤其是多分类问题。公式如下:
其中, 是输入向量的第
个元素,
遍历所有输出。
特点:
- 输出范围:所有类别的概率之和为 1,适合多分类问题。
- 将输入映射到 [0, 1] 区间,表示每个类别的概率。
适用场景:
- 多分类问题的输出层。
激活函数比较
激活函数 | 输出范围 | 计算复杂度 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|---|
Sigmoid | (0, 1) | 低 | 平滑,适合概率预测 | 梯度消失,输出非零中心 | 二分类任务的输出层 |
Tanh | (-1, 1) | 中 | 平滑,输出零中心,梯度较大 | 梯度消失 | 二分类任务,RNN等 |
ReLU | [0, ∞) | 低 | 非线性,解决了梯度消失问题 | Dying ReLU问题 | 深度神经网络,卷积神经网络 |
Leaky ReLU | (-∞, ∞) | 低 | 解决了Dying ReLU问题 | 梯度较小时训练速度变慢 | 深度神经网络,解决ReLU死神经元问题 |
ELU | (-α, ∞) | 中 | 解决死神经元问题,平滑 | 计算复杂,运行慢 | 深度神经网络,尤其是需要避免ReLU死神经元 |
SELU | (-α, ∞) | 中 | 自我归一化,适应深度网络 | 需要特定的初始化方法 | 深度神经网络,特定初始化条件下 |
Softmax | (0, 1) | 中 | 多分类输出,输出为概率 | 计算复杂,需要处理数值溢出问题 | 多分类问题的输出层 |