趋近智
激活函数 (activation function)为神经网络 (neural network)引入非线性,使其能够模拟复杂模式。在循环神经网络 (RNN)中,这个作用尤为重要,因为激活函数在网络处理序列时会在每个时间步重复应用。这种重复应用直接影响隐藏状态的动态变化,最重要的是,也影响通过时间反向传播 (backpropagation)(BPTT)过程中梯度的流动。激活函数的选择可以缓解或加剧梯度消失和梯度爆炸问题。
回顾基本的RNN状态更新方程:
其中, 是时间步 的隐藏状态, 是输入, 和 是权重 (weight)矩阵, 是偏置 (bias), 是激活函数。在BPTT过程中,损失对早期状态 (其中 ) 的梯度涉及将梯度通过每个中间步骤相乘。这包括重复乘以激活函数 的导数,该导数在每个步骤的预激活值处求得。
如果 持续很小(小于1),梯度在向后传播时会指数级缩小,导致梯度消失。反之,如果 可以很大,并结合较大的权重值,梯度可能会指数级增长,导致梯度爆炸。
下面我们来分析循环神经网络 (neural network) (RNN)中常用激活函数的特性。
双曲正切 (tanh) 函数常在简单RNN中用作隐藏状态的主要激活函数,在LSTM和GRU单元中也普遍存在。
它的输出范围是 ,并且是零中心化的。相较于非零中心化的函数,这个特性有利于优化。 的导数是:
导数的最大值是1(在 处),当 增加时它接近0(饱和)。尽管在零附近的梯度比sigmoid函数大,但饱和特性仍使基于 的RNN容易受到梯度消失问题的影响,尤其是在很多时间步上。不过,它的有界输出有助于阻止隐藏状态值本身变得过大。
Sigmoid (逻辑) Sigmoid 函数将其输入压缩到范围 。
它的导数是:
Sigmoid 导数的最大值是 0.25(在 处)。因为这个最大值明显小于1,在BPTT期间的重复乘法导致梯度很快消失。因此,在现代RNN中,sigmoid 很少用作隐藏状态更新的主要激活函数。它目前主要用于LSTM和GRU中的门控机制,其 的输出范围非常适合控制信息流(例如,决定遗忘或传递多少信息)。
修正线性单元 (ReLU) ReLU 在前馈网络和卷积神经网络 (neural network)(CNN)中是一种流行的选择。
它的导数很简单:当 时为1,当 时为0。
尽管在简单RNN中ReLU不如 常见作为主要的隐藏状态激活函数,但ReLU及其变体(如Leaky ReLU或Parametric ReLU)有时也会使用,特别是在LSTM/GRU的更新机制中,或与仔细的初始化和正则化 (regularization)结合使用。
下面的图表显示了、sigmoid和ReLU函数的形状和导数。请注意输出范围以及导数何时变得很小或为零。
、sigmoid和ReLU激活函数及其一阶导数的比较。请注意 和sigmoid如何饱和(导数趋近于零),而ReLU的导数对正输入保持不变。
激活函数的选择与模型设计和训练的其他方面相互关联,包括权重 (weight)初始化(前面已讨论)和使用的特定架构。在简单RNN中,使用这些标准激活函数管理梯度流的固有困难是推动发展更复杂的循环架构(如LSTM和GRU)的重要原因,这些架构包含明确的机制(门,通常使用sigmoid和tanh)以更好地控制长序列上的信息和梯度流。我们将在接下来的章节中分析这些高级架构。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•