大家好,我是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. 线性激活函数
结论
激活函数采用加权输入的总和并应用变换来产生输出。然后该输出被传递到下一层或用作网络的最终输出。激活函数是一个重要的神经网络组件,使其能够学习复杂的模式并做出非线性决策。
激活函数是一种数学函数,它将非线性引入神经元或神经网络层的输出。
sigmoid函数是神经网络中常用的激活函数。平滑的 S 形曲线将输入映射到 0 到 1 之间的值,这对于二元分类问题或当我们想要表示概率时非常有用。
sigmoid 函数定义为:
f(x) = 1 / (1 + e^(-x))
在此等式中,x
表示神经元或神经元层的输入的加权和。分母中的指数项确保输出始终在 0 和 1 之间。
Sigmoid函数
由于这些限制,ReLU、Leaky ReLU 等替代激活函数及其变体越来越受欢迎,尤其是在深度学习架构中。然而,sigmoid函数仍然在特定场景中找到应用,例如二元分类模型的输出层或当目标是获取概率时。
ReLU是神经网络中广泛使用的激活函数,特别是深度学习模型。它以其简单性和有效克服其他激活函数(如 sigmoid 和 tanh 函数)的局限性而闻名。
ReLU函数定义如下:
f(x) = max(0, x)
在此等式中,x
表示神经元或神经元层的输入的加权和。ReLU 函数对于负输入返回 0,对于正输入返回输入值本身。
由于其简单性和有效性,ReLU 广泛应用于深度学习架构,特别是卷积神经网络(CNN)。它在各种计算机视觉和自然语言处理任务中表现出色。
双曲正切 (tanh) 函数是神经网络中常用的激活函数。它与 sigmoid 函数类似,但以 0 为中心,范围在 -1 到 1 之间。 tanh 函数定义如下:
f(x) = (e^x - e^(-x)) / (e^x + e^(-x))
在此等式中,“x”表示神经元或神经元层的输入的加权和。
tanh 函数与 sigmoid 函数有一些相似之处,但它具有更陡的梯度,这使得它对输入的变化更加敏感。然而,与 sigmoid 函数一样,对于非常大/小的输入值,它仍然会遇到梯度消失问题。
tanh 函数用于各种神经网络架构,特别是循环神经网络 (RNN) 和长短期记忆网络(LSTM),其零中心特性和非线性特性在这些网络中非常有用。然而,近年来,ReLU 及其变体的受欢迎程度有所增加,主要是因为它们的简单性和在深度学习模型中的更好性能。
Softmax函数是一种常用于多类分类问题的神经网络输出层的激活函数。它将实数向量作为输入,并将其归一化为概率分布,其中概率之和等于 1。Softmax 函数定义如下:
f(x_i) = e^(x_i) / sum(e^(x_j)) for all j
在此等式中,x_i
表示特定类 的输入值i
,x_j
表示所有类的输入值。
Softmax 函数通常用于多类分类任务的神经网络的最后一层,其目标是将输入分配给几个可能的类之一。Softmax函数输出的概率最高的类通常被认为是预测类。
值得注意的是,Softmax 函数对异常值和大输入值很敏感,这可能会导致数值不稳定。在应用 Softmax 函数之前,可以通过从每个输入向量元素中减去最大输入值(称为“logit 移位”或“logit 缩放”)来缓解此问题。这有助于防止数值上溢或下溢。
总体而言,Softmax 函数是多类分类任务中的基本工具,使神经网络能够对其预测提供概率解释。
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。
ReLU 和 Leaky ReLU 的选择取决于具体问题和数据的特征。当神经元死亡的风险很高或者需要通过允许负值来实现更多样化的激活范围时,Leaky ReLU 通常比常规 ReLU 更受青睐。
近年来,还开发了 ReLU 的其他变体,例如参数化 ReLU (PReLU)。a
PReLU 通过允许在训练过程中学习参数而不是预定义参数来概括 Leaky ReLU 的概念。这使得网络能够根据数据自适应地确定斜率。
Leaky ReLU 是神经网络中的一种流行选择,特别是在常规 ReLU 可能导致神经元死亡或需要更广泛的激活值的情况下。
参数化 ReLU (PReLU) 是一种激活函数,通过引入可学习参数来扩展修正线性单元 (ReLU) 功能。在 PReLU 中,负输入的斜率不是固定的,而是在训练过程中学习的。
PReLU激活函数定义如下:
f(x) = x if x >= 0
f(x) =
ax if x < 0
在此等式中,x
表示神经元或神经元层的输入,并且a
是控制负输入斜率的可学习参数。
ReLU、Leaky ReLU 和 PReLU 之间的选择取决于具体问题和数据的特征。当担心死亡神经元或需要有一个可学习的斜率来更好地捕获数据的细微差别时,通常会使用 PReLU。
值得注意的是,PReLU 引入了额外的需要学习的参数,这增加了模型的复杂性和计算要求。因此,PReLU 可能更适合更大的数据集和更复杂的模型。
PReLU 已成功应用于各种深度学习架构,包括卷积神经网络(CNN)和循环神经网络(RNN),并且与其他激活函数相比,在特定场景中表现出更好的性能。
指数线性单元(ELU)是一种激活函数,旨在克服传统整流线性单元(ReLU)函数的一些局限性,例如 ReLU 垂死问题和负值饱和问题。ELU 引入了一个可微函数,可以平滑地使负输入饱和并为负值提供非零输出。
ELU函数定义如下:
f(x) = x if x >= 0
f(x) =
a(e^x - 1) if x < 0
在此方程中,x
表示神经元或神经元层的输入,并且a
是控制负输入斜率的正常数。
x
负无穷大而呈指数衰减,从而为极端负输入提供更稳健且表现良好的响应。值得注意的是,与 ReLU 和其他更简单的激活函数相比,由于指数函数,ELU 引入了额外的计算复杂性。然而,改进的性能和减轻的限制使其成为流行的选择,尤其是在深度学习架构中。
ELU 已被用于各种应用中,并且与 ReLU 相比,在减少过度拟合、提高学习效率和实现更好的泛化方面显示出了可喜的结果,特别是在深度神经网络中。
在选择激活函数时,重要的是要考虑具体问题和数据的特征,并尝试不同的选项,以找到最合适的激活函数以获得最佳性能。
高斯误差线性单元 (GELU) 是一种激活函数,旨在结合高斯分布和整流器函数的所需特性。它提供了整流器的平滑近似,同时保留了两个函数的所需属性。
GELU激活函数定义为:
f(x) = 0.5 * x * (1 + tanh(sqrt(2 / pi) * (x + 0.044715 * x^3)))
在这个方程中x
表示一个神经元或一层神经元的输入。
GELU 在深度学习模型中广受欢迎,特别是在自然语言处理任务和 Transformer 架构中。与 ReLU 等其他激活函数相比,它显示出更高的收敛速度和泛化性能。
然而,值得注意的是,GELU 由于三角和指数运算引入了额外的计算复杂性。因此,它可能会对模型的整体计算效率产生轻微影响。
选择激活函数时,必须考虑问题的具体要求并尝试不同的选项,以找到最合适的激活函数以获得最佳性能。
线性激活函数,也称为恒等函数,是神经网络中使用的最简单的激活函数之一。它将线性变换应用于输入,这意味着输出等于输入,而无需任何非线性映射。线性激活函数定义为:
f(x) = x
在此等式中,“x”表示神经元或神经元层的输入。
线性激活函数具有以下属性:
线性激活函数通常用于回归问题的输出层,其目标是预测连续值。它允许神经网络直接输出值而不需要任何变换。
然而,非线性激活函数通常用于大多数其他任务,例如分类或复杂模式识别。非线性激活函数使神经网络能够学习和表示数据中更复杂的关系。
值得注意的是,尽管神经网络的各个层可能使用线性激活函数,但堆叠多个线性层不会将模型的表示能力提高到超过单个线性层的表示能力。为了对复杂关系进行建模,非线性激活函数在网络的中间层中至关重要。
激活函数通过引入非线性在神经网络中发挥着关键作用,使模型能够学习和表示数据中的复杂关系。讨论了几种常用的激活函数:
每个激活函数都有其优点、局限性和用例。激活函数的选择取决于具体问题、数据的特征以及性能要求。对不同激活函数的实验和评估可以帮助确定最适合给定任务的激活函数。