神经网络中的激活函数类型
神经网络的激活函数是深度学习的重要组成部分,因为它们决定了用于创建或分割大规模神经网络的训练模型的准确性和效率以及深度学习模型的输出。激活函数对于神经网络来说是一种有价值的工具,因为它允许它们专注于相关数据,而舍弃其他数据。与任何其他函数一样,激活函数(传输函数)接受一个输入并返回与该输入成比例的输出。神经网络中节点的激活函数指定了节点对特定输入或一组输入的响应时的输出。
它们有效地选择要激活或停用的神经元,以达到预期的结果。输入也会经过非线性变换,以提高复杂神经网络的性能。在1到-1的任何范围内的信息都可以通过激活函数进行输出规范化。由于神经网络通常在数百万个数据点上进行训练,所以激活函数的速度和计算结果所需的时间量都至关重要。
现在让我们来看看神经网络的结构,以及神经网络体系结构是如何组成的,有哪些元素存在于神经网络中。
人工神经网络包含大量链接的单个神经元。指定了每个神经元的激活函数、偏置和权重。
- 输入层 – 域的原始数据被发送到输入层。这一层是任何计算发生的最低级别。这些节点唯一的作用是将数据传递给下一个隐藏层。
- 隐藏层 – 在接收到输入层的特征后,隐藏层在将结果传递给输出层之前执行各种计算。第2层节点对用户隐藏,为底层神经网络提供一层抽象。
- 输出层 – 网络的隐藏层的输出在该层汇集在一起,这提供了网络的最终值。
激活函数的重要性
由于线性方程只是一个一次多项式,没有激活函数的神经网络只是一个线性回归模型。它容易解决,但在处理复杂问题或高次多项式时能力有限。
激活函数用于神经网络提供非线性。虽然激活函数的计算在前向传播的每一层中增加了一个额外的步骤,但这是值得的。
如果没有激活函数,每个神经元将使用权重和偏置对输入进行线性变换。两个线性函数的组合本身就是一个线性函数;因此,神经网络中隐藏层的总数不会影响其行为。
激活函数的类型
神经网络主要分为三个部分,不同的激活函数在其中使用。
- 二进制阶跃函数
- 线性函数
- 非线性激活函数
二进制阶跃神经网络激活函数
- 二进制阶跃函数
此激活函数非常简单,主要用作基于阈值的分类器,我们设置一个阈值来确定特定神经元的输出是否被激活。如果输入到激活函数的值大于某个阈值,则激活该神经元,并将其输出传递到下一个隐藏层;否则,该神经元处于非激活状态。
限制:
- 对于需要多个值的问题(例如多类分类),它不适用,因为它只提供单值结果。
- 由于阶跃函数没有梯度,反向传播会遇到困难。
线性神经网络激活函数
- 线性函数
当输出等于输入时,称为线性激活函数的激活函数。这个函数也称为“无激活”或“恒等函数”(x1.0)。该函数接受输入的加权和,输出值不发生变化。换句话说,我们的函数与神经元或输入的总和成正比。因此,我们有一条直线的激活函数。使用线性激活函数可以生成广泛的激活范围。具有正斜率的线条可以在输入速率增加时增加发射率。
限制:
- 由于函数的导数是与输入 x 无关的常数,因此无法使用反向传播。
- 神经网络的最后一层始终是第一层的线性函数。线性激活函数将所有层消除,将神经网络简化为最简单的形式。当将线性激活函数应用于神经网络时,所有层将有效合并为单个超级层。
非线性神经网络激活函数
- Sigmoid 激活函数
该函数接受实数作为输入,并返回介于 0 和 1 之间的整数。输出值越接近 1.0,输入值越大(越正);输出值越接近 0.0,输入值越小(越负)。因此,它在需要概率预测输出的模型中应用最广泛。由于所有概率都介于 0 和 1 之间,所以 sigmoid 分布是合适的。它也被称为逻辑函数。
限制:
- 逻辑函数在零附近不会产生对称的结果。这确保所有神经元的输出具有相同的符号。这增加了神经网络训练的不稳定性。
2. ReLU(修正线性单元)激活函数
如今,ReLU 是最流行的激活函数,因为它是任何深度学习或卷积神经网络系统的关键组件。尽管函数的取值范围为 0 到正无穷,这会带来一些挑战,但是负值以如此高的速率被转换为零,意味着它既不映射也不适应数据。关键问题是 ReLU 函数不会同时激活所有神经元。当线性变换产生小于 0 的值时,神经元会关闭。由于 ReLU 是线性且非饱和的,它加速了梯度下降对损失函数全局最小值的逼近。
限制:
- 由于权重可能以较高的学习率变为负值,输出项也可能有害。减小学习率是解决此问题的一种可能方法。
- 由于所有负输入值立即设为零,模型适当拟合或学习数据的能力受到损害。
3. Tanh 函数
Tanh 函数也被称为双曲函数。tanh 是逻辑 Sigmoid 的改进版本。tanh 函数的范围是 (-1 到 1)。tanh 也是 S 形的。负输入被强烈负映射,而零输入被映射到接近零,这在绘制 tanh 图形时是一个优势。我们可以对该函数进行微分。尽管函数本身是单调的,但它的导数不是。
限制:
- 与 sigmoid 激活函数类似,它遭受梯度消失的问题。而且 tanh 函数的梯度比 sigmoid 的梯度陡峭得多。
4. Leaky ReLU 函数
由于负区域具有轻微的正斜率,Leaky ReLU 是修正线性单元函数的改进版本,可用于避免激活函数失效的问题。因此,节点不会关闭,且不会出现 ReLU 节点失效的问题,因为负值不会被转换为 0。
限制:
- 当负值的梯度最小时,学习模型参数可能会很困难。
5. Parametric ReLU 函数
P-ReLU 或 Parametric 是 Leaky ReLU 变体的一种,因为负值不会达到 0,节点不会关闭,也不会出现 dying ReLU 的问题。它试图用一条斜率为正的直线替换 ReLU 的负半部分。
限制:
- 根据斜率参数的值,它可能会为不同的问题产生不同的结果。
6. 指数线性单元函数
ELU 激活函数是另一种选择,以其快速收敛和高质量输出而闻名。负终端被替换为修改过的指数函数。不幸的是,这会增加计算开销,但至少 ReLU 的问题不再是终点。通过为负输入值提供“对数”曲线,它减少了“死亡”ReLU 问题的可能性。它有助于网络适当地调整其偏差和权重。
限制:
- 指数运算会导致处理时间增加。
- ‘a’的值无法以任何方式获得,梯度爆炸问题是主要限制之一。
7. 缩放的指数线性单元函数
SELU处理内部归一化,它是为了自归一化网络而开发的,确保每一层的均值和方差保持不变。通过修改均值和方差,SELU实现了这种归一化。由于ReLU激活函数无法产生负值,SELU可以以以前不可能的方式移动均值。梯度可用于修改方差。
为了被放大,SELU激活函数需要具有大于一的梯度的区域。当使用内部归一化超过外部归一化时,网络收敛更快。
8. 高斯误差线性单元函数
许多最受欢迎的自然语言处理模型,包括BERT、ROBERTa和ALBERT,都兼容GELU激活函数。该激活函数结合了Dropout、Zoneout和ReLU的特性。在计算机视觉、自然语言处理和语音识别的所有任务中,GELU非线性优于ReLU和ELU激活函数,提高性能。
9. Softmax激活函数
与sigmoid激活类似,softmax激活根据权重为每个输入变量分配一个值,最终这些权重的和为1。这就是为什么softmax通常用于输出层,即用于决策的最后一层。
结论
为了更好地理解和执行越来越复杂的任务,输入通常会经历非线性转换,而这些激活函数在这一过程中起着关键作用。神经网络的隐藏层通常具有相同的激活函数。由于网络的参数可以通过反向传播学习,因此该激活函数必须是可微分的。我们已经介绍了最常见的激活函数,它们的限制(如果有)以及它们的应用。
尽管“激活函数”已广为人知,但很少有人愿意思考它的影响。为什么会使用它们,它们如何做出贡献,需要说什么等等。尽管这些问题可能看起来很简单,但底层动态可能非常复杂。
参考资料:
- https://www.analyticssteps.com/blogs/7-types-activation-functions-neural-network
- https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6
- https://thehackweekly.com/8-most-popular-types-of-activation-functions-in-neural-networks/
- https://www.v7labs.com/blog/neural-networks-activation-functions
The post <strong>神经网络中的激活函数类型</strong> appeared first on MarkTechPost.