zoukankan      html  css  js  c++  java
  • LSTM、RNN、GRU

    RNN

    Recurrent Neural Networks,即循环神经网络,是一种时间上进行线性递归的神经网络。

    它在每个时刻接收一个输入 xt 和上一时刻的隐藏状态 ht-1,计算得到 ht。

    左侧是模型的基本结构,右侧就是它在时间上进行展开的示意图。

     

    RNN 中常用的激活函数是 tanh。

     

    而RNN中的问题:

    ① t 时刻的激活函数导数会传播到 t-1,t-2,... ,1 时刻,这样就有了连乘的系数,会导致梯度消失和梯度爆炸。(求解梯度使用 BPTT 算法)

    ② 前向过程中,开始时刻的输入对后面时刻的影响越来越小,这就是长距离依赖问题。

     

    LSTM

    Long Short Term Memory 网络的神经元使用了三个门结构:输入门、输出门、遗忘门。整体上除了隐藏状态h在随时间流动,细胞状态C也在随时间流动,细胞状态C就代表着长期记忆。每个时刻 Ct = Ct-1 * 遗忘门 + 输入门,同时它经过 tanh 后又是输出门的因子之一。

    (1)遗忘门:决定丢弃哪些信息。

      ht-1 与 xt 通过 sigmoid 确定哪些信息保留或丢弃多少。

       

    (2)输入门:决定给细胞状态添加哪些新的信息。

      ht-1 与 x通过 sigmoid 确定要更新哪些地方以及更新多少。ht-1 与 x通过 tanh 得到要更新的信息。这两个值相乘得到更新的具体内容。

      

    (3)遗忘门与输入门更新 C。

      遗忘门得到的数值乘以 C,实现了遗忘。加上输入门得到的数值,把新内容加入 C 中,这样使用输入对 C 进行了更新。

      

    (4)输出门:ht-1 与 x通过 sigmoid 确定输出哪些地方以及输出权重,C 通过 tanh 得到要输出的信息。相乘得到输出值。

      

     

    LSTM 能避免梯度消失;而梯度爆炸不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如 gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。

    为何 LSTM 能避免梯度消失。前面说到 RNN 梯度被表示为连成积,所以导致很快逼近 0。而 LSTM 使用累加的形式计算状态,所以导数也是累加的,就不会出现梯度消失了。

     

    GRU

    GRU(Gate Recurrent Unit)是 RNN 的一种。GRU 是 LSTM 的一个变体,在保持了 LSTM 的效果同时又使结构更加简单。GRU 更容易进行训练,能够很大程度上提高训练效率。

    GRU模型中只有两个门:更新门、重置门。

    (1)更新门:用于控制过去信息与当前信息的比例。

      [ht-1, xt] 乘参数 Wz,然后通过 sigmoid 确定 zt

      更新门得到的值 zt 可以同时进行遗忘和记忆。

      

    (2)重置门:用于控制忽略前一时刻的状态信息的程度。

      [ht-1, xt] 乘参数 Wr,然后通过 sigmoid 确定 rt

      

    (3)使用重置门控来得到“重置”之后的数据。

      ht-1 乘 rt 得到重置的数据。重置后的数据与 xt 拼接,通过一个 tanh 将数据放缩到 -1~1 的范围内,得到 h~t

      

    (4)(1-zt) * ht-1 用来选择忽略之前的信息,zt * h~t 用来保留新的数据。

      

     

    GRU 使用了一个门控 z 就同时可以进行遗忘和选择记忆,简化了计算。对于过去的信息,遗忘了 z 大小的部分,使用当前信息的相应大小来弥补。

    训练时,参数 Wr、Wz、Wh。是拼接的,所以在训练的过程中需要将他们分割出来。

      

  • 相关阅读:
    实习第一天
    附加、分离数据库和备份、还原数据库的区别(转载于中雪的BLOG)
    2014-08-29 Last Day
    2014-08-26 解决HttpContext.Current.Session在ashx文件中出现“未将对象引用设置到对象的实例”的问题
    什么是Ajax? (转载于疯狂客的BLOG)
    Response.Expires 属性 (转载于疯狂客的BLOG)
    2014-08-22 关于Response、Request等对象在cs文件中的使用
    ASP.NET获取IP的6种方法(转载于LanceZhang's Tech Blog)
    2014-08-13 SQL语句之Left Join
    2014-08-07 优秀程序员所应具备的思想
  • 原文地址:https://www.cnblogs.com/sumuyi/p/12859096.html
Copyright © 2011-2022 走看看