门控循环单元(Gated Recurrent Unit,GRU)是一种常用于自然语言处理和序列数据处理中的神经网络模型,在循环神经网络(Recurrent Neural Network,RNN)中被广泛运用。GRU与长短期记忆网络(Long Short-Term Memory,LSTM)以及普通的循环神经网络相似,都可以处理序列数据的建模。本文将从以下几个方面对门控循环单元进行详细介绍:背景、基本原理、结构、优缺点以及应用。
一、 背景
在NLP(自然语言处理)领域,循环神经网络是一类用于序列数据处理(例如文本或音频)的神经网络,其最早应用可以追溯到二十年代的Williams有关Dynamic Time Warping(动态时间规整)和Brezhnev的实现,“时延神经元”模型。它可以使用来自之前时间步的输入来为当前时间步的输出提供上下文信息,可用于自然语言处理中的语言模型、机器翻译、情感分析等方面的任务。
尽管最初的 RNN 能记住长序列数据,但是在训练长序列时,随着时间步骤的增加,网络的梯度会逐渐消失,因此很难处理长序列数据。为解决这个问题,Hochreiter 和 Schmidhuber 在 1997 年提出了 LSTM,该结构能够处理长序列数据,并且在长时间内可以避免梯度消失的现象,这大大提高了 RNN 的工作效率。Hochreiter 和 Schmidhuber 还在 2001 年提出了门控循环单元(GRU),来进一步简化和改善 LSTM。
二、 基本原理
门控循环单元是一种特殊的RNN,用于学习和表示序列数据。GRU 基于 LSTM 发展而来,也利用门控机制来控制序列中的信息流动。LSTM 和 GRU 都采用了门控来控制信息的流动和提高对长序列的表示能力,因此两者在很多方面是非常相似的。
与 LSTM 不同,GRU 取消了状态 (state) 的结构,在原来LSTM内部的记忆门和遗忘门的基础上,设计了一个重置门 (reset gate) 和一个更新门 (update gate),从而使得梯度消失和梯度爆炸的问题得到一定程度的解决。具体而言,GRU 中的两个门控制了在当前时间步状态 (state) 应该保留多少之前的信息,以及在当前时间步中是否需要更新链的状态。GRU 的状态和 LSTM 相同,都是用记忆向量 (memory vector) 表示,但是它的信息量比 LSTM 更少。因此 GRU 不仅具有更好的运算速度,还能够有效地避免模型对长序列的拟合过度而出现过拟合的情况。
GRU 的基本原理是根据历史时刻的状态和输入进行更新,也可以将其视作一种基于时间的神经网络,用于预测随时间变化的连续值(长序列数据)。
三、结构解析
普通的 RNN 模型将序列中的每个值,包括上一个时刻的输出和当前时刻的输入都送到神经网络中进行处理,而 GRU 则是添加了两个门(update gate和reset gate),并使用 1 - update gate 控制 t-1 时刻的状态和当前时刻的输入之间的关系。reset gate 也是一个 sigmoid 函数,用于控制上一时刻状态向当前输入进行多少重置。
GRU 的计算可以归纳为以下两个步骤:
1、更新门(update gate)计算:$z_t=\sigma(W_z[h_{t-1},x_t])$ ,其中 $h_{t-1}$ 是上一时刻隐藏状态(也指内部记忆),$x_t$ 是当前输入,$W_z$ 是 update gate 相关的权重,$\sigma$ 是 sigmoid 函数,输出值为 $[0,1]$ 中的一个实数。此公式可以看成控制上一状态的原有信息与加入当前时刻输入信息的结合比例。当该值接近 0 时,意味着网络应该忘记以前的状态,全部采用当前时刻的输入作为新状态来计算。当该值接近 1 时,意味着网络应该尽可能地重用以前的状态。
2、重置门(reset gate)计算:$r_t=\sigma(W_r[h_{t-1},x_t])$ ,其中 $h_{t-1}$ 是上一时刻隐藏状态(同上),$x_t$ 是当前输入,$W_r$ 是 reset gate 相关的权重,$\sigma$ 是 sigmoid 函数,与上面类似,输出值为 $[0,1]$ 中的一个实数。该值用于调节原有的状态到底有多少是应该被抛弃的。
3、输出门计算:$\widetilde{h}_t=\tanh(W[\widetilde{h}_{t-1},r_t \circ h_{t-1},x_t])$,其中 $\widetilde{h}_t$ 是当前时刻的输出,$\widetilde{h}_{t-1}$ 是上一时刻的输出,$[r_t \circ h_{t-1}]$ 表示将重置门的控制和之前的状态进行结合,$W$ 是相关的权重参数,$\circ$ 表示逐元素乘积,$\tanh$ 函数用于限制输出的取值范围,使神经网络更容易学习。
4、状态更新: $h_t = (1-z_t) \circ h_{t-1} + z_t \circ \widetilde{h}_t$ ,其中 $h_t$ 表示 GRU 在当前时刻的隐藏或状态向量,$\circ$ 表示逐元素乘积。该更新式体现了重置门和更新门的结合,基本思路就是将重置门计算的信息与上一时刻的状态做结合,然后由更新门的作用选择一定比例的以前状态和新状态的某个加权平均值。
最终,GRU 的计算过程是将上一时刻的状态和当前的输入传入到两个门中,其输出结合成当前时刻的输出。该当前时刻的状态成为内部记忆,然后将其传递到下一时刻,循环计算直至序列结束。
四、 优缺点
(1)优点
在序列数据处理任务中,GRU 模型具有如下优点:
1. 训练时间短。因为 GRU 基于 LSTM 进行简化和改善,在门限数目上进行了优化,对深层网络进行训练时所需时间较少。
2. 记忆长短。GRU 模型通过重置门、更新门的利用,能够深度学习处理长序列数据,并能够更好地处理长时序列中每个阶段之间的信息流动。
3. 更好的抗噪声能力。GRU 模型能