传统的神经网络模型中,输入层到隐含层再到输出层他们的层与层之间是全连接的,但是每层之间的节点是无连接的。这样就会造成一个问题,有些情况,每层之间的节点可能是存在某些影响因素的。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。而递归神经网络就能很好的解决这类问题。

概念

递归神经网络,又称循环神经网络(RNN, Recurrent Neural Networks)。是一种通过隐藏层节点周期性的连接,来捕捉序列化数据中动态信息的神经网络,可以对序列化的数据进行分类。和其他前向神经网络不同,RNN可以保存一种上下文的状态,甚至能够在任意长的上下文窗口中存储、学习、表达相关信息,而且不再局限于传统神经网络在空间上的边界,可以在时间序列上有延拓,直观上讲,就是本时间的隐藏层和下一时刻的隐藏层之间的节点间有边。RNN广泛应用在和序列有关的场景,如如一帧帧图像组成的视频、一个个词汇组成的句子等。RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关 。RNN 是包含循环的网络,其主要特点是允许信息的持久化。

LSTM

RNN采用传统的BP+梯度下降法对参数进行学习,当前层的误差函数跟当前层的输出直接相关,而当前层的输出依赖于前面每一层的输入及隐藏状态。这种深层神经网络容易出现梯度消失或梯度爆炸的问题,为了解决这个问题,衍生出了LSTM(Long Short Term Memory)长短期记忆网络。LSTM区别于RNN的地方,主要就在于它在算法中加入了一个判断信息有用与否的“处理器”,这个处理器作用的结构被称为cell。
一个cell当中被放置了三扇门,分别叫做输入门、遗忘门和输出门。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘。

结构

所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。

LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。

每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

LSTM 的关键就是细胞状态,水平线在图上方贯穿运行。细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

“门”结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。即:0 代表“不许任何量通过”,1 就指“允许任意量通过”

执行步骤:

1.决定丢弃信息:遗忘门会读取 h_{t-1} 和 x_t,输出一个在 0 到 1 之间的数值给每个在细胞状态 C_{t-1} 中的数字。1 表示“完全保留”,0 表示“完全舍弃”。

2.确定新信息存放:这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。第二,tanh 层创建一个新的候选值向量,~{C}_t,会被加入到状态中,这两个信息来产生对状态的更新。

3.旧信息更新:C_{t-1} 更新为 C_t。把旧状态与 f_t 相乘,丢弃掉我们确定需要丢弃的信息。接着加上 i_t * ~{C}_t。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

4.输出:运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。然后把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终输出确定输出的那部分。

实例

以典型的CharRnn为例,训练样本为全唐诗,项目地址https://gitee.com/nine_sun/CharRNN

训练:

测试:

这尼玛写的都什么破玩意!!!

主要是没那么多时间训练,只迭代了10次~~

相关学习资源

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

https://www.jianshu.com/p/9dc9f41f0b29

http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns

人工智障学习笔记——深度学习(3)递归神经网络相关推荐

  1. 人工智障学习笔记——深度学习(2)卷积神经网络

    上一章最后提到了多层神经网络(deep neural network,DNN),也叫多层感知机(Multi-Layer perceptron,MLP). 当下流行的DNN主要分为应对具有空间性分布数据 ...

  2. 人工智障学习笔记——深度学习(4)生成对抗网络

    概念 生成对抗网络(GAN)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discrimi ...

  3. 人工智障学习笔记——深度学习(1)神经网络

    一.神经网络 我们所说的深度学习,其最基础最底层的模型称之为"神经网络"(neural network),因为我们希望机器能够像我们人类大脑的神经网络处理事件一样去解决问题,最终达 ...

  4. Matlab深度学习笔记——深度学习工具箱说明

    本文是Rasmus Berg Palm发布在Github上的Deep-learning toolbox的说明文件,作者对这个工具箱进行了详细的介绍(原文链接:https://github.com/ra ...

  5. 学习笔记--深度学习入门--基于Pyrhon的理论与实现--[日]斋藤康毅 -- 持续更新中

    关于这本 "神作" 的简介 这本书上市不到 2 年,就已经印刷 10 万册了.日本人口数量不大,但是却有这么多人读过这本书,况且它不是一本写真集,是实实在在的技术书,让人觉得很不可 ...

  6. 3Blue1Brown深度学习笔记 深度学习之神经网络的结构 Part 1 ver 2.0

    神经元 3B1B先讨论最简单的MLP(多层感知器),只是经典的原版,就已经能识别手写数字. 这里一开始我们把神经元看作装有数字的容器,装着一个0~1之间的数字.但是最后更准确一些,我们把神经元看作一个 ...

  7. 学习笔记︱深度学习以及R中并行算法的应用(GPU)

    笔记源于一次微课堂,由数据人网主办,英伟达高级工程师ParallerR原创.大牛的博客链接:http://www.parallelr.com/training/ 由于本人白痴,不能全部听懂,所以只能把 ...

  8. 夯实产业智能化基座,OpenI/O 2020启智开发者大会纵论深度学习

    点击左上方蓝字关注我们 当科技与生活无可割离的交融,深度学习正推动AI步入工业化大生产阶段,加速产业智能化进程的同时,给各产业带来了巨大的增值空间和机遇. 在此时代潮流中,在此时代潮流中,超算与云计算 ...

  9. 系列笔记 | 深度学习连载(6):卷积神经网络基础

    点击上方"AI有道",选择"星标"公众号 重磅干货,第一时间送达 卷积神经网络其实早在80年代,就被神经网络泰斗Lecun 提出[LeNet-5, LeCun ...

最新文章

  1. 项目总监批评程序员穿大裤衩上班情商低!程序员一气之下要离职!项目已到一半了,总监着急发帖求助!...
  2. 用工具进行CAD转换图片的过程
  3. keras网络变为pytorch网络的一些参考
  4. 访问一个HTTPS的网站的大致流程
  5. 反应能力测试题_微笑抑郁的表现症状有哪些?你是否正在受微笑抑郁困扰?(内附测试题)...
  6. Windows To Ghost系统封装之必备软件集 - 好压
  7. 2016中国信息通信大数据大会召开在即,精彩看点提前揭晓
  8. 为什么微信、Facebook都在做企业通信软件
  9. 大牛精心挑选的25个Visual Basic学习资料汇总
  10. C语言Float的存储大小
  11. android 4.4 root精灵,ROOT精灵: 支持安卓4.3/4.4机型一键ROOT
  12. 二维码生成器如何制作二维码
  13. Qt Style Sheet实践(二):组合框QComboBox的定制
  14. c#Winform自定义控件-目录
  15. Java 添加Word项目符号、编号列表
  16. Windows10 MySQL8.0版本的压缩包安装方式
  17. 会员营销体系中,企业会员营销需要注意的三个会员问题
  18. 周浩正:写给编辑人的信 关于“编辑”
  19. Python3 九九乘法表 四种形式 --学习笔记001
  20. 计算机考研怎么给老师发邮件,怎么发邮件-考研重要一环,如何给心仪的导师发邮件!内附邮件格式...

热门文章

  1. 32 FI配置-财务会计-应收账款和应付账款-定义客户预付款的统驭科目
  2. 一起学习C语言:数组(一)
  3. php mysql 日期查找_PHP / MySQL存储和搜索日期
  4. 多态和重载的区别及用法
  5. 随机抽样一致算法(RANSAC)理论介绍和程序实现
  6. 剑指Offer14-剪绳子12
  7. 收录查询 php,google收录查询代码-PHP源码
  8. listview 刷新结束 监听_Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
  9. VOC数据集将XML转为对应的train.txt,trainval.txt,val.txt,test.txt
  10. phpcms函数:用*号替换(私密信息)中间数据(如手机号、邮箱)