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

Recurrent Neural Network (RNN)

一、什么是RNN面试

二、LSTM网络

  1、什么是LSTM框架

  2、LSTM框架函数

三、RNN分析学习

 

RNN

一、什么是RNN

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

 

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

  1)、目标:假设咱们如今作这么一个事情,说下面一句话,系统会自动知道Taipei是目的地,November是时间3d

 

            

    

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

 

                 

 

 

   3)、所以要解决这个问题,模型须要有memory,这就引出了RNNip

    

 

      RNN具体是怎么作到记忆的呢get

   

                       

 

 

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

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

                  

 

 

    4)RNN种类

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

 

           

 

二、LSTM

  1、什么是LSTM

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

                    

 

         举个栗子说明:

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

      输出:一维vector y

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

     

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

 

                                       

 

 

 

                                                   

 

 

                                       

 

 

  2、LSTM框架

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

 

              

 

    进一步揭开LSTM面纱

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

                     

 

 

      多层的LSTM感觉一下

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

 

                    

 

三、RNN分析

   1、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并非这里的关键点。

 

    2、悬崖问题分析

    如今w是咱们要学习的参数,咱们须要知道它的gradient,只要稍微改变w 的值,看看对output有多大的影响。

  

 

 

 

    3、问题解决方案

    面试题: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在多数的状况下都是开启的,只要少数的状况是关闭的

 

   

相关文章
相关标签/搜索