门控循环单元(GRU)是一种用于循环神经网络的门控机制,由Kyunghyun Cho及其同事于2014年提出。它旨在通过使用两个门(更新门和重置门)来控制过去信息的保留或遗忘,从而解决标准循环网络中常见的梯度消失问题。与长短期记忆(LSTM)单元相比,GRU的架构更简单:它没有单独的记忆单元向量和输出门,因此参数更少,训练通常更快。尽管简化了结构,GRU在诸如复调音乐建模、语音信号建模和自然语言处理等任务上表现出与LSTM相当的性能。Yoshua Bengio团队的研究发现,门控机制普遍有益,但并未就GRU或LSTM在总体上孰优孰劣得出明确结论。
架构
GRU逐步处理输入序列,并维护一个随时间步传递信息的隐藏状态。在每个时间步,单元计算更新门和重置门,两者都是当前输入和先前隐藏状态的函数。更新门决定将多少先前状态传递到未来,而重置门决定在计算候选激活时使用多少过去状态。最终隐藏状态是先前状态和候选激活的凸组合,由更新门加权。
数学上,对于输入向量\(x_t\)和先前隐藏状态\(h_{t-1}\),门和候选激活计算如下:
- 更新门:\(z_t = \sigma(W_z x_t + U_z h_{t-1} + b_z)\)
- 重置门:\(r_t = \sigma(W_r x_t + U_r h_{t-1} + b_r)\)
- 候选激活:\(\hat{h}_t = \phi(W_h x_t + U_h (r_t \odot h_{t-1}) + b_h)\)
- 最终隐藏状态:\(h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \hat{h}_t\)
这里,\(\sigma\)是sigmoid激活函数,\(\phi\)通常是双曲正切函数,\(\odot\)表示Hadamard(逐元素)乘积。权重矩阵\(W_z, W_r, W_h\)和\(U_z, U_r, U_h\)以及偏置向量\(b_z, b_r, b_h\)在训练过程中学习得到。初始隐藏状态通常设为零。
变体
GRU存在多种变体,它们在门的计算或组合方式上有所不同。一个值得注意的简化版本是最小门控单元,它仅使用一个门(通常是更新门和重置门的组合)来降低计算复杂度。其他变体可能调整操作顺序或重置门与先前状态的交互方式。这些修改旨在提高特定任务上的效率或性能,但门控信息流的核心原则保持一致。
应用
GRU已广泛应用于序列建模任务,包括自然语言处理(如机器翻译、语言建模)、语音识别和音乐生成。它们还用于时间序列预测,以及在与卷积层或注意力机制结合的混合架构中。在许多场景下,GRU作为LSTM的轻量级替代方案,尤其是在计算资源有限或序列长度适中时。
与LSTM的比较
GRU和LSTM都是为了缓解梯度消失问题而开发的,但它们在内部结构上有所不同。LSTM有三个门(输入门、遗忘门和输出门)以及一个独立的单元状态,而GRU有两个门且没有独立的单元状态。这使得GRU参数效率更高,训练通常更快。实证研究表明,在许多基准任务上,GRU的性能与LSTM相似,但结果可能因数据集和任务而异。一些研究建议,GRU在较小数据集上可能泛化更好,而LSTM在较大数据集上可能表现更优,但尚未确立明确的优势。