码迷,mamicode.com
首页 > 其他好文 > 详细

RNN的自我和解

时间:2021-02-18 13:36:34      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:gradient   pat   pxe   tgs   权重   参考   数据   vfp   rnn   

RNN

  1. 为什么要用RNN

    1. 输出是多个值,普通的前向传播网络只有一个 label。

    2. 输入之间有顺序关系,输出之间也有顺序关系。

     综上,针对有顺序关系的预测值,可以用 RNN。


  1. RNN 的特点

    1. Multiple copies of the same network

        因此常看见 rnn 的网络结构示意图,是自己指向自己。

        牢记! RNN 的 w, b 在所有 units 间是一模一样的!所以叫做 copies。

      2. hidden_state 作为下一个的输入。

技术图片


  1. RNN 的正向传播

技术图片

  1.  h = tanh ( W_hh * h + W_xh *x)  这个 hidden_state 要传给下一个 lstm unit。

  2.  y = W_hy * h 

  3. 根据 application 不同,我们可能 y0, y1,...yn 都重要(翻译),也可能只在乎最后一个(next word prediction)。

 

  1. RNN 的反向传播

    1. 一直不太理解的点在于,既然所有 lstm unit 都用同样的 weight matrix,那反向传播,岂不是经过一个 unit 就要更新一遍?

      其实是图像干扰了。写成表达式比较直接。

      Yt = g(V*ht)

      ht = tanh(....)

      ht_1 = …

      也就导致 yt 其实涉及了所有输入。因此反向传播的结果,也会涉及到纵向传播,以及横向传播。不会造成更新多次的问题。


      但是也反映出“记忆” 所有 inputs。

      

      2. 梯度爆炸/梯度消失

      缘于 long-term dependencies。

      因为要 trace back to t1,期间涉及 Whh + repeated gradient。small * small -> gradient vanish / large*large -> gradient explosion。

      当序列很长的时候,尤为严重。

 

      Sigmoid 函数及其导数(容易导致梯度消失)

技术图片

 

        Tanh 函数及其导数(容易导致梯度消失)

技术图片

 

        Relu 的函数及其导数(容易导致梯度爆炸)

技术图片

 

        3. 解决梯度问题

  • 将激活函数从 tanh -> relu
    •   (tanh)’ = 1 - tanh*tanh
    •   (sigmoid)’ = sigmoid ( 1- sigmoid)
    •   当 x > 0 时, tanh, sigmoid 的 gradient 都小于1,且随着 x 增大而减小。而 relu 的 gradient 永远是1,因此,能避免梯度消失 。
  • 初始化 weights
    •   Identity matrix。
    •   其实本质上没有解决问题,只要 iteration 次数增大,依然有这个问题。只不过将过程放缓了而已。
  • Gated cell :
    •   控制长期信息对当下的重要性影响。
    •       不重要的信息扔掉,不用更新上一个状态。
    •   E.G: lstm,gru。

 

  1. LSTM

    1. 参考:https://www.cnblogs.com/jiangxinyang/p/9362922.html

    2. Why:解决 long-term dependencies

    3. 重要结构-gate:通过 sigmoid 将输入限制到了(0,1)。可以想象成 how much information can be passed。

技术图片

       

      4. LSTM结构

技术图片

 

  •   Forget:接了 sigmoid,说明 input 就被限制到了 (0, 1) 区间内。看图,发现过 sigmoid 的是 xt*h_(t-1) ,可以理解成以前的历史状态和现在越相似,越有保留的价值。否则,把历史都扔了。
  •   Store: 就更像是 rnn 的基础结构了。只不过还多了一个 sigmoid,同样是有的放矢的存储输入信息。
  •   Update:Store + forget 得到新的 cell state
  •   Output:还是 上一个的 hidden state + 当下 input,再过激活函数,得hidden_state。只不过多了些门。

 


      5. 为什么 lstm 解决梯度爆炸问题

      1.   因为 gate 的输出,要么接近1,要么接近0。为1 时,减轻了梯度消失,为零时,为零时,放弃更新上一状态的梯度。

      2.   根据输入数据的不同,可能有的数据想让权重变大,有的数据想让权重变小。所以适当的遗忘一些输入数据,是合理的。

RNN的自我和解

标签:gradient   pat   pxe   tgs   权重   参考   数据   vfp   rnn   

原文地址:https://www.cnblogs.com/toonice/p/14407149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!