激活函数在神经网络中的作用是引入非线性特征,使得网络可以拟合和表达更复杂的数据关系。它通过对输入进行非线性变换,让每一层的输出既能反映输入特征,又能传递重要信息,以进行梯度更新。以下是关于常用激活函数的详细讲解。
1. Sigmoid(S型激活函数)
Sigmoid 函数通过将输入映射到 (0,1) 之间,从而将输出的数值转化为概率,特别适合于二分类问题的输出层。
公式:
- 输出范围:(0,1)
- 导数:
优点
- Sigmoid 的输出可以解释为概率值,因此适合二分类问题的输出层。
- 在概率相关的问题上,尤其是逻辑回归和简单的前馈网络中,Sigmoid 具有良好的表现。
缺点
- 梯度消失:在输入非常大或非常小的时候,梯度会趋近于 0,导致反向传播时的梯度更新十分缓慢。这会使得模型训练速度慢,并且在深层网络中效果较差。
- 输出非零均值:Sigmoid 的输出总是大于 0,因此可能会引入偏移,使得后续层的输入累积较大的偏移,导致学习过程不稳定。
使用场景
- 二分类问题的输出层,因为输出值在 0 到 1 之间且可以解释为概率。
- 通常不建议在深层网络的隐藏层中使用 Sigmoid,原因是容易造成梯度消失问题。
激活函数:在隐藏层中,Sigmoid 将输入值映射到 (0,1)(0, 1)(0,1) 之间的范围,从而引入非线性。这种特性使神经网络能够学习和逼近复杂的关系。
二分类问题的输出层:在二分类任务中,Sigmoid 常用作输出层的激活函数,因为其输出是一个概率值,代表模型预测为正类的概率。二分类模型的最终输出可以通过设置一个阈值(如 0.5)来确定样本属于哪个类别
2. Tanh(双曲正切函数)
Tanh 函数是 Sigmoid 的平移和缩放版本。它将输入映射到 (−1,1) 的区间,从而使得输出均值为 0。
公式:
- 输出范围:(−1,1)(-1, 1)(−1,1)
- 导数:
- 相比于 Sigmoid,Tanh 的输出均值为 0,更适合用于隐藏层,从而使得模型在反向传播时具有更好的梯度流动性。
- 在梯度消失问题上稍优于 Sigmoid,因为 Tanh 的输出在 -1 和 1 之间波动,产生的梯度值更大。
缺点
- 梯度消失:在输入绝对值较大时,Tanh 的导数值接近于 0,仍会导致梯度消失问题,特别是在深度网络中。
- 相较于 ReLU,Tanh 的计算成本更高。
使用场景
- Tanh 适合在浅层网络或单个隐藏层中使用,因为它在对称的输出范围和零均值方面表现良好。
- 在需要处理负数输出的任务中,Tanh 比 Sigmoid 更合适。
3. ReLU(Rectified Linear Unit,修正线性单元)
ReLU 函数引入了非线性特性,同时保持了计算效率。它仅保留正值输入,负值部分则输出 0。
公式:
- 输出范围:[0,+∞)
- 导数:
优点
- 减少梯度消失:ReLU 只对正值激活,有效地解决了梯度消失问题,因此非常适合深层网络。
- 计算效率高:ReLU 的计算过程非常简单,只需取最大值,训练速度快。
- 稀疏激活:在负数区域输出 0,很多神经元的激活值为 0,有助于增加网络的稀疏性,降低模型的复杂度。
缺点
- 死亡 ReLU 问题:输入小于 0 时,梯度恒为 0,导致神经元“死亡”,即神经元权重不再更新,无法参与训练。
使用场景
- 深层卷积神经网络(CNN)中的隐藏层。
- 由于计算简单,常用于需要较快训练速度的网络。
4. Leaky ReLU
Leaky ReLU 是 ReLU 的改进版本,通过引入负值区域的非零梯度来避免死亡 ReLU 问题。
公式:
其中 α 是一个小于 1 的常数(通常取值 0.01)。
优点
- 减少死亡 ReLU 问题:在负数区域保留一定的梯度,避免神经元完全不激活的问题。
- 与 ReLU 类似,具有较高的计算效率。
缺点
- 固定的 α 值可能不适合所有任务,不如 PReLU 灵活。
使用场景
- 深度网络中使用,尤其是在发现 ReLU 神经元死亡情况严重时。
- 在希望输出分布不偏向某一方时(如负值数据较多),Leaky ReLU 是一个良好选择。
5. Parametric ReLU(PReLU,带参数的 ReLU)
PReLU 是 Leaky ReLU 的扩展版本,其中负值部分的斜率 α\alphaα 可以在训练过程中进行优化。
公式:
其中 α是可学习参数。
优点
- 适应性强:α 可以根据不同的任务和数据自动调整,有更好的灵活性和表达能力。
- 减少死亡 ReLU 问题:适合训练深层神经网络,尤其在大规模数据上效果良好。
缺点
- 增加了一些计算复杂度,因为需要优化 α 参数。
使用场景
- 大规模数据集、深层网络,尤其适用于存在多样化数据分布的任务。
6. ELU(Exponential Linear Unit,指数线性单元)
ELU 在负数区域使用指数函数,使得负输出更接近 0,从而减少偏移效应。
公式:
其中 α 通常为 1。
优点
- 负输出让输出均值接近于 0,缓解了梯度消失问题。
- 相比于 ReLU,更平滑地处理负值,提高网络的鲁棒性。
缺点
- 计算复杂度较高,训练速度稍慢于 ReLU。
使用场景
- 用于较深的神经网络,特别适合深度卷积网络,能够在梯度消失的情况下保持良好的梯度更新。
7. Swish(谷歌提出的一种激活函数)
Swish 是 Sigmoid 和输入相乘的结果,提供了平滑性和对负数的保留特性。
公式:
优点
- 更平滑的激活过程,提高了模型的非线性表达能力。
- 在很多任务上,Swish 比 ReLU 表现更好。
缺点
- 计算复杂度较高,因为包含了 Sigmoid 函数。
使用场景
- 高度非线性的任务(如图像分类和语音识别)。
说明:Softmax(用于多分类任务的输出层)
Softmax 函数用于将一组实数值转换为概率分布,其输出总和为 1。
公式:
优点
- 将输出解释为各类别的概率,适合多分类问题。
缺点
- 不适合隐藏层,因其输出总和为 1,并且会引入较大的计算量。
使用场景
- 神经网络的最后一层,适合于多分类任务的输出。
Softmax 与激活函数的区别:
与 ReLU、Sigmoid、Tanh 等常用于隐藏层的激活函数不同,Softmax 主要用于输出层,因为它将数值映射为概率分布。传统激活函数通常用于引入非线性,帮助网络学习复杂特征;而 Softmax 的主要作用是生成可以解释为类别概率的输出。