趋近智
循环神经网络 (neural network) (RNN) 是处理序列数据的基本架构,但简单的 RNN 经常遇到梯度消失问题,这阻碍了它们捕获长距离依赖关系的能力。长短期记忆 (LSTM) 网络作为一种解决方案应运而生,通过引入门控机制来调节长序列中的信息流动。然而,LSTM 相当复杂,它具有三个不同的门(输入门、遗忘门、输出门)和一个独立的单元状态。门控循环单元 (GRU) 由 Cho 及其同事于 2014 年提出,它是一种更简单的替代方案。GRU 通常能达到与 LSTM 相似的性能,同时计算效率更高。
GRU 与 LSTM 类似,都使用门控机制来控制信息流动,但 GRU 通过更精简的架构实现了这一点。GRU 单元不再使用三个门和一个独立的单元状态,而是仅采用两个门:更新门和重置门。它还将单元状态和隐藏状态合并为一个隐藏状态向量 (vector) 。
让我们看看这些组件在给定时间步 下如何共同作用,将当前输入 和前一隐藏状态 作为输入。
重置门 () 决定如何将新输入 与前一隐藏状态 组合。具体来说,它控制在计算下一个隐藏状态的候选值时,前一隐藏状态有多少应该被“遗忘”或忽略。如果重置门对于 的某些维度值接近 0,它会有效地使该单元表现得像是首次读取输入一样,忽略与当前语境不相关的历史信息。
重置门的激活值使用 Sigmoid 函数 () 计算,该函数输出 0 到 1 之间的值:
其中, 表示前一隐藏状态和当前输入向量 (vector)的连接。 是权重 (weight)矩阵, 是重置门的偏置 (bias)项。
更新门 () 扮演着与 LSTM 中遗忘门和输入门的组合相似的角色。它决定了前一隐藏状态 有多少信息应该传递到当前隐藏状态 。同时,它也控制了新计算出的候选隐藏状态 (,接下来会解释) 应该被加入多少。
如果 接近 1,则前一隐藏状态 大部分被复制到新的隐藏状态 。如果 接近 0,则新的候选状态 主要构成新的隐藏状态 。这种机制使得 GRU 能够保留来自遥远过去时间步的信息。
更新门的激活值也使用 Sigmoid 函数计算:
其中 和 分别是更新门的权重 (weight)矩阵和偏置 (bias)项。
GRU 计算一个候选隐藏状态 ,它表示当前时间步的提议更新。此计算受重置门 影响。重置门决定了前一隐藏状态 的哪些部分用于此计算。候选状态通常使用双曲正切 () 激活函数 (activation function)计算,该函数输出 -1 到 1 之间的值。
请注意重置门 和前一隐藏状态 之间的元素级乘法 ()。这是重置门在将信息与当前输入 组合之前,选择性地过滤来自 信息的地方。 和 是相应的权重 (weight)矩阵和偏置 (bias)。
最后,当前时间步的实际隐藏状态 是通过对前一隐藏状态 和候选隐藏状态 进行线性插值计算得出的。更新门 控制此插值过程:
此公式说明了更新门如何作用:
这使得网络能够通过在多个时间步保持 接近 0 来维持长期信息,或者通过将 设置为接近 1 来根据新输入快速更新。
下图展示了 GRU 单元的结构:
门控循环单元 (GRU) 单元的内部结构,展示了信息如何通过重置门 () 和更新门 () 流动以计算下一个隐藏状态 ()。
尽管 GRU 和 LSTM 都有效地解决了梯度消失问题并捕获了长距离依赖,但它们在内部结构上有所不同:
与 LSTM 类似,GRU 在 TensorFlow (通过 Keras) 和 PyTorch 等标准深度学习 (deep learning)框架中很容易作为层使用。您可以轻松地在模型定义中用 GRU 层替换 LSTM 层。诸如堆叠多个 GRU 层(以创建更深的网络)或使用双向 GRU(以处理正向和反向序列)等思路同样适用于 LSTM。
总而言之,GRU 为序列建模提供了 LSTM 的一个有吸引力的替代方案。其更简单的架构通常意味着更高的计算效率,而对于许多 NLP 任务,性能没有显著牺牲。通过使用重置门和更新门,它们有效地管理随时间的信息流,使它们能够学习序列间的依赖关系,这与它们的 LSTM 同类非常相似。在构建序列模型时,同时考虑 LSTM 和 GRU 是模型选择过程的标准部分。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造