趋近智
门控循环单元 (GRU) 由 Cho 等人于2014年提出,它为处理序列数据提供了一种有效方法。尽管长短期记忆 (LSTM) 网络也以解决梯度消失问题和捕捉长距离依赖而闻名,但它们因其三个不同的门和独立的细胞状态而导致结构较为繁复。GRU 旨在实现类似的能力,但采用更简洁的架构。
GRU 通过将遗忘门和输入门合并为一个“更新门”,并整合细胞状态和隐藏状态,从而简化了 LSTM 中发现的门控机制。这种单元只有两个门:
主要区别在于门控结构:
GRU 中的这种简化导致其参数 (parameter)数量少于具有相同隐藏单元数量的 LSTM。这可以使 GRU 在计算上略微更高效(训练更快,内存占用更少),并且在较小数据集上可能更不容易过拟合 (overfitting)。
然而,LSTM 增加的复杂性可能会使其在某些任务中建模特别复杂的长距离依赖方面更具优势。在实践中,LSTM 和 GRU 之间的性能差异通常取决于具体任务,两者都没有普遍的优越性。通常会尝试两种架构,以查看哪种方案在特定问题上表现更好。
以下是单个 GRU 单元内数据流的简化视图:
GRU 单元的简化表示。它呈现了重置门 () 如何影响候选隐藏状态 () 的计算,以及更新门 () 如何在先前状态 () 和候选状态之间进行平衡以生成最终隐藏状态 ()。Sigmoid () 和 tanh 激活函数 (activation function)通常分别用于门和候选状态。
在 Keras 中实现 GRU 层非常直接,并且与使用 SimpleRNN 或 LSTM 类似。您可以从 keras.layers 导入它。
import keras
from keras import layers
# 示例:用于序列处理的堆叠 GRU 层
model = keras.Sequential([
layers.Embedding(input_dim=10000, output_dim=16, input_length=100), # 示例嵌入层
layers.GRU(units=32, return_sequences=True), # 第一个 GRU 层,返回完整序列
layers.GRU(units=32), # 第二个 GRU 层,只返回最后一个输出
layers.Dense(units=1, activation='sigmoid') # 用于二元分类的输出层
])
model.summary()
重要的参数 (parameter),如 units(输出/隐藏状态的维度)、activation(默认通常为 tanh)、recurrent_activation(通常用于门控为 sigmoid)以及 return_sequences,其行为与 LSTM 层中的对应项类似。
GRU 是 LSTM 的有力替代方案,尤其是在以下情况:
正如深度学习 (deep learning)中的许多选择一样,建议进行实证验证。在您的特定序列建模任务(例如,文本分类、时间序列预测)上尝试 LSTM 和 GRU 两种架构,并在验证集上评估它们的性能,以确定最合适的选项。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造