4 GRU模型


  • 学习目标:
    • 了解GRU内部结构及计算公式.
    • 掌握Pytorch中GRU工具的使用.
    • 了解GRU的优势与缺点.

  • GRU(Gated Recurrent Unit)也称门控循环单元结构, 它也是传统RNN的变体, 同LSTM一样能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时它的结构和计算要比LSTM更简单, 它的核心结构可以分为两个部分去解析:
    • 更新门
    • 重置门

  • 4.1 GRU的内部结构图和计算公式:

5.4 GRU模型


  • 结构解释图:

5.4 GRU模型


  • 4.2 GRU的更新门和重置门结构图:

5.4 GRU模型


  • 内部结构分析:
    • 和之前分析过的LSTM中的门控一样, 首先计算更新门和重置门的门值, 分别是z(t)和r(t), 计算方法就是使用X(t)与h(t-1)拼接进行线性变换, 再经过sigmoid**. 之后更新门门值作用在了h(t-1)上, 代表控制上一时间步传来的信息有多少可以被利用. 接着就是使用这个更新后的h(t-1)进行基本的RNN计算, 即与x(t)拼接进行线性变化, 经过tanh**, 得到新的h(t). 最后重置门的门值会作用在新的h(t),而1-门值会作用在h(t-1)上, 随后将两者的结果相加, 得到最终的隐含状态输出h(t), 这个过程意味着重置门有能力重置之前所有的计算, 当门值趋于1时, 输出就是新的h(t), 而当门值趋于0时, 输出就是上一时间步的h(t-1).

  • Bi-GRU与Bi-LSTM的逻辑相同, 都是不改变其内部结构, 而是将模型应用两次且方向不同, 再将两次得到的LSTM结果进行拼接作为最终输出. 具体参见上小节中的Bi-LSTM.

  • 4.3 Pytorch中GRU工具的使用:
    • 位置: 在torch.nn工具包之中, 通过torch.nn.GRU可调用.

  • nn.GRU类初始化主要参数解释:
    • input_size: 输入张量x中特征维度的大小.
    • hidden_size: 隐层张量h中特征维度的大小.
    • num_layers: 隐含层的数量.
    • nonlinearity: **函数的选择, 默认是tanh.
    • bidirectional: 是否选择使用双向LSTM, 如果为True, 则使用; 默认不使用.

  • nn.GRU类实例化对象主要参数解释:
    • input: 输入张量x.
    • h0: 初始化的隐层张量h.

  • nn.GRU使用示例:
>>> import torch
>>> import torch.nn as nn
>>> rnn = nn.GRU(5, 6, 2)
>>> input = torch.randn(1, 3, 5)
>>> h0 = torch.randn(2, 3, 6)
>>> output, hn = rnn(input, h0)
>>> output
tensor([[[-0.2097, -2.2225, 0.6204, -0.1745, -0.1749, -0.0460],
[-0.3820, 0.0465, -0.4798, 0.6837, -0.7894, 0.5173],
[-0.0184, -0.2758, 1.2482, 0.5514, -0.9165, -0.6667]]],
grad_fn=<StackBackward>)
>>> hn
tensor([[[ 0.6578, -0.4226, -0.2129, -0.3785, 0.5070, 0.4338],
[-0.5072, 0.5948, 0.8083, 0.4618, 0.1629, -0.1591],
[ 0.2430, -0.4981, 0.3846, -0.4252, 0.7191, 0.5420]],
 
[[-0.2097, -2.2225, 0.6204, -0.1745, -0.1749, -0.0460],
[-0.3820, 0.0465, -0.4798, 0.6837, -0.7894, 0.5173],
[-0.0184, -0.2758, 1.2482, 0.5514, -0.9165, -0.6667]]],
grad_fn=<StackBackward>)

  • 4.4 GRU的优势:
    • GRU和LSTM作用相同, 在捕捉长序列语义关联时, 能有效抑制梯度消失或爆炸, 效果都优于传统RNN且计算复杂度相比LSTM要小.

  • 4.5 GRU的缺点:
    • GRU仍然不能完全解决梯度消失问题, 同时其作用RNN的变体, 有着RNN结构本身的一大弊端, 即不可并行计算, 这在数据量和模型体量逐步增大的未来, 是RNN发展的关键瓶颈.






  • 小节总结:
    • GRU(Gated Recurrent Unit)也称门控循环单元结构, 它也是传统RNN的变体, 同LSTM一样能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时它的结构和计算要比LSTM更简单, 它的核心结构可以分为两个部分去解析:
      • 更新门
      • 重置门
    • 内部结构分析:
      • 和之前分析过的LSTM中的门控一样, 首先计算更新门和重置门的门值, 分别是z(t)和r(t), 计算方法就是使用X(t)与h(t-1)拼接进行线性变换, 再经过sigmoid**. 之后更新门门值作用在了h(t-1)上, 代表控制上一时间步传来的信息有多少可以被利用. 接着就是使用这个更新后的h(t-1)进行基本的RNN计算, 即与x(t)拼接进行线性变化, 经过tanh**, 得到新的h(t). 最后重置门的门值会作用在新的h(t),而1-门值会作用在h(t-1)上, 随后将两者的结果相加, 得到最终的隐含状态输出h(t), 这个过程意味着重置门有能力重置之前所有的计算, 当门值趋于1时, 输出就是新的h(t), 而当门值趋于0时, 输出就是上一时间步的h(t-1).
    • Bi-GRU与Bi-LSTM的逻辑相同, 都是不改变其内部结构, 而是将模型应用两次且方向不同, 再将两次得到的LSTM结果进行拼接作为最终输出. 具体参见上小节中的Bi-LSTM.
    • Pytorch中GRU工具的使用:
      • 位置: 在torch.nn工具包之中, 通过torch.nn.GRU可调用.
    • GRU的优势:
      • GRU和LSTM作用相同, 在捕捉长序列语义关联时, 能有效抑制梯度消失或爆炸, 效果都优于传统RNN且计算复杂度相比LSTM要小.
    • GRU的缺点:
      • GRU仍然不能完全解决梯度消失问题, 同时其作用RNN的变体, 有着RNN结构本身的一大弊端, 即不可并行计算, 这在数据量和模型体量逐步增大的未来, 是RNN发展的关键瓶颈.

 
 

相关文章:

  • 2021-11-03
  • 2022-12-23
  • 2021-07-30
  • 2021-10-23
  • 2021-08-05
猜你喜欢
  • 2021-06-21
  • 2021-07-21
  • 2021-10-08
  • 2021-10-25
  • 2021-07-29
  • 2021-04-26
相关资源
相似解决方案