RNN的自我和解

时间:2021-02-18 13:36:34   收藏:0   阅读:0

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. 解决梯度问题

 

  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结构

技术图片

 

 


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

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

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

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!