【循环神经网络3】门控循环单元GRU详解

1 GRU的提出背景

GRU提出的Motivation是为了解决传统RNN(1986)中在处理实际问题时遇到的长期记忆丢失和反向传播中的++梯度消失或爆炸++ (详见【循环神经网络1】一文搞定RNN入门与详解-CSDN博客的4.4节)等问题。

相较于LSTM(1997),GRU于更晚的2014年由论文1412.3555提出,其优势在于能用更少的计算资源得到于LSTM几乎相当的效果。

GRU模型通过引入门控机制,可以更好地控制信息的流动,并有效地缓解梯度消失和梯度爆炸问题。这使得网络能够更好地捕捉到长期依赖关系,提高模型的性能和泛化能力。

2 GRU的原理与结构

2.1 重置门和更新门

GRU引入了两个最重要的门控单元:

  1. 重置门(reset gate)控制"可能还想记住"的过去状态的数量。

  2. 更新门(update gate)控制新状态中有多少个旧状态的副本。

GRU 的数学有如下的形式化描述,对于给定的时间步 t,假设输入一个小批量 (其中 n 表示样本数,d 表示输入数),前一个时间步的隐状态是 (其中 h 表示隐藏单元数),则重置门 和更新门 的计算如下所示:

以上 的计算步骤相同,这里拿 举例:

  1. 用于和输入 做矩阵乘法,得到一个大小为 的矩阵;

  2. 用于和上一时间步的隐状态做矩阵乘法,得到一个大小为 的矩阵;

  3. 是一个向量,与前面两个得到的矩阵相加时 torch 中"广播机制"会把 扩充为相同 n 行。

  4. 然后将计算结果通过激活函数 sigmoid 将每个元素映射到 (0, 1) 区间,用来充当遗忘门控信号。

  5. 最后得到一个矩阵,大小不变 ,维度 1 是 batch 的大小,维度 2 是隐层节点数,该矩阵的每个元素相当于一个遗忘信号,控制与 对应位置上的元素,决定了记住上一时间步信息的比例。例如,当 表示上一时间步的隐状态全部拿去作后续计算;当 表示上一时间步的隐状态全部拿去作后续计算。

从上面 5 个计算步可以看出,本小结一共有六组要学习的参数:

  • 重置门 对应参数 ,参数个数分别为

  • 更新门 对应参数 ,参数个数分别为

因此,一共有 个参数要通过反向传播来更新。


2.2 候选隐状态

目前为止,我们得到了重置门 ,更新门 的计算结果,但对于要更新的隐状态是如何计算的还没进行描述。在GRU中,通常先通过 计算得到一个候选隐状态 ,然后用 来决定更新的程度。

下面阐述候选隐状态的详细计算过程:

  1. 将重置信号 做元素乘积(哈达玛积),即 ,然后与 做矩阵乘法,得到一个大小为 的矩阵,n 是 batch 的大小;

  2. 然后用 和输入 做矩阵乘法,得到一个大小为 的矩阵;

  3. 同时用 向量,与前面两个得到的矩阵相加时 torch 中"广播机制"会把 扩充为相同 n 行。

  4. 最后,得到在时间步 t 的候选隐状态矩阵

其中符号 表示哈达玛积运算符。这里,使用 来确保候选隐状态矩阵 中 element-wise 值映射到区间 (-1, 1) 内。

小结,从上面4个计算步可以看出,本小结一共有3组要学习的参数,分别是 ,参数个数分别为 。因此,一共有 个参数要通过反向传播来更新。

注:哈达玛积的符号问题。

细心的读者可能会注意到笔者在LSTM中对哈达玛积使用的是 符号,它与 的区别主要在于:

  • 正式数学写作中 ,推荐使用 ,这是由数学界广泛接受的标准符号:
  • 机器学习/深度学习论文中,\odot 非常流行(例如在 LSTM、注意力机制中常见):

总的来说,使用 都是可行的。


2.3 隐状态更新

有了重置门 ,更新门 的计算结果,以及一个候选隐状态 ,一切准备就绪后,接下来我们对进行更新操作。

通过上面的运算,我们得到了一个候选隐状态 ,现在要做的是结合更新门 来最终确定时间步 t 的隐状态在多大程度上由 和新得到的 决定。刚才我们把 的每个元素都限定在了 (0, 1) 区间,此时可以做一凸组合,就像 DDPG 中的软更新一样,只不过这个控制参数 是可学习的。因此,对于当前时间步的隐状态 ,可由下式计算:

从该式可以看出,当 趋于 0 时,新的隐状态 几乎来自于 。不过需要思考一下这样设计的理由。假如所有时间步的更新门 都接近 1,则无论是多长的序列数据,距离当前时刻最久远的隐状态都能很好的保留到后续的计算中。To this end,我们得到一个完成 GRU 单元计算流,如下图所示(简化起见,省略了待学习参数矩阵乘法的标注)。


2.4 最终输出

与 RNN 相同的是,得到了当前时间步的隐状态,我们要将其映射到下游任务需要的特征维度,因此引入矩阵 和向量 用于最后的线性层映射,其中输出的特征维度为 。以上计算可由 (4) 表示

重置门有助于提取序列中的短期依赖关系,更新门有助于获取序列数据的长期依赖关系。


3 GRU与LSTM的对比

【循环神经网络2】长短期记忆网络LSTM详解-CSDN博客https://blog.csdn.net/colus_SEU/article/details/152164629?spm=1001.2014.3001.5501LSTM详解如上▲

  • 结构复杂度:

    • GRU 的结构相对 LSTM 更简单,它只有两个门控机制和一个隐藏状态,

    • 而 LSTM 有三个门控机制(输入门、遗忘门、输出门)和一个单元状态,

    • 因此 GRU 的计算量相对较小,训练速度更快。

  • 性能表现:

    • 在大多数情况下,GRU 和 LSTM 都能很好地处理序列数据中的长期依赖问题,

    • 但在某些任务中,GRU 可能因为结构简单而表现稍逊一筹,

    • 而在另一些对计算资源要求较高或数据量较小的场景下,GRU 可能更具优势。

相关推荐
乌恩大侠12 小时前
【USRP】AI-RAN Sionna 5G NR 开发者套件
人工智能·5g
孤狼灬笑12 小时前
机器学习十大经典算法解析与对比
人工智能·算法·机器学习
聚梦小课堂12 小时前
ComfyUI Blog: ImagenWorld 发布:面向图像生成与编辑的真实世界基准测试数据集
人工智能·深度学习·图像生成·benchmark·imagenworld
星际棋手12 小时前
【AI】一文说清楚神经网络、机器学习、专家系统
人工智能·神经网络·机器学习
测试开发技术12 小时前
什么样的 prompt 是好的 prompt?
人工智能·ai·大模型·prompt
M17迪Pq:000712 小时前
学会“做减法”之--用户体验优化
人工智能·贪心算法·产品运营·动态规划·软件工程
闲人编程12 小时前
深入浅出Transformer:使用Hugging Face库快速上手NLP
python·深度学习·自然语言处理·nlp·transformer·hugging face·codecapsule
教练、我想打篮球12 小时前
13 pyflink/scala 进行 csv 文件的批处理
人工智能·机器学习
文火冰糖的硅基工坊12 小时前
[创业之路-702]:“第三次”与“第四次工业革命”的范式跃迁
大数据·人工智能·科技·嵌入式硬件·架构·嵌入式·gpu
XIAO·宝12 小时前
深度学习------YOLOV1和YOLOV2
人工智能·深度学习·yolo