在人工神经网络中,节点的激活函数是一种根据其个体输入及其权重计算节点输出的函数。如果激活函数是非线性的,那么仅使用少量节点即可解决非平凡问题。激活函数是神经网络的核心组成部分,决定了信号如何在层间传播,并使网络能够学习数据中的复杂模式。它们几乎被用于所有现代机器学习模型中,包括深度学习系统,如大型语言模型和变换器。
激活函数可以根据其数学性质进行分类,例如非线性、值域和可微性,这些性质会影响训练的稳定性和效率。多年来,研究人员开发了许多激活函数,每种函数都有特定的优势和权衡。激活函数的选择会显著影响模型的性能、收敛速度以及避免梯度消失等问题的能力。
历史发展
激活函数的概念可以追溯到早期的人工神经元模型,例如弗兰克·罗森布拉特于1958年提出的感知机,它使用了二进制阶跃激活。然而,阶跃函数不可微,限制了其在基于梯度的优化中的使用。在1980年代,逻辑Sigmoid函数因其平滑且可微而变得流行,从而支持了反向传播。1986年,戴维·鲁梅尔哈特、杰弗里·辛顿和罗纳德·威廉姆斯推广了反向传播,该方法依赖于可微的激活函数。
2010年代见证了向修正线性单元(ReLU)的转变,这有助于缓解梯度消失问题。ReLU被用于2012年的AlexNet计算机视觉模型,该模型赢得了ImageNet竞赛,也被用于2015年的ResNet模型,该模型使得训练非常深的网络成为可能。2018年,高斯误差线性单元(GELU)被引入并用于BERT模型,这是自然语言处理领域的基础变换器架构。最近,谷歌的研究人员于2017年提出了Swish(也称为SiLU),提供了一种平滑、非单调的替代方案。
非线性与通用逼近
激活函数的一个关键性质是非线性。当激活函数是非线性时,可以证明两层神经网络是通用函数逼近器,这意味着它可以在紧致域上以任意精度逼近任何连续函数。这被称为通用逼近定理。恒等激活函数不满足这一性质;当多层使用恒等激活函数时,整个网络等效于单层模型,失去了表示复杂函数的能力。非线性激活函数允许神经网络学习数据中的非线性关系,这对于图像识别、语音处理和语言理解等任务至关重要。
值域与训练稳定性
激活函数具有不同的值域,这会影响基于梯度的训练。当激活函数的值域有限时,基于梯度的训练方法往往更稳定,因为模式呈现仅显著影响有限的权重。例如,Sigmoid函数输出0到1之间的值,tanh函数输出-1到1之间的值。当值域无限时,训练通常更高效,因为模式呈现显著影响大多数权重,但通常需要较小的学习率以避免不稳定。ReLU具有无界的正值域,这可能导致更快的学习,但也可能带来死神经元等问题。
可微性与基于梯度的优化
连续可微的激活函数对于启用基于梯度的优化方法来说是理想的,因为它们允许计算用于反向传播的梯度。ReLU在零处不是连续可微的,但仍然可以使用次梯度或将零处的导数定义为0或1。二进制阶跃激活函数在零处不可微,并且对所有其他值求导为0,因此基于梯度的方法无法利用它取得进展。非饱和激活函数(如ReLU)可能优于饱和激活函数,因为它们不太可能遭受梯度消失问题,即深度网络中的梯度变得极小。
常见激活函数
Sigmoid(逻辑函数)
Sigmoid函数,也称为逻辑函数,定义为 \( \sigma(x) = \frac{1}{1 + e^{-x}} \)。它输出0到1之间的值,使其适用于二分类和作为概率输出层。然而,它在极端值处会饱和,导致梯度消失。Sigmoid被用于辛顿等人于2012年开发的语音识别模型中。
Tanh(双曲正切)
Tanh函数定义为 \( \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \),输出-1到1之间的值。它是零中心的,这通常使优化比Sigmoid更容易。Tanh常用于循环神经网络和隐藏层激活。
ReLU(修正线性单元)
ReLU定义为 \( \text{ReLU}(x) = \max(0, x) \)。它计算效率高,并有助于缓解梯度消失,因为其正输入的导数为1。然而,它可能遭受死神经元问题,即单元永久失活。ReLU被用于AlexNet和ResNet。
Leaky ReLU和参数化ReLU
Leaky ReLU允许负输入具有小的正斜率,例如 \( \text{LeakyReLU}(x) = \max(0.01x, x) \),以避免死神经元。参数化ReLU(PReLU)在训练过程中学习斜率参数,提供更多灵活性。
GELU(高斯误差线性单元)
GELU是ReLU的平滑近似,定义为 \( \text{GELU}(x) = x \cdot \Phi(x) \),其中 \( \Phi \) 是标准正态分布的累积分布函数。它被用于BERT和许多现代变换器中,提供更平滑的梯度,通常带来更好的性能。
Swish / SiLU
Swish,也称为SiLU(Sigmoid线性单元),定义为 \( \text{Swish}(x) = x \cdot \sigma(x) \)。它是平滑且非单调的,已被证明在某些深度网络中能提高性能。Swish由谷歌的研究人员于2017年提出。
Softplus
Softplus是ReLU的平滑近似,定义为 \( \text{softplus}(x) = \ln(1 + e^x) \)。它具有严格正的值域,使其适用于在变分自编码器中预测方差。
数学细节
最常见的激活函数可以分为三类:岭函数、径向函数和折叠函数。如果 \( \lim_{|v| \to \infty} |\nabla f(v)| = 0 \),则激活函数 \( f \) 是饱和的;如果该极限不为零,则是非饱和的。非饱和函数(如ReLU)不太容易发生梯度消失。
岭激活函数
岭函数是作用于输入变量线性组合的多元函数。示例包括:
- 线性激活: \( \phi(\mathbf{v}) = a + \mathbf{v}'\mathbf{b} \)
- ReLU激活: \( \phi(\mathbf{v}) = \max(0, a + \mathbf{v}'\mathbf{b}) \)
- Heaviside激活: \( \phi(\mathbf{v}) = 1_{a + \mathbf{v}'\mathbf{b} > 0} \)
- 逻辑激活: \( \phi(\mathbf{v}) = (1 + \exp(-a - \mathbf{v}'\mathbf{b}))^{-1} \)
在生物启发的神经网络中,激活函数通常是一种抽象,表示细胞中动作电位发放的速率。在其最简单的形式中,此函数是二进制的,意味着神经元要么发放要么不发放。神经元不能以超过一定速率的速度发放,这促使了输出范围限制在有限区间内的Sigmoid激活函数。
径向激活函数
一类特殊的激活函数称为径向基函数(RBF),用于RBF网络。这些激活函数可以采取多种形式,但通常以高斯函数形式出现: \( \phi(\mathbf{v}) = \exp(-\|\mathbf{v} - \mathbf{c}\|^2 / (2\sigma^2)) \),其中 \( \mathbf{c} \) 是中心, \( \sigma \) 控制宽度。RBF网络使用这些局部感受野进行函数逼近。
实际考虑
在选择激活函数时,从业者会考虑计算成本、梯度行为以及具体任务等因素。对于深度网络,ReLU及其变体通常因其效率和避免梯度消失的能力而受到青睐。对于输出层,Sigmoid用于二分类,Softmax用于多分类,线性激活用于回归。在变换器中,GELU常用于前馈层,如BERT和GPT等模型所示。激活函数的选择也会与批归一化和丢弃等其他技术相互作用。
结论
激活函数是神经网络运作的基础,提供了使学习复杂模式成为可能的非线性。从早期的阶跃函数到现代平滑变体(如GELU和Swish),它们已经演变以应对训练深度模型中的挑战。理解其数学性质有助于研究人员和工程师为特定应用选择合适的函数,从而促进人工智能系统在各领域的成功。