【ML】前 9 个最受欢迎的激活函数以及何时使用它们

  大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流

个人主页-Sonhhxg_柒的博客_CSDN博客 

欢迎各位→点赞 + 收藏⭐️ + 留言​

系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟

文章目录

神经网络中最常见的 9 种激活函数

1.Sigmoid函数

Sigmoid 函数的属性

Sigmoid 函数的局限性

2. ReLU函数

ReLU 激活函数的属性

ReLU 的局限性

3.双曲正切(tanh)函数

Tanh 激活函数的属性

4.Softmax激活函数

Softmax 激活函数的属性

5.Leaky ReLU激活函数

Leaky ReLU 激活函数的属性

6. 参数ReLU(PReLU)激活函数

PReLU 的性质

7. 指数线性单元(ELU)激活函数

ELU 激活函数的属性

8. 高斯误差线性单元(GELU)激活函数

GELU 激活函数的属性

9. 线性激活函数

结论


激活函数采用加权输入的总和并应用变换来产生输出。然后该输出被传递到下一层或用作网络的最终输出。激活函数是一个重要的神经网络组件,使其能够学习复杂的模式并做出非线性决策。

【ML】前 9 个最受欢迎的激活函数以及何时使用它们_第1张图片

激活函数是一种数学函数,它将非线性引入神经元或神经网络层的输出。

神经网络中最常见的 9 种激活函数

1.Sigmoid函数

sigmoid函数是神经网络中常用的激活函数。平滑的 S 形曲线将输入映射到 0 到 1 之间的值,这对于二元分类问题或当我们想要表示概率时非常有用。

sigmoid 函数定义为:

f(x) = 1 / (1 + e^(-x))

在此等式中,x表示神经元或神经元层的输入的加权和。分母中的指数项确保输出始终在 0 和 1 之间。

【ML】前 9 个最受欢迎的激活函数以及何时使用它们_第2张图片

Sigmoid函数

Sigmoid 函数的属性

  1. 输出范围:sigmoid函数的输出以0和1为界。当输入较大且为正时,输出接近1。同样,当输入较大且为负时,输出接近0。
  2. 非线性:  Sigmoid 函数给网络的决策过程引入了非线性。这种非线性特性允许神经网络对输入和输出之间的复杂关系进行建模。
  3. 平滑性:  Sigmoid 函数是一种平滑且可微分的函数,有助于在神经网络训练过程中实现高效的基于梯度的优化算法。

Sigmoid 函数的局限性

  1. 梯度消失: 对于较大的输入值,sigmoid 函数的梯度变得非常小,导致梯度消失的问题。这可能会阻碍学习过程,尤其是在深度神经网络中。
  2. 输出饱和:  sigmoid 函数在极值(0 和 1)处饱和,这意味着当输入非常正或非常负时,输出分别变得接近 0 或 1。这种饱和会减慢学习速度,因为网络对输入变化变得不太敏感。

由于这些限制,ReLU、Leaky ReLU 等替代激活函数及其变体越来越受欢迎,尤其是在深度学习架构中。然而,sigmoid函数仍然在特定场景中找到应用,例如二元分类模型的输出层或当目标是获取概率时。

2. ReLU函数

ReLU是神经网络中广泛使用的激活函数,特别是深度学习模型。它以其简单性和有效克服其他激活函数(如 sigmoid 和 tanh 函数)的局限性而闻名。

ReLU函数定义如下:

f(x) = max(0, x)

在此等式中,x表示神经元或神经元层的输入的加权和。ReLU 函数对于负输入返回 0,对于正输入返回输入值本身。

ReLU 激活函数的属性

  1. 非线性:与其他激活函数一样,ReLU 向网络引入非线性,使其能够学习和建模数据中的复杂关系。它允许神经网络逼近任何非线性函数。
  2. 稀疏性:  ReLU 鼓励神经网络的稀疏性。由于它对于负输入输出 0,因此 ReLU 神经元对于特定输入可以完全不活动。这种稀疏性可以带来更高效、更简洁的数据表示。
  3. 避免梯度消失:  ReLU 有助于缓解深度神经网络中遇到的梯度消失问题。ReLU 的导数为 0 或 1,这可以防止梯度随着网络变深而消失。此属性有利于更有效的反向传播和更快的训练。
  4. 计算效率: 与 sigmoid 和 tanh 等更复杂的任务相比,ReLU 函数的计算效率更高。它涉及简单的阈值处理并避免昂贵的指数计算。

ReLU 的局限性

  1. 死亡神经元:ReLU 神经元有时会变得“死亡”或无响应,其中神经元的输出对于任何输入始终为 0。一旦神经元死亡,它就不再对学习过程做出贡献。这个问题可以使用 ReLU 的变体来解决,例如 Leaky ReLU 或 Parametric ReLU (PReLU)。
  2. 输出饱和:  ReLU 在上限饱和,输出任何正输入的输入值。这种饱和会导致神经元失去对大正值的敏感性,限制其从这些输入中进一步学习的能力。

由于其简单性和有效性,ReLU 广泛应用于深度学习架构,特别是卷积神经网络(CNN)。它在各种计算机视觉和自然语言处理任务中表现出色。

3.双曲正切(tanh)函数

双曲正切 (tanh) 函数是神经网络中常用的激活函数。它与 sigmoid 函数类似,但以 0 为中心,范围在 -1 到 1 之间。 tanh 函数定义如下:

f(x) = (e^x - e^(-x)) / (e^x + e^(-x))

在此等式中,“x”表示神经元或神经元层的输入的加权和。

Tanh 激活函数的属性

  1. 非线性:与其他激活函数一样,tanh 向网络引入了非线性,使其能够学习和建模数据中的复杂关系。它允许神经网络逼近任何非线性函数。
  2. 对称性:  tanh 函数关于原点 (0, 0) 对称。它针对负输入产生负输出,针对正输入产生正输出,从而形成平滑的 S 形曲线。
  3. 输出范围:tanh函数的输出在-1和1之间。当输入较大且为正时,输出接近1。同样,当输入较大且为负时,输出接近-1。
  4. 以零为中心:与以 0.5 为中心的 sigmoid 函数不同,tanh 函数以 0 为中心。这在某些情况下可能是有利的,例如当输入数据以零为中心或当模型受益于负激活和正激活时。

tanh 函数与 sigmoid 函数有一些相似之处,但它具有更陡的梯度,这使得它对输入的变化更加敏感。然而,与 sigmoid 函数一样,对于非常大/小的输入值,它仍然会遇到梯度消失问题。

tanh 函数用于各种神经网络架构,特别是循环神经网络 (RNN) 和长短期记忆网络(LSTM),其零中心特性和非线性特性在这些网络中非常有用。然而,近年来,ReLU 及其变体的受欢迎程度有所增加,主要是因为它们的简单性和在深度学习模型中的更好性能。

4.Softmax激活函数

Softmax函数是一种常用于多类分类问题的神经网络输出层的激活函数。它将实数向量作为输入,并将其归一化为概率分布,其中概率之和等于 1。Softmax 函数定义如下:

f(x_i) = e^(x_i) / sum(e^(x_j)) for all j

在此等式中,x_i表示特定类 的输入值ix_j表示所有类的输入值。

Softmax 激活函数的属性

  1. 概率分布:Softmax函数将输入值转换为概率分布,其中每个值代表相应类别的概率。输出值为正且总和为 1,使其适用于多类分类问题。
  2. 对输入差异的敏感性:  Softmax 函数放大了输入值之间的差异,这意味着较大的输入值将对应较高的概率。此属性允许神经网络对高分类别做出更自信的预测。
  3. 可微性:  Softmax 函数是可微的,这对于神经网络训练过程中使用的反向传播和基于梯度的优化算法至关重要。

Softmax 函数通常用于多类分类任务的神经网络的最后一层,其目标是将输入分配给几个可能的类之一。Softmax函数输出的概率最高的类通常被认为是预测类。

值得注意的是,Softmax 函数对异常值和大输入值很敏感,这可能会导致数值不稳定。在应用 Softmax 函数之前,可以通过从每个输入向量元素中减去最大输入值(称为“logit 移位”或“logit 缩放”)来缓解此问题。这有助于防止数值上溢或下溢。

总体而言,Softmax 函数是多类分类任务中的基本工具,使神经网络能够对其预测提供概率解释。

5.Leaky ReLU激活函数

Leaky ReLU(整流线性单元)是 ReLU 激活函数的一种变体,可解决“dead ReLU”问题。Leaky ReLU 为负输入引入了一个小斜率,允许神经元即使在输入为负时也能有非零输出。这有助于减少常规 ReLU 中的“死亡”或无响应神经元。

Leaky ReLU 函数定义为:

f(x) = max(ax, x)

在这个方程中,x表示一个神经元或一层神经元的输入,并且a是一个小的正常数(通常是一个小分数,如 0.01)。如果x为正,则该函数的行为类似于常规 ReLU,输出x。但是,如果x为负数,则函数返回ax而不是 0。

Leaky ReLU 激活函数的属性

  1. 非线性:与 ReLU 类似,Leaky ReLU 向网络引入非线性,使其能够学习和建模数据中的复杂关系。
  2. 避免死亡神经元: 为负输入引入非零斜率有助于缓解常规 ReLU 中遇到的死亡或无响应神经元问题。在正斜率较小的情况下,即使接收负输入的神经元仍然可以对学习过程做出贡献。
  3. 连续和分段线性:  Leaky ReLU 函数是连续和分段线性的,这意味着它对所有值都有定义的导数。此属性有利于训练过程中的反向传播和高效的基于梯度的优化算法。

ReLU 和 Leaky ReLU 的选择取决于具体问题和数据的特征。当神经元死亡的风险很高或者需要通过允许负值来实现更多样化的激活范围时,Leaky ReLU 通常比常规 ReLU 更受青睐。

近年来,还开发了 ReLU 的其他变体,例如参数化 ReLU (PReLU)。aPReLU 通过允许在训练过程中学习参数而不是预定义参数来概括 Leaky ReLU 的概念。这使得网络能够根据数据自适应地确定斜率。

Leaky ReLU 是神经网络中的一种流行选择,特别是在常规 ReLU 可能导致神经元死亡或需要更广泛的激活值的情况下。

6. 参数ReLU(PReLU)激活函数

参数化 ReLU (PReLU) 是一种激活函数,通过引入可学习参数来扩展修正线性单元 (ReLU) 功能。在 PReLU 中,负输入的斜率不是固定的,而是在训练过程中学习的。

PReLU激活函数定义如下:

f(x) = x if x >= 0

f(x) = ax if x < 0

在此等式中,x表示神经元或神经元层的输入,并且a是控制负输入斜率的可学习参数。

PReLU 的性质

  1. 非线性: 与 ReLU 和 Leaky ReLU 类似,PReLU 向网络引入非线性,使其能够对数据中的复杂关系进行建模。
  2. 自适应斜率:  PReLU 相对于 Leaky ReLU 的主要优点是它能够学习每个神经元的最佳斜率。这种适应性可以提高网络的灵活性和表现力。
  3. 减少死亡神经元: 通过允许负值以自适应斜率通过,PReLU 有助于防止常规 ReLU 中遇到的死亡或无响应神经元问题。

ReLU、Leaky ReLU 和 PReLU 之间的选择取决于具体问题和数据的特征。当担心死亡神经元或需要有一个可学习的斜率来更好地捕获数据的细微差别时,通常会使用 PReLU。

值得注意的是,PReLU 引入了额外的需要学习的参数,这增加了模型的复杂性和计算要求。因此,PReLU 可能更适合更大的数据集和更复杂的模型。

PReLU 已成功应用于各种深度学习架构,包括卷积神经网络(CNN)和循环神经网络(RNN),并且与其他激活函数相比,在特定场景中表现出更好的性能。

7. 指数线性单元(ELU)激活函数

指数线性单元(ELU)是一种激活函数,旨在克服传统整流线性单元(ReLU)函数的一些局限性,例如 ReLU 垂死问题和负值饱和问题。ELU 引入了一个可微函数,可以平滑地使负输入饱和并为负值提供非零输出。

ELU函数定义如下:

f(x) = x if x >= 0

f(x) = a(e^x - 1) if x < 0

在此方程中,x表示神经元或神经元层的输入,并且a是控制负输入斜率的正常数。

ELU 激活函数的属性

  1. 非线性:与其他激活函数一样,ELU 向网络引入非线性,使其能够对数据中的复杂关系进行建模。
  2. 平滑饱和:  ELU 函数使负输入平滑饱和,避免 ReLU 突然饱和。这有助于缓解 ReLU 中遇到的死亡或无响应神经元的问题。
  3. 连续性和可微性:  ELU 是一个连续且可微的函数,允许在训练期间实现高效的反向传播和基于梯度的优化算法。
  4. 负输出:  ELU 允许负值具有非零输出,这在捕获负激活对于当前任务至关重要的情况下非常有用。
  5. 指数衰减:  ELU 函数中的负值随着接近x负无穷大而呈指数衰减,从而为极端负输入提供更稳健且表现良好的响应。

值得注意的是,与 ReLU 和其他更简单的激活函数相比,由于指数函数,ELU 引入了额外的计算复杂性。然而,改进的性能和减轻的限制使其成为流行的选择,尤其是在深度学习架构中。

ELU 已被用于各种应用中,并且与 ReLU 相比,在减少过度拟合、提高学习效率和实现更好的泛化方面显示出了可喜的结果,特别是在深度神经网络中。

在选择激活函数时,重要的是要考虑具体问题和数据的特征,并尝试不同的选项,以找到最合适的激活函数以获得最佳性能。

8. 高斯误差线性单元(GELU)激活函数

高斯误差线性单元 (GELU) 是一种激活函数,旨在结合高斯分布和整流器函数的所需特性。它提供了整流器的平滑近似,同时保留了两个函数的所需属性。

GELU激活函数定义为:

f(x) = 0.5 * x * (1 + tanh(sqrt(2 / pi) * (x + 0.044715 * x^3)))

在这个方程中x表示一个神经元或一层神经元的输入。

GELU 激活函数的属性

  1. 非线性:GELU 向网络引入非线性,使其能够对数据中的复杂关系进行建模。
  2. 平滑度:  GELU 是一个从负输入过渡到正输入的平滑函数。它在任何地方都是可微的,有利于反向传播和基于梯度的优化。
  3. 高斯近似:  GELU 近似高斯累积分布函数 (CDF)。这种近似允许 GELU 表现出与整流器函数类似的行为,同时提供更平滑的梯度。
  4. 饱和度:  GELU 在上限和下限处饱和,防止显着激活。这有利于神经网络的稳定性和收敛性。

GELU 在深度学习模型中广受欢迎,特别是在自然语言处理任务和 Transformer 架构中。与 ReLU 等其他激活函数相比,它显示出更高的收敛速度和泛化性能。

然而,值得注意的是,GELU 由于三角和指数运算引入了额外的计算复杂性。因此,它可能会对模型的整体计算效率产生轻微影响。

选择激活函数时,必须考虑问题的具体要求并尝试不同的选项,以找到最合适的激活函数以获得最佳性能。

9. 线性激活函数

线性激活函数,也称为恒等函数,是神经网络中使用的最简单的激活函数之一。它将线性变换应用于输入,这意味着输出等于输入,而无需任何非线性映射。线性激活函数定义为:

f(x) = x

在此等式中,“x”表示神经元或神经元层的输入。

线性激活函数具有以下属性:

  1. 线性:顾名思义,线性激活函数为网络引入了线性。它对输入执行简单的缩放,而不引入任何非线性变换。
  2. 无激活: 与引入非线性来捕获复杂关系的其他激活函数不同,线性激活函数不会更改输入值。它本质上是一个传递函数。
  3. 有限的表示能力: 由于线性激活函数不会引入非线性,因此它的表示能力有限。仅具有线性激活函数的神经网络只能学习输入和输出之间的线性关系。
  4. 梯度稳定性: 线性激活函数的梯度是恒定的,不依赖于输入。这在某些情况下可能是有利的,因为它确保了反向传播期间稳定的梯度。

线性激活函数通常用于回归问题的输出层,其目标是预测连续值。它允许神经网络直接输出值而不需要任何变换。

然而,非线性激活函数通常用于大多数其他任务,例如分类或复杂模式识别。非线性激活函数使神经网络能够学习和表示数据中更复杂的关系。

值得注意的是,尽管神经网络的各个层可能使用线性激活函数,但堆叠多个线性层不会将模型的表示能力提高到超过单个线性层的表示能力。为了对复杂关系进行建模,非线性激活函数在网络的中间层中至关重要。

结论

激活函数通过引入非线性在神经网络中发挥着关键作用,使模型能够学习和表示数据中的复杂关系。讨论了几种常用的激活函数:

  1. Sigmoid函数:  sigmoid函数将输入映射到0到1之间的范围,适合二元分类任务并提供平滑的输出。然而,它存在梯度消失问题,并且在深度神经网络中较少使用。
  2. 整流线性单元 (ReLU):ReLU 将负输入设置为零并保持正输入不变。它由于其简单性、计算效率和有效缓解梯度消失问题而被广泛使用。然而,负输入可能会导致神经元死亡。
  3. 双曲正切 (tanh) 函数:  tanh 函数与 sigmoid 函数类似,但以 0 为中心,范围为 -1 到 1。它通常用于循环神经网络 (RNN),可以捕获正激活和负激活。然而,它也面临着梯度消失的问题。
  4. Softmax函数:  softmax函数用于输出层进行多类分类,将实数向量转换为概率分布。它为每个类别分配概率,有助于选择最可能的类别。
  5. Leaky ReLU:  Leaky ReLU 为负输入引入了一个小斜率,防止神经元死亡并允许负值具有非零输出。它是 ReLU 的一个变体,解决了它的一些局限性。
  6. 参数 ReLU (PReLU):PReLU 是 Leaky ReLU 的扩展,其中负输入的斜率是可学习的参数。这允许每个神经元自适应地确定最合适的斜率。
  7. 指数线性单元 (ELU):ELU 平滑地使负输入饱和,避免了 ReLU 问题。它为负输入引入非零输出,并为高负值呈指数衰减。
  8. 高斯误差线性单元 (GELU):GELU 为整流器提供平滑逼近,同时类似于高斯分布。它结合了两种功能的理想特性,并在特定应用中显示出了有希望的结果。
  9. 线性激活函数:线性激活函数是神经网络中使用的最简单的激活函数之一。它将线性变换应用于输入,这意味着输出等于输入,而无需任何非线性映射。

每个激活函数都有其优点、局限性和用例。激活函数的选择取决于具体问题、数据的特征以及性能要求。对不同激活函数的实验和评估可以帮助确定最适合给定任务的激活函数。

你可能感兴趣的:(机器学习(ML),人工智能,nlp)