激活函数
激活函数(Activation Function)是神经网络中的关键组件,用于引入非线性特性,使神经网络能够学习和模拟复杂的函数关系。没有激活函数,神经网络无论有多少层,都只能表示线性函数,这大大限制了网络的表达能力。以下是几种常见的激活函数及其特点、优缺点和适用场景。
1. Sigmoid 激活函数
公式:
σ(x)=1+e−x1
特点:
-
输出范围在 (0, 1) 之间,可以将输入映射为概率值。
-
是一个平滑的、可微的函数。
优点:
-
输出值为概率形式,适用于二分类问题的输出层。
缺点:
-
梯度消失问题:当输入值 x 的绝对值较大时,梯度接近于零,导致训练过程中的梯度更新缓慢。
-
输出非零中心化:输出值范围为 (0, 1),可能导致后续层的输入分布偏离零,影响训练速度。
适用场景:
-
主要用于二分类问题的输出层。
2. Tanh 激活函数
公式:
tanh(x)=ex+e−xex−e−x
特点:
-
输出范围在 (-1, 1) 之间,是零中心化的。
-
也是一种平滑的、可微的函数。
优点:
-
输出值零中心化,有助于加速训练过程。
-
比 Sigmoid 函数更不易饱和(梯度消失)。
缺点:
-
在输入值的绝对值较大时,仍然会遇到梯度消失问题。
适用场景:
-
常用于隐藏层,尤其是在需要零中心化输出的场景中。
3. ReLU(Rectified Linear Unit)激活函数
公式:
ReLU(x)=max(0,x)
特点:
-
当输入值大于零时,输出为输入值;当输入值小于零时,输出为零。
-
是一个分段线性函数,计算简单。
优点:
-
缓解梯度消失问题:在输入值为正时,梯度为1,不会出现梯度消失。
-
计算效率高:只涉及简单的阈值操作,计算速度快。
-
稀疏激活:输出中大部分为零,有助于减少计算量和模型复杂度。
缺点:
-
死亡ReLU问题:当输入值为负时,梯度为零,可能导致神经元“死亡”,不再激活。
-
输出非零中心化:输出值范围为 [0, +∞),可能导致后续层的输入分布偏离零。
适用场景:
-
广泛用于隐藏层,是目前最常用的激活函数之一。
4. Leaky ReLU 激活函数
公式:
Leaky ReLU(x)={x,αx,if x>0if x≤0
其中,α 是一个小的正数(如 0.01)。
特点:
-
在输入值为负时,仍有一定的梯度,可以避免“死亡ReLU”问题。
优点:
-
解决了 ReLU 的“死亡ReLU”问题。
-
保留了 ReLU 的优点,如计算简单、缓解梯度消失。
缺点:
-
参数 α 需要手动调整或通过学习得到。
-
仍然存在输出非零中心化的问题。
适用场景:
-
适用于需要避免神经元“死亡”的场景,尤其是在训练深层网络时。
5. PReLU(Parametric ReLU)激活函数
公式:
PReLU(x)={x,αx,