李宏毅机器学习笔记14(RNN)

Recurrent Neural Network (RNN)

1、什么是RNN

2、LSTM

  一、什么是LSTM

  二、LSTM框架

3、RNN分析

RNN

1、什么是RNN

  • RNN可以处理序列的信息(即前面的输入对后面是有关系的)

  下面通过一个订票系统的例子去说明什么是RNN:

  1)、目标:假设我们现在做这么一个事情,说下面一句话,系统会自动知道Taipei是目的地,November是时间

            

    

    2)、如果没有把这句话当做一个序列,那么用前馈神经网络方法的话,这样是没有考虑到上下文的。

                 

   3)、因此要解决这个问题,模型需要有memory,这就引出了RNN

    

      RNN具体是怎么做到记忆的呢

   

                       

     再看看RNN是如何解决Slot Filling的问题:

  •   注意的是,下面不是三个神经网络,而是同一个神经网络 

                  

    4)RNN种类

     双向神经网络:在产生Y{t+1}的时候,你的network不只是看过xtx{t+1}所有的input,它也看了从句尾到x{t+1}的input

           

2、LSTM

  一、什么是LSTM

  •    左图中,LSTM是四输入一输出,其中有三个gate,每个gate打开还是关闭,都是学出来的
  •         右图中,Z,Zi,Z0都是数值输入,三个gate使用的激活函数是sigmoid,于是把各个输入输出就可以用式子表示出来

                    

         举个栗子说明:

      输入:三维vector[x1,x2,x3]

      输出:一维vector y

      下图从左到右表示更新过程,蓝色代表memory

     

    代入LSTM中训练:(假设要训练的bias-10和weight100都已知)

                                       

                                                   

                                       

  二、LSTM框架

  •    LSTM的参数是普通神经网络的四倍

              

    进一步揭开LSTM面纱

  •      输入Xt先经过线性转化为4个vector组成的Z

                     

      多层的LSTM感受一下

  •   C是memory的vector
  •        h是上一个LSTM神经元隐层的输出

                    

3、RNN分析

   一、RNN会出现“悬崖”(梯度消失或爆炸)问题

  Total Loss对于参数的偏导的曲面是很不平整的,有很多断崖,因此会出现好几种情况:

  • 第一种:1→2→3跳跃到悬崖上
  • 第二种:1→2→4踩到墙脚
  • 第三种:1→2→4→5加大学习率后直接飞出去

  用clipping方法(当gradient大于某一个threshold的时候,不要让它超过那个threshold),当gradient大于15时,让gradient等于15结束

                    

   为什么RNN会有这样的特性?是不是因为sigmoid函数会造成梯度消失?换成ReLU会不会解决这个问题?
  答案是:sigmoid函数不是造成不平整的原因,且ReLU在RNN上表现并不如sigmoid。所以activation function并不是这里的关键点。

    二、悬崖问题分析

    现在w是我们要学习的参数,我们需要知道它的gradient,只要稍微改变w 的值,看看对output有多大的影响。

  

    三、问题解决方案

    面试题:LSTM为什么可以解决RNN的梯度消失问题? 

   

    LSTM和RNN在处理memory cell里面的值的方式不一样:
      RNN每次都把新的值存到memory cell里面,旧的值被替换;
      LSTM则用了input gate的计算结果与输入相乘后的值累加到memory cell里面。


    思想

  •       RNN每次都替换旧的值,旧的值没有办法对最后的值有所影响;
  •       LSTM则采用累加策略,旧的值的还在memory cell里面,也就意味旧的值还持续影响最后输出;
  •      也就是说在LSTM里面,一旦对memory造成影响,那影响一直会被留着(除非forget gate要把memory的值洗掉),不然memory一旦有改变,只会把新的东西加进来,不会把原来的值洗掉,所以它不会有gradient vanishing的问题

 

     其实LSTM的第一个版本其实就是为了解决gradient vanishing的问题,所以它是没有forget gate,forget gate是后来才加上去的。甚至,现在有个传言是:你在训练LSTM的时候,你要给forget gate特别大的bias,你要确保forget gate在多数的情况下都是开启的,只要少数的情况是关闭的

   

 

原文地址:https://www.cnblogs.com/xxlad/p/11412272.html