zoukankan      html  css  js  c++  java
  • GRU and LSTM

    门控循环单元(GRU):

    背景:

      当时间步数较大或者时间步数较小的时候,循环神经网络的梯度较容易出现衰减或者爆炸。虽然裁剪梯度可以应对梯度爆炸,

    但是无法解决梯度衰减的问题。正因为如此,循环神经网络在实际中难以捕捉时间序列中的时间步较大的依赖的关系。门控循环

    神经网络的提出,真是为了更好地捕捉时间序列中时间步较大的依赖关系。它通过可以学习的门来控制信息的流动。

    重置门和更新门:(修改了循环神经网络中隐藏状态的计算方式)

      门控循环单元中的重置门和更新门的输入均为当前时间步输入 X与上一时间步的隐藏状态 Ht-1,输出由激活函数sigmoid函数

    的全连接层计算得到。

    计算过程:

      假设隐藏单元的个数为 h ,给定时间步 t 的小批量输入,(样本数量为 n ,输入个数为 d )和上一时间步的隐藏状态

    重置门和更新门的计算如下

      因为sigmiod函数可以将元素的值变换到0和1之间,因此重置门和更新门中的每个元素的值域都是【0,1】

    候选隐藏状态:

      门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态的计算。我们将当前时间步的重置门的输出与上一时间步的隐藏状态

    做按元素乘法(符号为 )。如果重置门中的元素值接近 0 ,则意味着重置对应隐藏状态元素为 0 ,即丢弃上一时间步的隐藏状态。

    如果元素值接近1,那么表示保留上一时步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输入连接,在通过激活函数tanh的

    全连接层计算出候选隐藏状态,其所有元素的值域都为【-1,1】

      具体的来说,时间步 t 的候选状态的计算为:

      从这个公式可以看出,重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。而上一时间不的隐藏状态

    可能包含了时间序列截止至上一时间步的全部历史信息。因此,重置门可以用来丢弃与预测无关的历史信息。

    隐藏状态:

    最后时间步 t 的隐藏状态的计算使用当前时间步的更新门Zt来对上一时间步的隐藏状态 Ht-1 和当前时间步的候选隐藏

    状态 做组合:

     

      值得注意的是,更新门可以控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,假设更新门在时间步 t‘ 到 t 之间一直近似 1

    那么,在时间步 t‘ 到 t 之间的输入信息几乎没有流入时间步 t 的隐藏状态 Ht 。实际上,这可以看作较早时刻的隐藏状态 一直通过时间

    并传递至当前时间步 t 。这个设计可以应对循环神经网络中的梯度衰减问题,并更好的捕捉时间序列中时间步距离较大的依赖关系。

    总结:

    1、重置门有助于捕捉时间序列里短期的依赖关系;

    2、更新门有助于捕捉时间序列里长期的依赖关系。

     

     

     

  • 相关阅读:
    Python解决编码问题: `UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position 10
    python中关于windows文件名非法字符的过滤处理
    IDEA 卡住半天,buid(编译)不动——解决办法(适用于maven和gradle)及定位全过程
    Linux 系统常见压缩文件(.deb、.rpm等)解压记录
    Linux Redis 安装异常处理
    从hdfs导入数据到hive表
    Python:Rocketmq消息队列使用
    Linux的nohup命令使用 —— 在服务器后台一直执行程序
    kafka:安装和命令行使用
    kafka报错:kafka.errors.NoBrokers Available,Close of session 0x100457e83740000 java.io.IOException 和 The broker is trying to join the wrong cluster
  • 原文地址:https://www.cnblogs.com/hanouba/p/10703066.html
Copyright © 2011-2022 走看看