循环神经网络(RNN)

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

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

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

遇到的问题

循环神经网络很好用,但是还有一些问题,主要体现在没办法进行长期记忆。我们可以想象(也有论文证明),前期的某一次输入,在较长的链路上传递时,对后面的影响越来越小,相当于网络有一定的记忆能力,但是记忆力只有 7 秒,很快就忘记了,如下图 X0X_0X0​ 和 X1X_1X1​ 对 ht+1h_{t+1}ht+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. 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据

    文章来源| 脑机接口社区群友 认知计算_茂森的授权分享 在此非常感谢 认知计算_茂森! 本篇文章主要通过思维导图来介绍利用LSTM(长短期记忆网络)来处理脑电数据. 文章的内容来源于社区分享的文章&l ...

  2. 利用LSTM(长短期记忆网络)来处理脑电数据

    目录 LSTM 原理介绍 LSTM的核心思想 一步一步理解LSTM 代码案例 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 Rose小哥今天介绍一下用LS ...

  3. Maltab GUI课程设计——LSTM长短期记忆网络回归预测

    文章目录 课程设计 平台:Matlab App designer 功能实现:LSTM长短期记忆网络回归预测 目的: 演示: 欢迎交流 课程设计 平台:Matlab App designer 功能实现: ...

  4. 神经网络学习笔记3——LSTM长短期记忆网络

    目录 1.循环神经网络 1.1循环神经网络大致结构 1.2延时神经网络(Time Delay Neural Network,TDNN) 1.3按时间展开 1.4反向传播 1.5 梯度消失,梯度爆炸 2 ...

  5. Pytorch LSTM 长短期记忆网络

    Pytorch LSTM 长短期记忆网络 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小技巧:当遇到函数看不懂的时候可 ...

  6. 深度学习 LSTM长短期记忆网络原理与Pytorch手写数字识别

    深度学习 LSTM长短期记忆网络原理与Pytorch手写数字识别 一.前言 二.网络结构 三.可解释性 四.记忆主线 五.遗忘门 六.输入门 七.输出门 八.手写数字识别实战 8.1 引入依赖库 8. ...

  7. RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

    全文链接:http://tecdat.cn/?p=25133 2017 年年中,R 推出了 Keras 包 _,_这是一个在 Tensorflow 之上运行的综合库,具有 CPU 和 GPU 功能(点 ...

  8. LSTM(长短期记忆网络)原理介绍

    相关学习资料: Pytorch:RNN.LSTM.GRU.Bi-GRU.Bi-LSTM.梯度消失.爆炸 难以置信!LSTM和GRU的解析从未如此清晰 RNN_了不起的赵队-CSDN博客_rnn 如何从 ...

  9. LSTM(长短期记忆网络)原理与在脑电数据上的应用

    LSTMs(Long Short Term Memory networks,长短期记忆网络)简称LSTMs,很多地方用LSTM来指代它.本文也使用LSTM来表示长短期记忆网络.LSTM是一种特殊的RN ...

  10. LSTM -长短期记忆网络(RNN循环神经网络)

    文章目录 基本概念及其公式 输入门.输出门.遗忘门 候选记忆元 记忆元 隐状态 从零开始实现 LSTM 初始化模型参数 定义模型 训练和预测 简洁实现 小结 基本概念及其公式 LSTM,即(long ...

最新文章

  1. Eclipse+Maven创建web项目
  2. python基础代码库-python基础--注册和登录功能 代码
  3. 利用HttpRequester进行接口测试
  4. webstrom 运行 vue项目_vue3.0创建项目及API讲解(一)
  5. 小智机器人江苏赞_智能机器人小智
  6. oracle快速备份全库,做了两次rman 全库备份,如何快速删除第一次的备份?
  7. 常用于单片机的接口适配器模式C语言实现
  8. 2011年华科计算机考研复试笔试算法、数据库(回忆版)
  9. python字符串用空格切片_Python切片操作去除字符串首尾的空格
  10. 为何要弃 Java、Swift 于不顾,而选择 Python?
  11. Python开源微博工具:Twitter
  12. 因为应用程序正在发送一个输入同步呼叫,所以无法执行传出的呼叫 -- 解决方法...
  13. 14种鼻型图解_十种鼻型分类图详细解析
  14. 10g日志挖掘logmnr
  15. 《MySQL入门学习》(p61~p62)
  16. 为什么我的服务器没有信号,服务器显示器无信号
  17. 最长的指定瑕疵度的元音字串
  18. IPEmotion新增功能:交流电功率分析计算
  19. 报错:“TypeError: Cannot read property ‘0‘ of undefined“的原因
  20. 朋友.心情父子.亲情

热门文章

  1. 华为钱包无法连接服务器_您好 华为手机出现无法连接服务器是怎么回事?
  2. JAVA8的一些写法
  3. chrome18-使用network waterfall分析页面载入性能
  4. main flag redefined: graceful
  5. linux smb 添加用户,samba创建新用户
  6. 当 dbt 遇见 TiDB丨高效的数据转换工具让数据分析更简单
  7. 旅游|受不住热暑的炎烤 就到山上“凉拌”空气去
  8. 金三银四找工作,真没你想的那么难!
  9. 云服务优缺点_云服务是什么,它有哪些优缺点?
  10. 配置8266连接中移物联网OneNet平台