Baeldung Pro – CS – NPI EA (类别 = Baeldung 关于计算机科学)
announcement - icon

通过超简洁的 Baeldung Pro 体验学习

>> 会员和 Baeldung Pro.

没有广告,深色模式,并免费获得 6 个月的 IntelliJ Idea Ultimate,供您入门。

介绍

在本教程中,我们将研究在反向传播算法和其他学习过程中最常用的非线性激活函数。

导致使用非线性函数的原因已经在上一篇文章中进行了分析。

前馈神经网络

反向传播算法在完全互连前馈神经网络 (FFNN)中运行

ANN feed forward 1

其单元结构为

Artificial neuron 1

函数 \phi 对输入的加权和进行变换

    \[\Sigma=w_{0}+\sum_{i=1}^{N}w_{i}x_{i}\]

我们将在我们的线性模型文章中更详细地讨论 FFNN。

 激活函数系列指南

让我们考虑以下非线性函数作为示例

f2

从我们在关于线性函数的文章中得出的考虑来看,很明显,一个平面(线性模型)无法逼近图中的函数。

在介绍中,我们使用了“单元”一词,而不是“神经元”。生物类比在许多情况下具有误导性。

神经网络是数学和统计过程,与生物神经网络的相似性有限。然而,这种类比在某些情况下可能很有用,我们将讨论神经元的输出,以证明选择某些非线性函数族作为激活函数的原因。

生物神经元传递一个电信号。这通过细胞膜通过轴突传播到下游神经元。电位差和电信号是神经元试图在离子 K^+ 和 Na^+ 浓度变化时重新建立电平衡的尝试的结果(动作电位)。

1952 年,霍奇金和赫胥黎解释了这种机制的特征和随时间的变化,他们因这项工作获得了 1963 年的诺贝尔医学奖。

3.1. 突触

信号从一个神经元传递到另一个神经元是通过突触传递进行的,并且可以是两种类型。如果两个神经元相互接触,则电信号会直接传递(电突触)。如果两个神经元不接触,则信号通过使用化学神经递质传播(化学突触)。

由于两个细胞之间的物理接触,电突触通常更快并且是双向的,传统上与反射反应相关。然而,这种类型的信号不会被调节,并且无法适应环境条件的变化。

因此,进化产生了化学突触,通常在高等动物中,具有单向性,允许信号被增强或抑制。

与电突触相比,化学突触的传递速率较低,但允许针对环境条件的适应性和可塑性,从而实现学习,即神经连接的校准

如果我们想强行进行类比,那么人工神经网络中的可调节权重就是生物化学突触的数学模型。

3.2. 阶跃函数

生物神经元的输出是数字化的,它被激发或不被激发。

膜电位在极短的时间内达到最大值。在人工神经网络的单元信号建模中引入时间概念,催生了尖峰神经网络,这是一个非常活跃的研究领域。信号的产生发生在它的值超过阈值时,因此具有不连续性。

下面我们展示这种行为,或者说一个阶跃函数,我们可以将其视为生物神经元中激活函数的等效物:

spiking neuron

反向传播

现在我们简要讨论反向传播背后的理论。优秀的参考资料是经典的Krose 和 Van der Smagt 论文以及 Bishop 的书。

4.1. 通用逼近定理

反向传播是一种我们为训练多层神经网络而开发的算法.

然而,这种类型网络的必要性似乎与通用逼近定理相矛盾。这个结果表明,具有单个隐藏层和非线性激活函数的网络可以近似任何连续函数。首次证明由 Cybenko 于 1989 年为 sigmoid 激活函数完成。

不幸的是,理论结果是一回事,应用是另一回事

  • 可以证明,单层网络中的单元数量随着问题规模的增加呈指数增长,在某些情况下不适用或无法进行学习,获得较差的泛化能力
  • 此外,通用逼近定理并没有告诉我们任何关于学习过程的信息

进一步的研究完善了 Cybenko 的原始结果。

1991 年,Hornik 证明,激活函数的具体选择并不重要,而是多层前馈架构本身赋予了神经网络成为通用逼近器的潜力。这些考虑因素证明了寻找适用于多层神经网络的算法(例如反向传播)的合理性。

4.2. 学习规则

在监督神经网络中,可以利用目标测量数据来根据给定的输入校准网络的输出。

学习过程包括改变网络权重,从而最好地预测该目标。这种变化是通过应用规则来实现的。

实际上,这种类型模型的几乎所有学习规则都是 Hebb 在 1949 年提出的Hebbian 学习规则的变体。一些例子是

    \[\Delta w_{jk}=\gamma y_{j}y_{k}\]

    \[\Delta w_{jk}=\gamma y_{j}(t_{k}-y_{k})\]

其中权重 w_{jk} 指的是单位 jk 之间的连接。

请注意,一层中一个单元的输出成为当前单元的输入 (y_j = x_k)。

\gamma 是一个比例常数,称为学习率,它是网络中需要优化的参数之一。

t_k 是为输出单元 k 测量的目标值。

最后一条规则特别直观,因为它实现了权重的变化,该变化取决于输出和期望值之间的差异,并且可以使用线性激活函数通过少量微分演算获得。

4.3. 德尔塔规则

假设一个单层网络,使用网络输出和目标之间的二次误差作为预测良好性的度量,使用 P 数据集中的测量数据记录

    \[E=\sum_{p=1}^{P}E^{p}=\frac{1}{2}\sum_{p=1}^{P}(d^{p}-t^{p})^{2}\]

网络输出由激活函数给出,该激活函数是线性加权和

    \[y=w_{0}+\sum_{j}w_{j}x_{j}\]

表达式中的因子 1/2 在误差的表达式中是任意的,用于在微分过程中获得单位系数。

对于模式 p,德尔塔规则将权重变化与误差梯度联系起来

    \[\Delta_{p}w_{j}=-\gamma\frac{\partial E^{p}}{\partial w_{j}}\]

负号表示我们试图通过改变权重来最小化误差,因此,它也被称为梯度下降法。

可以使用链式法则计算导数

    \[\frac{\partial E^{p}}{\partial w_{j}}=\frac{\partial E^{p}}{\partial y^{p}}\frac{\partial y^{p}}{\partial w_{j}}\]

根据之前误差和输出的表达式,我们有

    \[\frac{\partial y^{p}}{\partial w_{j}}=x_{j}\]

    \[\frac{\partial E^{p}}{\partial y^{p}}=-(t^{p}-y^{p})\]

这导致最终表达式

    \[\Delta_{p}w_{j}=\gamma x_{j}(t^{p}-y^{p})\]

4.4. 信用分配问题

上一篇文章中提到,具有线性激活函数的多层网络简化为具有包含线性激活函数的单元的一层网络。在这种情况下,先前章节推导出的德尔塔规则是一种合适的学习规则。

如果我们想使用多层和非线性激活函数来提高网络的表达能力,我们需要找到连接两个任意层的权重的学习规则。对于连接到输出层的权重,原则上可以假设类似于上一节中的过程。

单元输出和目标之间的比较可以允许获得学习规则。但是,对于预输出层,我们如何改变权重来最小化误差?

在这种情况下,我们没有目标作为指导来指导搜索。此外,隐藏层中权重的变化会导致输出,该输出成为下游层的输入,依此类推,直到输出层。**这是一个问题,因为输出层是唯一可以使用目标来理解所有权重的整体变化是否生成了较小误差的层。**

这种困难被称为信用分配问题,它曾是发展我们现在所说的深度学习的主要障碍。 也就是说,直到1986年Rumelhart、Hinton和Williams发表了一篇如今的经典文章,他们在其中描述了反向传播算法。 类似的算法自20世纪70年代以来就已为人所知,但作者们展示了如何将其用作学习过程。

4.5. 广义Delta规则

其思想是推广Delta规则,并使用链式法则获得即使对于隐藏层权重变化的表达式

    \[\Delta_{p}w_{jk}=-\gamma\frac{\partial E^{p}}{\partial w_{jk}}\]

对于两个相互连接的层,jk,其中 k>j,加权和的推广形式为

    \[s_{k}^{p}=w_{0k}+\sum_{j}w_{jk}y_{j}^{p}\]

使用网络单元的通用非线性激活函数

    \[y_{k}^{p}=\phi\left(s_{k}^{p}\right)\]

链式法则允许获得输出层单元 o 和隐藏层单元 h 的以下表达式

    \[\frac{\partial E^{p}}{\partial s_{o}^{p}}=-(t_{o}^{p}-y_{o}^{p})\phi_{o}'(s_{o}^{p})\]

    \[\frac{\partial E^{p}}{\partial s_{h}^{p}}=\phi'_{h}(s_{h}^{p})\sum_{o=1}^{N_{o}}\frac{\partial E^{p}}{\partial s_{o}^{p}}w_{ho}\]

上述表达式涉及激活函数的导数 \phi^{ ' },因此需要连续函数。

从生物神经元到非线性人工神经网络

我们迄今为止所做的考虑为我们选择用作激活函数的非线性数学函数提供了一个标准。 它们必须是连续的和可微的,如反向传播所要求的,并且要再现生物神经元的输出趋势。

我们将研究两个可能的类别:S型函数和ReLU家族。

5. S型激活函数

S型函数是有界的、可微的、实函数,对于所有实数输入值都有定义,并且在每个点处具有非负导数。 以下是一些重要的S型函数及其主要特征。

5.1. Logistic

Logistic函数输出范围在 [0:1] 之间

    \[\phi(s_{k})=\frac{1}{1+e^{-s_{k}}}=\frac{e^{s_{k}}}{1+e^{s_{k}}}\]

它具有平滑梯度的优点,但计算成本高的缺点。

5.2. 双曲正切

双曲正切函数具有Logistic函数的优点和缺点,但输出范围在 [-1:1] 之间

    \[\phi(s_{k})=\tanh(s_{k})\]

5.3. Softmax

我们可以在分类问题中使用Softmax,通常在输出层

    \[\phi(s_{k})=\frac{e^{s_{k}}}{\sum_{i}e^{s_{j}}}\]

5.4. 反双曲正切(arctanh

arctanh 与上面类似,但使用较少

    \[\phi(s_{k})=\mathrm{\tanh^{-1}}(s_{k})=\frac{1}{2}\ln\left(\frac{1+s_{k}}{1-s_{k}}\right)\]

5.5. 古德曼函数

古德曼函数关联圆形函数和双曲函数,无需显式使用复数

    \[\phi(s_{k})=\int_{0}^{s_{k}}\frac{dt}{\cosh t}=2\tan^{-1}\left[\tanh\left(\frac{s_{k}}{2}\right)\right]\]

5.6. 误差函数

误差函数也称为高斯误差函数。在统计学中,对于非负值 x,和一个均值为 0,方差为 1/2 的正态分布随机变量 y,erf xy 落入范围 [-x:x] 的概率

    \[\phi(s_{k})=\mathrm{erf}(s_{k})=\frac{2}{\sqrt{\pi}}\int_{0}^{s_{k}}e^{-t^{2}}dt\]

5.7. 广义Logistic 函数

a=1 时,广义Logistic 函数简化为 Logistic 函数

    \[\phi(s_{k})=\left(1+e^{-s_{k}}\right)^{-a},\,a>0\]

5.8. Kumaraswamy 函数

Kumaraswamy 函数是 Logistic 函数的另一个泛化。当 a=b=1 时,它简化为 Logistic 函数

    \[\phi(s_{k})=1-\left[1-\left(\frac{1}{1+e^{-s_{k}}}\right)^{a}\right]^{b}\]

5.9. Smoothstep 函数

Smoothstep 函数是

    \[\phi(s_{k})=\left\{ \begin{array}{ll} \left(\int_{0}^{1}(1-t^{2})^{N}\,dt\right)^{-1}\int_{0}^{s_{k}}(1-t^{2})^{N}\,dt,\, & |s_{k}|\leq1\\ \mathrm{sgn}(s_{k}), & |s_{k}|\geq1 \end{array}\right.,\,N\geq1\]

5.10. 代数函数

最后是代数函数

    \[\phi(s_{k})=\frac{s_{k}}{\sqrt{1+s_{k}^{2}}}\]

5.11. Sigmoid 激活函数的问题

将列出的函数用作激活函数通常需要对所考虑问题的整个数据集进行重缩放。

例如,如果使用 Logistic 函数,我们的目标必须归一化到范围 [0:1],以便函数的值可以逼近它。这种需求对于所有激活函数都很常见,而不仅仅是 Sigmoid 函数。

然而,这些函数对于 s_k 的大值和小值都存在饱和效应,这降低了网络的解析能力

Activation functions sigmoid

这种机制导致了所谓的梯度消失问题。 也就是说,在某些条件下梯度被抵消,这可能会阻止学习过程。可以通过使用更窄的归一化区间来缓解这个问题,例如 [0.1:0.9] 对于 logistic 函数或 [-0.9: 0.9] 对于 \tanh

此外,sigmoid 函数通常在计算上强度较大。

6. ReLU(修正线性单元)。ReLU 系列

6.1. 一般特性

ReLU 系列具有诸多优点

  • 生物合理性
  • 更好的梯度传播:与在两个方向上都饱和的 sigmoid 激活函数相比,梯度消失问题更少
  • 计算效率高:仅需比较、加法和乘法
  • 尺度不变性

下图显示了以下部分提及的一些函数的图形表示

Activation functions ReLU

6.2. ReLU

虽然它看起来像一个线性函数,但 ReLU 具有导数函数,并允许进行反向传播

    \[\phi(s_{k})=\max(0,s_{k})\]

但是,它存在一些问题。首先是 “死亡 ReLU”问题。当输入接近零或为负时,函数的梯度变为零,网络无法执行反向传播,也无法学习。这是梯度消失问题的一种形式。

在某些情况下,网络中大量的神经元可能会陷入死状态,从而有效降低模型的容量。这个问题通常出现在学习率设置过高时。可以使用 Leaky ReLU 代替来缓解这个问题,该方法为 x<0 分配一个小的正斜率。

此外,它是一个无界函数,这意味着它没有最大值或最小值。

6.3. Leaky ReLU

Leaky ReLU 通过在负数部分设置一个小的斜率来缓解死亡 ReLU 问题,并允许对负值应用反向传播

    \[\phi(s_{k})=\left\{ \begin{array}{ll} s_{k}, & x>0\\ 0.01s_{k}, & \mathrm{otherwise} \end{array}\right.\]

但是,它不允许对 s_k < 0 进行一致的预测。

6.4. 参数 ReLU

参数 ReLU 允许将参数 a 插入到学习过程中,而不是像 Leaky ReLU 那样定义一个任意值

    \[\phi(s_{k})=\left\{ \begin{array}{ll} s_{k}, & x>0\\ as_{k}, & \mathrm{otherwise} \end{array}\right.\]

6.5. 噪声 ReLU

另一种是 ReLU 的扩展,称为 Noisy ReLU。 主要区别在于输出包含由高斯概率密度 \mathcal{N} 生成的噪声,其均值为零,标准差为 \sigma

    \[\phi(s_{k})=\max(0,s_{k}+\mathcal{N}(0,\sigma(s_{k}))\]

6.6. ELU

指数线性单元 (ELU) 尝试使平均激活值更接近于零,从而加速学习。 ELU 可以获得比 ReLU 更高的分类准确率

    \[\phi(s_{k})=\left\{ \begin{array}{ll} s_{k}, & x>0\\ a(e^{s_{k}}-1), & \mathrm{otherwise} \end{array}\right.,\,a>0\]

6.7. Softplus 或 SmoothReLU

Softplus/SmoothReLU 函数是对 ReLU 的平滑近似,其一个显著的特点是其导数是逻辑函数

    \[\phi(s_{k})=\ln\left(1+e^{s_{k}}\right)\]

6.8. Swish 函数

Swish 函数由 Google 开发,它在计算效率与 ReLU 函数相同的水平上具有卓越的性能

    \[\phi(s_{k})=\frac{s_{k}}{1+e^{-s_{k}}}\]

7. 复杂非线性激活函数

7.1. 复杂问题

我们之前考虑的所有激活函数都是实数。 但在应用领域中,有一些使用具有复杂函数的模型。

一个典型的例子是电磁系统,其中许多系统对一些类型的波现象进行建模,这些现象具有幅度和相位。 这种复杂性源于波是周期函数,可以用虚指数表示,因为欧拉公式:

    \[e^{ix}=\cos x+i\sin x\]

其中 i 是虚数单位。

其他可以使用虚激活函数的应用领域包括:电磁波和光波、模拟和数字电路中的电信号;电子波;超导体;量子计算;声波和超声波;周期性类型学和度量;循环动力学中的高稳定性;混沌和分形;四元数。

7.2. 复值神经网络中的激活函数

我们可以通过几种方式使用神经网络处理本质上复杂的问题。 例如,我们可以设计一个网络,将模型的实部和虚部作为单独的输出单元,仅使用实函数,但也可以直接处理它们。

这个主题非常广泛。 重要的是,可以推导出对反向传播的扩展,该扩展利用复杂的非线性激活函数,从而产生了所谓的 复值神经网络 (CVNN)

这些激活函数使用我们在前几节中分析的一些 sigmoid 函数的表达式。 网络的每个单元产生一个复数输出,我们可以将这些输出汇总起来,得到下一层单元的复数输入。

通常,我们考虑两种主要形式的函数,即实部-虚部型激活函数

    \[\phi(s_{k})=f_{\Re}(s_{k})+if_{\Im}(s_{k})=\tanh(\Re(s_{k}))+i\tanh(\Im(s_{k}))\]

和幅值-相位型激活函数

    \[\phi(s_{k})=\tanh(|s_{k}|)e^{i\arg(u)}\]

其中 arg 是复数 s_k 的幅角, \Re\Im 分别是其实部和虚部。

8. 结论

在本教程中,我们概述了反向传播算法中使用的非线性激活函数。

我们没有简单地列出数学函数及其特性,而是尝试对这个问题进行连贯的探讨,重点强调问题和需求,从逻辑的角度来看,这些问题和需求导向了本文的处理方式。

一些不太为人所知的扩展,例如虚函数,最近使得将前馈神经网络和反向传播算法应用于新问题成为可能。

我们还可以发现许多其他非线性激活函数,用于使用除反向传播以外的算法训练网络。例如,径向基函数 (RBF) 使用高斯函数;但是,在本文中,我们专注于反向传播机制。

© .