门控循环单元(GRU)是长短期记忆(LSTM)的简化版本。让我们在本文中看看它是如何工作的。
本文将解释门控循环单元(GRU)的工作原理。由于如果我们事先了解长短期记忆(LSTM),就可以很容易地理解GRU,所以我强烈建议先学习关于LSTM的知识。您可以查看我的关于LSTM的文章。
从Vanilla RNN到LSTM:长短期记忆的实用指南 | 作者:Shivamshinde | 2023年1月 | VoAGI
门控循环单元(GRU)是长短期记忆(LSTM)单元的简化版本。它们都用于使我们的循环神经网络更长时间地保留有用的信息。它们都同样出色。对于不同的用例,它们的性能会有所不同。对于一个用例,LSTM可能效果更好,而对于另一个用例,GRU可能效果更好,我们需要尝试两者,然后选择性能更高的用于实际模型训练。
然而,使用GRU在网络中有一些优势。
- 正如我们将在本文中看到的,GRU有两个门,训练速度更快。这在内存和处理能力较少时非常有用。
- 此外,它们在小数据集上能够获得很好的结果。
现在让我们了解一下GRU的工作原理。
请注意下面图示中符号的含义:
下面方程中变量的含义
Wxz,Wxr,Wxg是连接到输入向量x(t)的每个门的权重矩阵。
Whz,Whr,Whg是连接到上一个状态h(t-1)的每个门的权重矩阵。
bz,br,bg是每个门的偏置项。
关于GRU的基本信息
从高层次来看,GRU可以被认为是具有相同数量输入和输出的简单RNN单元的更好版本。然而,GRU的内部结构略有不同。
与LSTM不同,GRU只有一个状态向量。可以说,在GRU的情况下,长期和短期向量合并为一个。
GRU由三个模块组成。它们是
- 基本RNN模块,g(t)
- 执行遗忘无用信息和记住新重要信息的门,z(t)
- 确定应将多少先前状态用作输入的门,r(t)
GRU接受两个输入。它们是
- 先前细胞的状态,h(t-1)
- 训练数据输入,x(t)
GRU单元输出两个项。它们是
- 当前细胞的状态,h(t)
- 当前细胞的预测,y(t)
现在,让我们了解如何使用这些输入来计算每个输出。
计算当前细胞的状态
基本上,细胞的状态通过两个量的相加来确定。第一个量告诉我们应从先前状态中遗忘多少。第二个量告诉我们应从训练数据输入中记住多少。
让我们了解第一个量。
如上图所示,z(t)将前一个状态和训练数据作为输入。在这里,它充当了一个遗忘门的作用。z(t)门的值决定了在这个时间步骤中应该忘记多少前一个状态。前一个状态和训练输入与它们对应的权重相乘,然后将偏差加到它们的总和上。在对这个总和应用sigmoid函数之后,我们将得到z(t)的值。前一个状态和z(t)的值的逐元素乘积给出了我们计算当前时间步骤状态所需的第一个量。在上图中,第一个量以绿色显示。
让我们来了解第二个量。
z(t)的值的计算方式与第一个量的计算方式相同。但是这里的(1 – z(t))充当了一个输入门的作用。基本的RNN单元g(t)接受两个输入。它们是
- 训练数据输入,x(t)
- r(t)和前一个状态h(t-1)的逐元素乘积
计算r(t)的方式与计算z(t)的方式相同,只是计算中使用的权重和偏差不同。r(t)的值告诉我们前一个状态的哪一部分应该作为输入提供给简单的RNN单元g(t)。
g(t)的两个输入分别与它们对应的权重相乘,然后将偏差项加到它们的总和上。然后,将这个最终的总和值传递给双曲正切函数,得到g(t)的值。
现在,g(t)与(1 – z(t))(即输入门)的逐元素乘积将给出我们计算当前时间步骤状态所需的第二个量。在上图中,第二个量以绿色显示。
现在我们已经找到了两个量,它们的相加将给出我们当前时间步骤状态。
在GRU单元中,当前状态的值等于预测值。因此,由于我们已经计算出了当前状态,我们也就计算出了当前时间步骤的预测。
到目前为止,我们已经看到了组成整个GRU的不同部分,以便更好地理解它。因此,让我们将到目前为止看到的所有部分组合起来。
这是整个GRU网络图。
希望您喜欢这篇文章。文章中的图示是我手绘的。希望它们足够直观(并且不会太乱),以便清楚地理解GRU。如果您对文章有任何想法,请告诉我。另外,如果您喜欢这篇文章,请鼓掌。
请通过以下方式与我联系:
个人网站
邮件地址:shivamshinde92722@gmail.com
祝您有个美好的一天!