zoukankan      html  css  js  c++  java
  • 理解循环神经网络的来龙去脉

    一、为什么会出现循环神经网络?

      传统的语言模型中,计算特定序列中多个单词出现概率的公式为(以下式子),P(w1,,wm)一般只考虑前 n 个单词而不是考虑全部之前的单词。

          上式对语音、翻译系统中判断一个词序列是否是输入句子的准确翻译起了重要作用。这些只依赖前面1个词(bigram)、依赖前面2个词(trigram)、... 、依赖前面连续n个单词窗口的方式可能不足以捕获足够的上下文信息。在所有传统语言模型中,随着窗口n的增大,系统所需的运行内存也会呈现指数级增长,使得几乎不可能对较大型的词窗口的语言模型建模,因为很可能会out of memory。

      但循环神经网络RNN不同于传统的语言模型,它有能力以语料库中所有前面的单词为条件进行建模。RNN是包含循环的网络,允许信息的持久化。网络结构图及展开图如下所示:

    二、RNN存在的问题及其改进LSTM的原理?

       理论上,RNN可以处理来自前边相当远处的信息,但实际上,由于在反向传播过程中,从前面时间步回传过来的梯度值会逐渐消失,出现梯度消失,所以在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。所以在实际中,RNN很难解决这样的长期依赖问题,这样训练RNN变得相当困难。

           LSTM 通过刻意的设计(门控单元)来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为,而非需要付出很大代价才能获得的能力!

       LSTM的图如下:

       具体解释如下:包含3个门(输入门input gate、遗忘门forget gate、输出门output gate)、new/candidate memory cell(ct~)、final memory cell(ct)、隐藏状态ht

    三、LSTM及其变体GRU的比较?

      GRU是LSTM的变体,简化版。相比LSTM,GRU将输入门和遗忘门合成了单一的更新门update gate(在图中为zt),同时它还混合了cell state和hidden state。

      GRU有两个门,一个是reset gate(重置门)(用于对ht-1的信息进行控制,负责确定 ht1 对总结 h˜t的重要程度。如果确定 ht1与新的记忆的计算无关,则复位门能够完全消除过去的隐藏状态,即忽略之前隐藏的信息)、一个是update gate(更新门),负责确定有多少 ht1可以向前传递到下一个状态。例如,如果 ut≈0,那么ht1几乎是完全向前传递到下一个隐藏状态。反过来,如果 ut≈1,那么大部分的新的记忆 h˜t向前传递到下一个隐藏状态。

      GRU的图如下:

      具体公式如下:

    四、双向RNN

      双向深度神经网络;在每个时间步 t,这个网络维持两个隐藏层,一个是从左到右传播而另外一个是从右到左传播。为了在任何时候维持两个隐藏层,该网络要消耗的两倍存储空间来存储权值和偏置参数。最后的分类结果 yˆ,是结合由两个 RNN 隐藏层生成的结果得分产生。下图展示啊了双向 RNN的网络结构。 

    五、带attention机制的LSTM

  • 相关阅读:
    队列的python实现
    MySQL主从复制原理的是啥?
    Centos7 将应用添加快捷方式到applications 中以pycham为例[ubuntu]适用
    Centos7 虚拟环境安装Django 出现ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' %Database.sqlite_version)错误
    Centos7 安装virtualenv bash: virtualenv: command not found...的解决
    Flask学习之 Jinja2模板引擎
    Flask学习之 Flask-Script 扩展
    Flask学习之 请求钩子
    VUE项目部署公网ip和端口以及使用域名访问配置
    Android app图标总是显示默认的机器人图标,且在manifest文件的application中修改无效...
  • 原文地址:https://www.cnblogs.com/yanmk/p/9514347.html
Copyright © 2011-2022 走看看