大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍深度学习中常见的激活函数。

在这里插入图片描述

热门专栏

机器学习

机器学习笔记合集

深度学习

深度学习笔记合集


激活函数

激活函数是核心组件之一,它赋予神经网络非线性能力,使得模型能够学习复杂的模式和函数映射。常见的激活函数有多种,每种激活函数都有其独特的特性、优缺点,并且往往是基于前一代激活函数的改进。

1) Sigmoid 函数

公式:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1 + e^{-x}} f(x)=1+ex1
输出范围:
0 < f ( x ) < 1 0 < f(x)< 1 0<f(x)<1

优点

  • 平滑输出:Sigmoid 函数将输入压缩到 [0, 1] 之间,输出可以解释为概率,特别适合用于二分类问题的输出层

缺点

  • 梯度消失问题:当输入过大或过小时,Sigmoid 的梯度接近 0,导致梯度消失,特别是在深层网络中,训练效率大大降低。
  • 非零中心:输出是非零中心的,这可能导致后续层的梯度更新不均衡。

适用场景

  • 用于 输出层,特别是二分类任务中,输出可以解释为概率值。
  • 在现代深层网络中,Sigmoid 逐渐被其他激活函数替代,因为它的梯度消失问题限制了其在深层网络中的表现。

2) Tanh 函数

公式:
f ( x ) = tanh ⁡ ( x ) = e x − e − x e x + e − x f(x)=\tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} f(x)=tanh(x)=ex+exexex
输出范围:
− 1 ≤ f ( x ) ≤ 1 -1 \leq f(x) \leq 1 1f(x)1

优点

  • 零中心输出:与 Sigmoid 函数相比,Tanh 函数的输出在 [-1, 1] 之间,输出接近 0 时,使得正负输入在更新时的方向性保持一致,收敛更快。
  • 平滑性:类似 Sigmoid,它具有平滑的输出,在二分类问题中能产生强有力的激活效果。

缺点

  • 梯度消失问题:尽管 Tanh 的输出范围比 Sigmoid 更宽,但仍然会出现梯度消失的问题,尤其是在输入值非常大或非常小时。

基于 Sigmoid 的改进

  • Tanh 是对 Sigmoid 函数的改进,通过将输出范围调整为[-1, 1],零中心输出,使得网络能够更好地处理负值,并避免部分梯度不均衡问题

适用场景

  • 隐藏层 中用于信号标准化和处理负数数据。特别适合需要中心化输出的场景,但在深层网络中仍存在梯度消失问题。

3) ReLU(Rectified Linear Unit)

公式:
f ( x ) = max ⁡ ( 0 , x ) f(x)=\max(0,x) f(x)=max(0,x)
输出范围:
0 ⩽ f ( x ) < + ∞ 0\leqslant f(x)<+\infty 0f(x)<+

优点

  • 计算简单:ReLU 是线性分段函数,计算简单高效,不需要复杂的指数计算。
  • 减轻梯度消失问题:由于 ReLU 在 x > 0 的区间上保持梯度恒定为 1,避免了梯度消失问题,尤其在深层网络中表现优异。
  • 稀疏性:ReLU 的输出是稀疏的,当输入为负值时输出为 0,这有助于网络在某些场景下提升效率。

缺点

  • 死亡神经元、Dying ReLU问题:当 ReLU 的输入为负值时,神经元的输出会一直为 0,导致某些神经元永远不会被激活,进而无法参与模型的学习。
  • 不对称性:ReLU 只对输入的正值产生作用,负值部分被置为 0,导致某些场景下信息丢失。

基于 Tanh 的改进

  • ReLU 是一种非线性激活函数,但在设计上简化了 Tanh 和 Sigmoid 的复杂性,同时减轻了梯度消失的问题。

适用场景

  • 深度神经网络的 隐藏层 中使用最广泛的激活函数,特别适用于卷积神经网络(CNN)和全连接网络(FCN)。

4) Leaky ReLU

公式:
f ( x ) = { x if  x > 0 α x if  x ⩽ 0 f(x)=\begin{cases}x & \text{if } x > 0\\\alpha x & \text{if } x\leqslant0\end{cases} f(x)={xαxif x>0if x0
其中 α \alpha α通常是一个小的正数(如0.01)。
输出范围:
− ∞ < f ( x ) < + ∞ -\infty < f(x)<+\infty <f(x)<+

优点

  • 解决死亡神经元、Dying ReLU 问题:Leaky ReLU 在 x<=0 的区间上引入了一个小的【固定的】负斜率,避免了 ReLU 函数的死神经元问题。
  • 梯度流动:通过允许负值的输入产生非零梯度,模型可以更好地更新权重。

缺点

  • 不一定总是比 ReLU 更好:虽然 Leaky ReLU 解决了死神经元的问题,但是引入了负值的输出,可能对模型效果有微小的影响,在某些任务中,它并不总是比 ReLU 有显著优势。

基于 ReLU 的改进

  • Leaky ReLU 是 ReLU 的改进版,通过为负值输入保留一个小的斜率来避免 ReLU 中的神经元失活问题

适用场景

  • 常用于深层神经网络中,需要避免死神经元问题时。Leaky ReLU 的负斜率可以帮助梯度有效传播,特别适合于 生成对抗网络(GANs)RNN 等需要更稳定梯度流的场景。

5) Parametric ReLU(PReLU)

公式:
f ( x ) = { x if  x > 0 α x if  x ≤ 0 f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases} f(x)={xαxif x>0if x0
其中 α \alpha α是可学习的参数。

输出范围:
( − ∞ , + ∞ ) (-\infty, +\infty) (,+)

  • 由于PReLU在正值区间输出 x x x,而在负值区间输出 α x \alpha x αx,且 α \alpha α可以是任何常数,因此PReLU的输出范围是从 − ∞ -\infty + ∞ +\infty +

优点

  • 可学习的斜率:与 Leaky ReLU 不同,PReLU 中的 α \alpha α 是通过训练学习的,而不是一个固定值,这使得模型能够自动调整负值部分的斜率。
  • 提升模型性能它可以动态适应每个神经元的输入,在一些深层网络中,比固定的 ReLU 或 Leaky ReLU 表现更好。

缺点

  • 增加了模型复杂度:PReLU 引入了额外的参数 α \alpha α,这增加了模型的复杂性和训练成本。

基于 Leaky ReLU 的改进

  • PReLU 是对 Leaky ReLU 的改进,使得负斜率 α \alpha α 不再固定,而是通过学习调整,以便模型在训练过程中更加灵活。

适用场景

  • 适用于 深度卷积神经网络(CNN)其他大型深度网络,当模型需要更大的灵活性和动态调整时,PReLU 提供了更优的性能。

6) ELU(Exponential Linear Unit)

公式:
f ( x ) = { x if  x > 0 α ( e x − 1 ) if  x ≤ 0 f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \leq 0 \end{cases} f(x)={xα(ex1)if x>0if x0
其中 α > 0 \alpha > 0 α>0是一个超参数,通常取 α = 1 \alpha = 1 α=1

输出范围:
( − α , + ∞ ) (-\alpha, +\infty) (α,+)

  • x > 0 x > 0 x>0时,ELU输出 x x x,所以输出范围可以趋近于 + ∞ +\infty +
  • x ≤ 0 x \leq 0 x0时,ELU的输出是 α ( e x − 1 ) \alpha(e^x - 1) α(ex1),因此下限是 − α -\alpha α,这取决于 α \alpha α的值(通常 α > 0 \alpha > 0 α>0)。

优点

  • 平滑负值处理:ELU 在 x<=0 时平滑输出,使得负值部分的输出更为柔和,解决了 ReLU 和 Leaky ReLU 在负值区间的突变问题。
  • 零中心输出:相比 ReLU,ELU 的输出更接近零,有助于梯度均衡更新,提升训练速度。

缺点

  • 计算复杂度高:ELU 的负值部分包含指数计算,比 ReLU 和 Leaky ReLU 的计算复杂度更高。

基于 ReLU 的改进

  • ELU 是对 ReLU 的改进,它解决了 ReLU 处理负值时的过度稀疏问题,并通过指数函数使负值部分更平滑

适用场景

  • ELU 常用于深层网络,如 卷积神经网络(CNN),尤其是需要更平滑输出的场景。它的平滑负值处理在一定程度上提高了模型的鲁棒性。

7) SELU(Scaled Exponential Linear Unit)

公式:
f ( x ) = λ { x if  x > 0 α ( e x − 1 ) if  x ≤ 0 f(x) = \lambda \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \leq 0 \end{cases} f(x)=λ{xα(ex1)if x>0if x0
其中:

  • α ≈ 1.67326 \alpha \approx 1.67326 α1.67326
  • λ ≈ 1.0507 \lambda \approx 1.0507 λ1.0507

输出范围:
( − ∞ , + ∞ ) (-\infty, +\infty) (,+)

优点

  • 自归一化:SELU 激活函数的最大特点是具有自归一化(self-normalizing)特性,它能够使得神经元的输出保持零均值和单位方差,即便经过多层网络传递后,仍然保持这种归一化效果。这一特性有助于避免梯度消失和梯度爆炸问题。
  • 消除梯度消失和爆炸:SELU 通过引入缩放因子 ( λ \lambda λ) 和 ( α \alpha α),在负值区域引入非线性并进行归一化处理,有效防止梯度消失和爆炸。
  • 无需额外正则化:SELU 可以减少或完全消除对批归一化(Batch Normalization)等正则化方法的依赖,在某些场景中表现非常稳定。

缺点

  • 依赖特定初始化和架构:SELU 要发挥最大效果,必须搭配 LeCun 正态初始化(LeCun Normal Initialization)和 Alpha Dropout。这种依赖特定初始化和架构的特性使得 SELU 在某些情况下的灵活性较差。
  • 对输入数据敏感:SELU 要求输入数据标准化,即数据需要经过归一化处理(零均值、单位方差),否则效果可能较差。

基于 ELU 的改进

  • SELU 是对 ELU 函数的改进,保留了 ELU 在负值区间的平滑处理,同时通过添加缩放因子使输出具有自归一化特性。这种自归一化特性使得神经网络更稳定,并且减轻了对批归一化等正则化手段的需求。

适用场景

  • 自归一化神经网络(SNNs):SELU 常用于自归一化神经网络,它可以减少梯度消失和爆炸问题,尤其适用于深层网络。
  • 适合需要高度稳定的训练过程,并且对批归一化等方法不适合的场景,如某些 序列生成生成对抗网络(GANs) 中,SELU 可以提高网络的训练稳定性。

8) Swish(SiLU)

公式:
f ( x ) = x 1 + e − x = x ⋅ σ ( x ) f(x) = \frac{x}{1 + e^{-x}} = x \cdot \sigma(x) f(x)=1+exx=xσ(x)
其中 σ ( x ) \sigma(x) σ(x)是Sigmoid函数。

优点

  • 平滑且非单调:Swish 是一个非单调的函数(即它既有递增区间,也有递减区间),这有助于捕捉复杂的非线性特性。
  • 更好的性能:Swish 在一些任务中表现出优于 ReLU 和其他常见激活函数的性能,尤其是在深层网络中。

缺点

  • 计算复杂度略高:相比 ReLU,Swish 由于引入了 Sigmoid 计算,其计算复杂度稍高。

基于 ReLU 的改进

  • Swish 是一种由 Google 提出的激活函数,它保留了 ReLU 的线性部分,但结合了 Sigmoid 的平滑性,特别适用于深层神经网络。

适用场景

  • 深度卷积神经网络(CNN)Transformer 等模型中,Swish 在一些任务(如图像分类、目标检测)中表现优异,特别适合深度模型。
  • SD模型的三个组件中都用到了,GSC部件中的S。

总结

激活函数 优点 缺点 适用场景
Sigmoid 平滑输出,适合二分类问题 梯度消失,非零中心 二分类输出层
Tanh 零中心输出,平滑 梯度消失 中间层或输出层
ReLU 计算简单,减轻梯度消失 死神经元问题,不对称输出 深层网络,特别是卷积神经网络(CNN)
Leaky ReLU 解决 ReLU 死神经元问题,保持梯度流动 不一定总是比 ReLU 更好 需要避免死神经元问题的深层网络
PReLU 可学习的负斜率,灵活性高 增加了模型的复杂度和训练时间 深度卷积网络等大型模型
ELU 平滑负值处理,零中心输出 计算复杂度高 需要平滑负值处理的深层网络
SELU 自归一化,减轻梯度消失和爆炸,减少对正则化的依赖 依赖特定的初始化和数据标准化 自归一化神经网络(SNN),深度网络
Swish 非单调,性能好 计算复杂度略高 深层网络,如图像分类和目标检测

每种激活函数有其适用场景,选择激活函数时,应根据任务的特性、模型结构以及计算资源综合考虑。

  • ReLU 和其变种在现代神经网络中应用广泛;
  • Swish 和 ELU 在某些深层网络中表现更优。
  • SELU 激活函数的最大优势在于其自归一化特性,适合深度神经网络的训练,尤其是在批归一化不适用的场景中表现优异。

热门专栏

机器学习

机器学习笔记合集

深度学习

深度学习笔记合集

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐