zoukankan      html  css  js  c++  java
  • 简述RNN Recurrent Neural Networks

    本文结构:

    什么是 Recurrent Neural Networks ?
    Recurrent Neural Networks 的优点和应用?
    训练 Recurrent Neural Networks 的问题?
    如何解决?
    何时用 RNN 何时用前馈网络呢?


    什么是 Recurrent Neural Networks ?

    普通的前馈神经网络模型,它的结构是信号以一个方向从输入走到输出,一次走一层。

     
     

    在 RNN 中,前一时刻的输出会和下一时刻的输入一起传递下去。
    可以把这个过程看成是一个随着时间推移的流。
    在这里显示的是四个时间点,在t=1的时候,网络取到t=0的时候的输出,并且将它和下一个输入一起发送回给网络。

     
     

    Recurrent Neural Networks 的优点和应用?

    和前馈神经网络不同,RNN 可以接收一系列的数据作为输入,而且也可以返回一系列的值作为输出。这种可以处理序列化数据的功能,使得这个网络得以非常广泛的应用。

    当输入是一个的时候,输出是一个序列的时候,这可以用于 image captioning (让计算机用一句话来描述这张图片)。

     
     

    输入是一个序列,输出是1个数据的时候,这个模型可以被用来分类。

     
     

    当输入是一个序列,输出也是一个序列的时候,可以用来对视频一帧一帧的分类。

     
     

    当引入时间延迟的时候,就可以用于供应链计划里的需求预测。

     
     

    当把几个RNN堆起来时,得到的这个新的网络就可以输出比单独一个RNN更为复杂的结果。

     
    Paste_Image.png

    训练 Recurrent Neural Networks 的问题?

    RNN 是很难被训练的,训练的时候也使用 Back Propagation,所以这也存在着梯度消失的问题,而且这个梯度消失的问题会是指数级别的。

    原因就是,RNN的每个时间点,就相当于一个前馈神经网络的整个层,
    所以训练100步的模型就相当于训练一个100层的前馈网络。
    这就造成了随着时间的推移,梯度会以指数级的速度减小,进而造成信息的衰变。

     
     

    如何解决?

    有很多方式可以解决这个问题,其中之一就是 Gating。

    这个技术的好处就是它可以决定,什么时候需要忘记当前的输入,什么时候需要记住它,以便将来的步骤里会用到它。

    今天最流行的 Gating 就是 LSTM 和 GRU。

    当然也有一些其他的方法 Gradient clipping, Better optimizer, Steeper Gates。

     
     

    训练神经网络的时候用 GPU 要比用 CPU 好。
    研究表明,用 GPU 训练会比 CPU 训练快250倍。(现在可能更快了)
    这就是一天和八个月的区别。

    何时用 RNN 何时用前馈网络呢?

    前馈神经网络,它会输出一个数据,可以用来做分类或者回归。
    RNN 适合时间序列的数据,它的输出可以是一个序列值或者一序列的值。
    所以说,如果要做分类或者回归的话,可以用前馈是神经网络,如果要预测的话,可以用循环神经网络。




  • 相关阅读:
    【数据分析&数据挖掘】拉格朗日插值法
    【数据分析&数据挖掘】异常值的判断与去除——3σ & 箱线图分析
    集腋成裘-13-git使用-02进阶篇
    饮冰三年-人工智能-Python-30 python开发中常见的错误
    饮冰三年-人工智能-Python-31博客园山寨版
    集腋成裘-12-git使用-01创建库
    饮冰三年-人工智能-Python-27 Django Form组件
    饮冰三年-人工智能-Python-29瀑布流
    饮冰三年-人工智能-Python-28 企业官网(组合搜索)
    使用ExtJs建一个后台界面框架
  • 原文地址:https://www.cnblogs.com/codehome/p/9729873.html
Copyright © 2011-2022 走看看