在神经网络中,激活函数(Activation Function)是至关重要的组件。它们决定了一个神经元是否应该被激活,进而决定了模型的输出。激活函数将输入信号进行非线性变换,使得神经网络能够学习和表示复杂的非线性关系。下面是一些常见的激活函数及其特点:
1. Sigmoid 函数
Sigmoid 函数是一种 S 形曲线,将输入映射到 (0, 1) 之间。
-
函数形式:
Sigmoid ( x ) = 1 1 + e − x \text{Sigmoid}(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=1+e−x1 -
特点:
- 输出范围在 (0, 1) 之间,可以解释为概率。
- 适合用于二分类问题的输出层。
- 容易导致梯度消失问题,尤其是在深层网络中,因为当输入非常大或非常小时,梯度趋近于零。
-
应用场景:
- 早期的神经网络。
- 二分类问题的输出层。
2. Tanh 函数
Tanh(双曲正切)函数是一个 S 形曲线,类似于 Sigmoid,但输出范围在 (-1, 1) 之间。
-
函数形式:
Tanh ( x ) = e x − e − x e x + e − x \text{Tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} Tanh(x)=ex+e−xex−e−x -
特点:
- 输出范围在 (-1, 1) 之间。
- 比 Sigmoid 函数的梯度消失问题略少,但仍可能在深层网络中出现梯度消失。
- 零中心化输出有助于加速收敛。
-
应用场景:
- 通常用于隐藏层的激活函数。
3. ReLU 函数
ReLU(Rectified Linear Unit,修正线性单元)是目前最常用的激活函数之一。
-
函数形式:
ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x) -
特点:
- 简单且计算高效,只需取输入的最大值。
- 不存在上限输出,因此在正区域不会饱和,减少了梯度消失问题。
- 当输入小于零时,输出为零,可能导致“神经元死亡”(Dead Neurons)问题,尤其是在训练过程中某些神经元可能永远不会激活。
-
应用场景:
- 常用于深度学习模型的隐藏层。
4. Leaky ReLU 函数
Leaky ReLU 是 ReLU 的改进版本,旨在解决 ReLU 的“神经元死亡”问题。
-
函数形式:
Leaky ReLU ( x ) = { x if x > 0 α x if x ≤ 0 \text{Leaky ReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases} Leaky ReLU(x)={xαxif x>0if x≤0
其中, α \alpha α 是一个小常数(通常为 0.01)。 -
特点:
- 在负区域中仍有很小的斜率,使得负输入也有梯度传播。
- 减少了神经元死亡的问题。
-
应用场景:
- 可以作为 ReLU 的替代品,用于深层神经网络。
5. ELU 函数
ELU(Exponential Linear Unit)进一步改进了 ReLU 和 Leaky ReLU,旨在消除负区域的影响。
-
函数形式:
ELU ( x ) = { x if x > 0 α ( e x − 1 ) if x ≤ 0 \text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha (e^x - 1) & \text{if } x \leq 0 \end{cases} ELU(x)={xα(ex−1)if x>0if x≤0 -
特点:
- 负区域呈指数衰减,而不是线性。
- 零中心化输出,加快学习收敛。
- 保留了 ReLU 的优点,并在负区域提供更好的梯度流动。
-
应用场景:
- 需要比 Leaky ReLU 更强的负值处理能力的场景。
6. Swish 函数
Swish 是一种由 Google 提出的激活函数,通常比 ReLU 表现更好。
-
函数形式:
Swish ( x ) = x ⋅ Sigmoid ( x ) \text{Swish}(x) = x \cdot \text{Sigmoid}(x) Swish(x)=x⋅Sigmoid(x) -
特点:
- 非线性激活函数,具有平滑和非单调特性。
- 在许多任务中表现优于 ReLU。
-
应用场景:
- 现代深度学习模型中,尤其是需要更复杂的激活函数的任务。
7. Softmax 函数
Softmax 函数将一组输入值转换为概率分布,是分类任务中常用的激活函数。
-
函数形式:
Softmax ( x i ) = e x i ∑ j = 1 n e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}} Softmax(xi)=∑j=1nexjexi -
特点:
- 将多分类任务的输出层结果归一化为概率分布。
- 输出的每个值都在 (0, 1) 之间,并且所有输出值的和为 1。
-
应用场景:
- 多分类问题的输出层。
激活函数的选择
- ReLU:大多数情况下的首选激活函数,适用于深度神经网络的隐藏层。
- Leaky ReLU / ELU / Swish:当 ReLU 的“神经元死亡”问题显著时,可以选择这些改进的版本。
- Sigmoid / Tanh:多用于二分类任务的输出层或浅层网络,现代深度网络中较少使用。
- Softmax:专门用于多分类问题的输出层。
总结
激活函数在神经网络中扮演着至关重要的角色,不同的激活函数适用于不同类型的任务。选择合适的激活函数,可以大大提高模型的性能和训练效率。