循环神经网络(RNN)

人们不是每一秒都从头开始思考,就像你阅读本文时,不会从头去重新学习一个文字,人类的思维是有持续性的。传统的卷积神经网络没有记忆,不能解决这一个问题,循环神经网络(Recurrent Neural Networks)可以解决这一个问题,在循环神经网络中,通过循环可以解决没有记忆的问题,如下图:

看到这里,你可能还是不理解为什循环神经网络就可以有记忆。我们把这个图展开:

可以看出,我们输入 \(X_0\) 后,首先警告训练,得到输出 \(h_0\),同时会把这个输出传递给下一次训练 \(X_1\),普通的神经网络是不会这样做的,这时对 \(X_1\) 进行训练时,输入就包括了 \(X_1\) 本身和 训练 \(X_0\) 的输出,前面的训练对后面有印象,同样的道理,之后的每一次训练都收到了前面的输出的影响(对 \(X_1\) 训练的输出传递给训练 \(X_2\) 的过程,\(X_0\) 对 \(X_2\) 的影响是间接的)。

遇到的问题

循环神经网络很好用,但是还有一些问题,主要体现在没办法进行长期记忆。我们可以想象(也有论文证明),前期的某一次输入,在较长的链路上传递时,对后面的影响越来越小,相当于网络有一定的记忆能力,但是记忆力只有 7 秒,很快就忘记了,如下图 \(X_0\) 和 \(X_1\) 对 \(h_{t+1}\) 的影响就比较小了(理论上通过调整参数避免这个问题,但是寻找这个参数太难了,实践中不好应用,因此可以近似认为不可行),LSTM 的提出就是为了解决这个问题的。

LSTM

LSTM(Long Short Term Memory)本质还是一种 RNN,只不过其中的那个循环,上图中的那个 A被重新设计了,目的就是为了解决记忆时间不够长的问题,其他神经网络努力调整参数为的是使记忆力更好一点,结果 LSTM 天生过目不忘,简直降维打击!

普通的 RNN 中的 A 如下图,前一次的输入和本次的输入,进行一次运算,图中用的是 tanh:

相比较起来,LSTM 中的 A 就显得复杂了好多,不是上图单一的神经网络层,而是有四层,如下图,并且似乎这么看还有点看不懂,这就是本文需要重点分析的内容,仔细认真读下去,定会有收获:

定义一些图形的含义,黄色方框是简单的神经网络层;粉色的代表逐点操作,如加法乘法;还有合并和分开(拷贝)操作:

核心思想

首先看下图高亮部分,前一次的输出,可以几乎没有阻碍的一直沿着这条高速公路流动,多么简单朴素的思想,既然希望前面的训练不被遗忘,那就一直传递下去:

当然,为了让这种传递更加有意义,需要加入一些门的控制,这种门具有选择性,可以完全通过,可以完全不通过,可以部分通过,S 函数(Sigmoid)可以达到这样的目的,下面这样就是一个简单的门:

总结一下,我们构造 LSTM 网络,这个网络有能力让前面的数据传递到最后,网络具有长期记忆的能力,同时也有门的控制,及时舍弃那些无用的记忆。

详细分析

有了这样的核心思想,再看这个网络就简单了好多,从左到右第一层是“选择性忘记”。我们根据前一次的输出和本次的输入,通过 Sigmoid 判断出前一次哪些记忆需要保留和忘记:

第二部分又分为了两个部分,一个部分是“输入门层”,用 Sigmoid 决定哪些信息需要进行更新,另一个部分是创建候选值向量,即本次输入和上次输出进行初步计算后的中间状态:

经过前面的计算,我们可以更新单元格的状态了。第一步,前一个的单元格哪些数据需要传递,哪些数据需要忘记;第二步,本次的哪些数据需要更新,乘以本次计算的中间状态可以得到本次的更新数据;再把前两步的数据相加,就是新的单元格状态,可以继续向后传递。

这一步需要决定我们的输出:第一步,我们用 Sigmoid 来判断我们需要输出的部分;第二步,把上面计算得到的单元格状态通过 tanh 计算将数据整理到 -1 到 1 的区间内;第三步,把第一步和第二步的数据相乘,就得到了最后的输出:

总结一下我们刚刚做了什么:我们首先通过本次的输入和上次的输出,判断出上次单元格状态有哪些数据需要保留或舍弃,再根据本次的输入进行网络训练,进一步得到本次训练的单元格状态和输出,并将单元格状态和本次的输出继续往后传递。

这里有一个疑问,为什么需要舍弃?举个例子,翻译一篇文章,一篇文章前一段介绍某一个人的详细信息和背景,下一段介绍今天发生的某个故事,两者的关系是弱耦合的,需要及时舍弃前面对人背景信息的记忆,才会更好的翻译下面的故事。

其他一些基于 LSTM 修改版的网络,本质是一样的,只不过把某些地方打通了,有论文验证过,一般情况下对训练的结果影响很小,这里不展开介绍,大同小异,修内功而不是那些奇奇怪怪的招式:

总结

本文介绍了长短期记忆网络,在大多数情况下,若在某个领域用 RNN 取得了比较好的效果,其很可能就是使用的 LSTM。这是一篇好文,本文图片来自Understanding-LSTMs,值得一读。

  • 本文首发自: RAIS

LSTM - 长短期记忆网络的更多相关文章

  1. Long-Short Memory Network(LSTM长短期记忆网络)

    自剪枝神经网络 Simple RNN从理论上来看,具有全局记忆能力,因为T时刻,递归隐层一定记录着时序为1的状态 但由于Gradient Vanish问题,T时刻向前反向传播的Gradient在T-1 ...

  2. LSTM长短期记忆网络

    Long Short Term Memory networks : http://colah.github.io/posts/2015-08-Understanding-LSTMs/

  3. 递归神经网络之理解长短期记忆网络(LSTM NetWorks)(转载)

    递归神经网络 人类并不是每时每刻都从头开始思考.正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词.你不会丢弃所有已知的信息而从头开始思考.你的思想具有持续性. 传统的神经网络不能做到这 ...

  4. 理解长短期记忆网络(LSTM NetWorks)

    转自:http://www.csdn.net/article/2015-11-25/2826323 原文链接:Understanding LSTM Networks(译者/刘翔宇 审校/赵屹华 责编/ ...

  5. 如何预测股票分析--长短期记忆网络(LSTM)

    在上一篇中,我们回顾了先知的方法,但是在这个案例中表现也不是特别突出,今天介绍的是著名的l s t m算法,在时间序列中解决了传统r n n算法梯度消失问题的的它这一次还会有令人杰出的表现吗? 长短期 ...

  6. LSTMs 长短期记忆网络系列

    RNN的长期依赖问题 什么是长期依赖? 长期依赖是指当前系统的状态,可能受很长时间之前系统状态的影响,是RNN中无法解决的一个问题. 如果从(1) “ 这块冰糖味道真?”来预测下一个词,是很容易得出“ ...

  7. TensorFlow——LSTM长短期记忆神经网络处理Mnist数据集

    1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2. ...

  8. Keras(五)LSTM 长短期记忆模型 原理及实例

    LSTM 是 long-short term memory 的简称, 中文叫做 长短期记忆. 是当下最流行的 RNN 形式之一 RNN 的弊端 RNN没有长久的记忆,比如一个句子太长时开头部分可能会忘 ...

  9. LSTM(Long Short-Term Memory)长短期记忆网络

    1. 摘要 对于RNN解决了之前信息保存的问题,例如,对于阅读一篇文章,RNN网络可以借助前面提到的信息对当前的词进行判断和理解,这是传统的网络是不能做到的.但是,对于RNN网络存在长期依赖问题,比如 ...

随机推荐

  1. 【Linux】dlopen failed: /lib/lsiRAID.so: cannot open shared object file: No such file or directory

    遇到这个问题,首先第一反应,是看其他的服务器中是否有这个库文件,如果有的话直接cp过来一份就行 但是检查发现,其他的系统中也不存在lsiRAID.so这个库文件,很神奇.. 但是看日志持续报错,查看s ...

  2. kubernets之namespace

    一 命名空间的介绍以及作用 1  概念 为了方便不同部门之间对kubernets集群的使用,并且对其进行有效的隔离,kubernets提供了一种资源隔离手段,通过将各种不同资源分组到 一个区域,并且统 ...

  3. ctfhub技能树—sql注入—过滤空格

    手注 查询数据库 -1/**/union/**/select/**/database(),2 查询表名 -1/**/union/**/select/**/group_concat(table_name ...

  4. random模块常用函数

    random模块常用函数: from random import * # Random float: 0.0 <= x < 1.0 random() # Random float: 2.5 ...

  5. LSTM+CRF进行序列标注

    为什么使用LSTM+CRF进行序列标注 直接使用LSTM进行序列标注时只考虑了输入序列的信息,即单词信息,没有考虑输出信息,即标签信息,这样无法对标签信息进行建模,所以在LSTM的基础上引入一个标签转 ...

  6. 阿里云RDS物理备份恢复到本地

    一:业务场景 验证阿里云备份文件可用性 二:恢复到本地过程中遇到的问题 1.修改密码报错 2.自定义函数不可用 三:恢复步骤 1.xtrabackup安装使用 请参考:https://www.cnbl ...

  7. centos7制作U盘启动盘-九五小庞

    一.准备相关软件 1.8G以上U盘 2.UltraISO虚拟光驱(试用版即可)最新版 下载地址:https://cn.ultraiso.net/xiazai.html  点击下载试用 3.CentOS ...

  8. scrapy-redis非多网址采集的使用

    问题描述 默认RedisSpider在启动时,首先会读取redis中的spidername:start_urls,如果有值则根据url构建request对象. 现在的要求是,根据特定关键词采集. 例如 ...

  9. a.default.ERROR.httpAjax is not a function

    原因1: 使用的是jQuery的slim构建,它删除了一些东西,ajax就是其中之一. 解决方法: 在此处下载常规(压缩或非压缩)版本的jQuery并将其包含在您的项目中. 原因2: 使用其他库引起了 ...

  10. YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. data = yaml.load(file_data)

    YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsa ...