激活函数在神经网络中起着至关重要的作用,它们决定了神经元的输出是否应该被激活以及如何非线性地转换输入信号。不同的激活函数适用于不同的场景,选择合适的激活函数可以显著影响模型的性能和训练效率。以下是三种常见的激活函数:Sigmoid 、Tanh 和 ReLU 的详细介绍。
1. Sigmoid 激活函数
公式:
图像:
特点:
- 输出范围:(0, 1),将输入压缩到0到1之间。
- 用途:常用于二分类问题中的输出层,因为它的输出可以解释为概率值(0表示负类,1表示正类)。
- 优点 :
- 输出具有良好的可解释性,适合用于需要概率输出的任务。
- 缺点 :
- 梯度消失问题:当输入较大或较小时,Sigmoid 函数的导数接近于0,导致反向传播时梯度几乎为零,使得权重更新非常缓慢,甚至停止更新。这在深度网络中尤为严重。
- 非零中心化:Sigmoid 函数的输出不是以0为中心的,这会导致后续层的权重更新方向不一致,影响训练效率。
应用场景:
- 二分类问题的输出层。
- 逻辑回归模型。
2. Tanh (双曲正切) 激活函数
公式:
图像:
特点:
- 输出范围:(-1, 1),将输入压缩到-1到1之间。
- 用途:常用于隐藏层,尤其是在早期的神经网络中。它比 Sigmoid 更加对称,且输出是以0为中心的。
- 优点 :
- 零中心化:Tanh 的输出是零中心化的,这有助于加速收敛,因为后续层的权重更新方向更加一致。
- 更好的梯度传播:相比 Sigmoid,Tanh 在输入接近0时的导数更大,因此梯度消失问题稍微缓解。
- 缺点 :
- 仍然存在梯度消失问题:虽然比 Sigmoid 稍好,但在输入较大或较小时,Tanh 的导数也会接近0,导致梯度消失。
应用场景:
- 隐藏层,尤其是浅层神经网络。
- RNN(循环神经网络)中,Tanh 是常用的激活函数,因为它可以帮助控制信息的流动。
3. ReLU (Rectified Linear Unit) 激活函数
公式:
图像:
特点:
- 输出范围:[0, +∞),当输入为正时,输出等于输入;当输入为负时,输出为0。
- 用途:广泛应用于现代深度学习模型的隐藏层,尤其是在卷积神经网络(CNN)和全连接网络中。
- 优点 :
- 避免梯度消失问题:对于正输入,ReLU 的导数为1,因此不会出现梯度消失问题。这使得 ReLU 在深层网络中表现良好,能够加速训练。
- 计算简单:ReLU 的计算非常简单,只需判断输入是否大于0,因此计算效率高。
- 稀疏性:ReLU 会将负输入直接设为0,这有助于引入稀疏性,减少模型的复杂度。
- 缺点 :
- 死亡 ReLU 问题:当输入为负时,ReLU 的导数为0,导致该神经元在反向传播时不再更新权重。如果大量神经元进入"死亡"状态,模型可能会失去表达能力。为了解决这个问题,通常使用改进版的 ReLU,如 Leaky ReLU 或 Parametric ReLU。
- 非零中心化:ReLU 的输出是非零中心化的,这可能会导致后续层的权重更新方向不一致。
改进版本:
- Leaky ReLU :为了解决死亡 ReLU 问题,Leaky ReLU 在负输入时赋予一个很小的斜率(通常是0.01),而不是直接设为0。
[
\text{Leaky ReLU}(x) = \max(\alpha x, x), \quad \text{其中} ; 0 < \alpha \ll 1
] - Parametric ReLU (PReLU) :Leaky ReLU 的斜率是固定的,而 PReLU 的斜率是一个可学习的参数,可以在训练过程中自动调整。
[
\text{PReLU}(x) = \max(\alpha_i x, x), \quad \text{其中} ; \alpha_i ; \text{是每个神经元的可学习参数}
] - Exponential Linear Unit (ELU) :ELU 在负输入时使用指数函数来平滑过渡,避免了死亡 ReLU 问题,并且输出是零中心化的。
[
\text{ELU}(x) =
\begin{cases}
x & \text{if} ; x > 0 \
\alpha (e^x - 1) & \text{if} ; x \leq 0
\end{cases}
]
应用场景:
- 隐藏层,尤其是深度神经网络(DNN)、卷积神经网络(CNN)和生成对抗网络(GAN)。
- 由于其出色的性能和计算效率,ReLU 及其变体已成为现代深度学习模型中最常用的激活函数之一。
总结
激活函数 | 输出范围 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|
Sigmoid | (0, 1) | 输出具有概率意义 | 梯度消失,非零中心化 | 二分类问题的输出层,逻辑回归 |
Tanh | (-1, 1) | 零中心化,更好的梯度传播 | 梯度消失 | 隐藏层,RNN 中 |
ReLU | [0, +∞) | 避免梯度消失,计算简单,引入稀疏性 | 死亡 ReLU 问题,非零中心化 | 隐藏层,DNN、CNN、GAN |
选择激活函数的建议:
- Sigmoid:主要用于二分类问题的输出层,尤其是在需要概率输出的情况下。
- Tanh:适用于隐藏层,尤其是浅层网络或 RNN 中。它比 Sigmoid 更加对称,有助于加速收敛。
- ReLU:是现代深度学习模型中最常用的激活函数,尤其适用于隐藏层。如果你遇到死亡 ReLU 问题,可以尝试使用 Leaky ReLU 或 PReLU。