zoukankan      html  css  js  c++  java
  • 李宏毅机器学习笔记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在多数的情况下都是开启的,只要少数的情况是关闭的

       

     

  • 相关阅读:
    SQL------Hint
    JVM——垃圾回收
    JVM——内存结构
    SpringMVC——拦截器,过滤器实现登录拦截
    SpringMVC——参数传递
    SpringMVC——数据乱码问题
    SpringMVC——MVC执行流程底层剖析
    Spring——5种增强方式
    Spring——bean的五种作用域和生命周期
    Spring——多种方式实现依赖注入
  • 原文地址:https://www.cnblogs.com/xxlad/p/11412272.html
Copyright © 2011-2022 走看看