激活函数

激活函数(Activation Function)是神经网络中的关键组件,用于引入非线性特性,使神经网络能够学习和模拟复杂的函数关系。没有激活函数,神经网络无论有多少层,都只能表示线性函数,这大大限制了网络的表达能力。以下是几种常见的激活函数及其特点、优缺点和适用场景。

1. Sigmoid 激活函数

公式:
σ(x)=1+ex1
特点:
  • 输出范围在 (0, 1) 之间,可以将输入映射为概率值。
  • 是一个平滑的、可微的函数。
优点:
  • 输出值为概率形式,适用于二分类问题的输出层。
缺点:
  • 梯度消失问题:当输入值 x 的绝对值较大时,梯度接近于零,导致训练过程中的梯度更新缓慢。
  • 输出非零中心化:输出值范围为 (0, 1),可能导致后续层的输入分布偏离零,影响训练速度。
适用场景:
  • 主要用于二分类问题的输出层。

2. Tanh 激活函数

公式:
tanh(x)=ex+exexex
特点:
  • 输出范围在 (-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 x0
其中,α 是一个小的正数(如 0.01)。
特点:
  • 在输入值为负时,仍有一定的梯度,可以避免“死亡ReLU”问题。
优点:
  • 解决了 ReLU 的“死亡ReLU”问题。
  • 保留了 ReLU 的优点,如计算简单、缓解梯度消失。
缺点:
  • 参数 α 需要手动调整或通过学习得到。
  • 仍然存在输出非零中心化的问题。
适用场景:
  • 适用于需要避免神经元“死亡”的场景,尤其是在训练深层网络时。

5. PReLU(Parametric ReLU)激活函数

公式:
PReLU(x)={x,αx,if x>0if x0
其中,α 是一个可学习的参数。
特点:
  • 与 Leaky ReLU 类似,但 α 是通过训练自动学习的。
优点:
  • 自适应调整负区间的斜率,灵活性更高。
  • 解决了 ReLU 的“死亡ReLU”问题。
缺点:
  • 增加了模型的复杂度,需要学习额外的参数。
适用场景:
  • 适用于需要更灵活的负区间处理的场景。

6. ELU(Exponential Linear Unit)激活函数

公式:
ELU(x)={x,α(ex1),if x>0if x0
其中,α 是一个超参数(通常设为 1.0)。
特点:
  • 在输入值为负时,输出值接近零,有助于缓解梯度消失问题。
  • 输出值零中心化。
优点:
  • 输出值零中心化,有助于加速训练。
  • 在负区间引入非线性,缓解梯度消失问题。
缺点:
  • 计算复杂度较高,因为涉及指数运算。
  • 参数 α 需要手动调整。
适用场景:
  • 适用于需要零中心化输出的场景。

7. SELU(Scaled Exponential Linear Unit)激活函数

公式:
SELU(x)={λx,λα(ex1),if x>0if x0
其中,λ 和 α 是固定参数,通常取 λ1.0507 和 α1.6733。
特点:
  • 通过固定参数 λ 和 α,保证了输出的均值和方差在训练过程中保持稳定。
  • 输出值零中心化。
优点:
  • 自动归一化,有助于加速训练。
  • 输出值零中心化,缓解梯度消失问题。
缺点:
  • 计算复杂度较高,因为涉及指数运算。
  • 仅适用于全连接网络,不适用于卷积网络。
适用场景:
  • 适用于全连接网络,尤其是在需要自动归一化的场景中。

8. Softmax 激活函数

公式:
σi(z)=j=1nezjezi
特点:
将输入向量转换为概率分布,输出值总和为1。
适用于多分类问题。
优点:
输出值为概率形式,易于解释。
适用于多分类问题的输出层。
缺点:
计算复杂度较高,因为涉及指数运算和归一化。
对输入值的差异敏感,可能导致某些类别概率过高。
 
适用场景:
主要用于多分类问题的输出层。

 

9. Swish 激活函数
 
公式:Swish(x)=xσ(x)
其中,
σ(x) 是 Sigmoid 函数。
特点:
是一个自门控(self-gating)激活函数,结合了线性和非线性特性。
在输入值较大时接近线性,在输入值较小时接近零。
 
优点:
在某些任务中表现优于 ReLU,尤其是在深度网络中。
具有平滑的梯度,有助于缓解梯度消失问题。
 
缺点:
计算复杂度较高,因为涉及 Sigmoid 函数。
目前的研究仍在探索其最佳应用场景。
适用场景:
适用于需要平滑梯度的深度网络。

 

激活函数的选择
选择合适的激活函数取决于具体的任务和网络结构:
 
ReLU:适用于大多数隐藏层,尤其是卷积神经网络(CNN)。
 
Leaky ReLU / PReLU:适用于需要避免“死亡ReLU”问题的场景。
 
Tanh:适用于需要零中心化输出的隐藏层。
 
Softmax:适用于多分类问题的输出层。
 
ELU / SELU:适用于需要零中心化输出的场景,尤其是全连接网络。
Swish:适用于需要平滑梯度的深度网络。
在实际应用中,通常需要通过实验来选择最适合当前任务的激活函数。
posted @ 2025-03-18 13:36  yinghualeihenmei  阅读(156)  评论(0)    收藏  举报