小常识10:  循环神经网络(RNN)与长短时记忆网络LSTM简介。

本文目的:在计算机视觉(CV)中,CNN 通过局部连接/权值共享/池化操作/多层次结构逐层自动的提取特征,适应于处理如图片类的网格化数据。在自然语言处理(NLP)中,循环神经网络被设计用于处理序列的神经网络,如应用 RNN 在语音识别,语言建模,翻译等。同时,现有的计算机视觉研究开始结合CNN与RNN的使用,应用于视频目标检测,图像字幕生成等既有图像数据,又具备序列化特点的任务。所以了解循环神经网络及其变种,有助于更好的理解神经网络的设计理念,能在不同的任务中合理选用不同的神经网络。

循环神经网络(RNN):

RNN是在自然语言处理领域中最先被用起来的,比如,RNN可以为语言模型来建模。我们写出一个句子前面的一些词,然后,让电脑帮我们写下接下来的一个词。比如下面这句:

我昨天上学迟到了,老师批评了____。

语言模型是对一种语言的特征进行建模,它有很多很多用处。比如在语音转文本(STT)的应用中,声学模型输出的结果,往往是若干个可能的候选词,这时候就需要语言模型来从这些候选词中选择一个最可能的。当然,它同样也可以用在图像到文本的识别中(OCR)。

使用RNN之前,语言模型主要是采用N-Gram。N可以是一个自然数,比如2或者3。它的含义是,假设一个词出现的概率只与前面N个词相关。我们以2-Gram为例。如果用2-Gram进行建模,那么电脑在预测的时候,只会看到前面的『了』,然后,电脑会在语料库中,搜索『了』后面最可能的一个词。不管最后电脑选的是不是『我』,我们都知道这个模型是不靠谱的,因为『了』前面说了那么一大堆实际上是没有用到的。如果是3-Gram模型呢,会搜索『批评了』后面最可能的词,感觉上比2-Gram靠谱了不少,但还是远远不够的。因为这句话最关键的信息『我』,远在9个词之前!现在读者可能会想,可以提升继续提升N的值呀,比如4-Gram、5-Gram.......。实际上,这个想法是没有实用性的。因为我们想处理任意长度的句子,N设为多少都不合适;另外,模型的大小和N的关系是指数级的,4-Gram模型就会占用海量的存储空间。

所以,该轮到RNN出场了,RNN理论上可以往前看(往后看)任意多个词。

在上面的示例图中,神经网络的模块A,正在读取某个输入 x_i,并输出一个值 h_i。循环可以使得信息可以从当前步传递到下一步。RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:

链式的特征揭示了 RNN 本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。

以下是RNN的常用场景的输入输出结构图:

·       many to one:常用在文本分类等任务中,将一句话关联到一个向量。并通过向量进行文本分类。

·       many to many:第一个many to many在DNN-HMM语音识别框架中常有用到

·       many to many(variable length):第二个many to many常用在机器翻译等任务。

以many to many为例,以下的神经网络结构将一个输入序列映射到相同长度的输出序列:

则其更新方程为:

其中的参数的偏置向量 b 和 c 连同权重矩阵 U、V 和W,分别对应于输入到隐藏、 隐藏到输出和隐藏到隐藏的连接。

训练算法:BPTT

篇幅限制,请参考 https://zybuluo.com/hanbingtao/note/541458

存在的缺点:

RNN的梯度爆炸和消失问题:RNN在训练中很容易发生梯度爆炸和梯度消失,这导致训练时梯度不能在较长序列中一直传递下去,从而使RNN无法捕捉到长距离的影响。

通常来说,梯度爆炸更容易处理一些。因为梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

梯度消失更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题: 1.合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。

2.使用relu代替sigmoid和tanh作为激活函数。

3.使用其他结构的RNNs,比如长短时记忆网络(LTSM)

长短时记忆神经网络(LSTM):

其设计思路如下:

原始RNN的隐藏层只有一个状态,即h[隐藏状态],它对于短期的输入非常敏感,但是由于梯度消失问题的存在,使得其无法有效的对长序列建模,因此,lstm通过新增加一个状态,记作c[细胞状态],让它来保存长期的状态。以下为lstm的结构图:

为了模块组件的说明如下:

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

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

LSTM 通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。

Sigmoid层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”。

理解Lstm的关键在于理解其设计的三个门结构,分别是输入门,遗忘门,输出门。结合其更新方程来理解具体的设计:

【为便于阅读,直接截图,原始网页见参考资料3贴出的网页链接.】

扩展阅读:

1.除以上介绍的LSTM网络被广泛应用外,现有的针对序列数据的处理方式的改进有GRU(Gated Recurrent Unit)等计算复杂度更低的循环神经网络变种。同时BiLstm利用了序列的双向特性,被广泛应用在序列建模中。另外,循环神经网络的变种与传统机器学习序列模型的结合也值得关注,如LSTM+CRF应用于自然语言处理的标注类任务。

2.在机器学习领域中,Attention机制被广泛应用于各种序列建模的任务并且均取得了良好效果。推荐查阅相关的资料及论文,了解基于RNN/LSTM等序列模型结合Attention机制的应用。

 
参考资料: 
1.     https://zybuluo.com/hanbingtao/note/541458 [零基础入门深度学习(5) - 循环神经网络]
2.     https://zybuluo.com/hanbingtao/note/581764 [零基础入门深度学习(6) - 长短时记忆网络(LSTM)]
3.     https://www.cnblogs.com/wangduo/p/6773601.html?utm_source=itdadao&utm_medium=referral  [理解 LSTM(Long Short-Term Memory, LSTM) 网络]
4.     https://github.com/exacity/deeplearningbook-chinese/  [Deep Learning ]

小常识10: 循环神经网络(RNN)与长短时记忆网络LSTM简介。相关推荐

  1. 【深度学习理论】(7) 长短时记忆网络 LSTM

    大家好,今天和各位分享一下长短时记忆网络 LSTM 的原理,并使用 Pytorch 从公式上实现 LSTM 层 上一节介绍了循环神经网络 RNN,感兴趣的可以看一下:https://blog.csdn ...

  2. 长短时记忆神经网络python代码_零基础入门深度学习(6) - 长短时记忆网络(LSTM)

    无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就o ...

  3. 深度学习之长短时记忆网络(LSTM)

    本文转自<零基础入门深度学习>系列文章,阅读原文请移步这里 之前我们介绍了循环神经网络以及它的训练算法.我们也介绍了循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖 ...

  4. 深度学习(7) - 长短时记忆网络(LSTM)

    长短时记忆网络是啥 我们首先了解一下长短时记忆网络产生的背景.回顾一下零基础入门深度学习(5) - 循环神经网络中推导的,误差项沿时间反向传播的公式: 我们可以根据下面的不等式,来获取的模的上界(模可 ...

  5. 长短时记忆网络(LSTM)的训练

    长短时记忆网络的训练 熟悉我们这个系列文章的同学都清楚,训练部分往往比前向计算部分复杂多了.LSTM的前向计算都这么复杂,那么,可想而知,它的训练算法一定是非常非常复杂的.现在只有做几次深呼吸,再一头 ...

  6. 长短时记忆网络LSTM

    网络介绍 长短时记忆网络(Long short time memory network, LSTM)是RNN的重要变体,解决了RNN无法长距离依赖的问题,同时缓了RNN的梯度爆炸问题.LSTM由遗忘门 ...

  7. NLP学习笔记-循环神经网络RNN、情感分类、LSTM(二)

    循环神经网络和自然语言处理介绍 1. 文本的tokenization 1.1 概念和工具的介绍 tokenization就是通常所说的分词,分出的每一个词语我们把它称为token. 常见的分词工具很多 ...

  8. 长短时记忆网络(LSTM)部分组件(六)

    在前面的几篇文章中试着实现了CNN,RNN的一些组件,这里继续学习LSTM,也是是实现部分组件,旨在学习其LSTM的原理. 具体参考: https://www.zybuluo.com/hanbingt ...

  9. [Python人工智能] 十二.循环神经网络RNN和LSTM原理详解及TensorFlow编写RNN分类案例

    从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇讲解了TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的 ...

最新文章

  1. 《研磨设计模式》chap6 工厂模式factory(2)案例实现
  2. 【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)
  3. openwrt如何单独编译uboot
  4. spring的事件机制实战
  5. abaqus python二次开发攻略_Python 进行 Abaqus 二次开发的基础知识
  6. excel2003出现“向程序发送命令时出现错误”解决方法
  7. python 比对两个excel表数据_python 如何快速找出两个电子表中数据的差异
  8. 最新BT面板静态文件镜像库v7.1.1
  9. Flash版Logo语言9.83
  10. 海康威视摄像头连接(.net)
  11. 芭蕉树上第十四根芭蕉-- Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX
  12. 苏州科技计算机网络,苏州科技学院-计算机网络大作业-某高校校园网设计.doc
  13. Facebook一季报解读:未来十年要打造一个怎样的世界?
  14. 梯度下降算法 java_用 Java 实现梯度下降,看这篇就对了!
  15. Forward warping and backward warping
  16. og标签对SEO的作用及用法
  17. 原典法的学习训练程序详细介绍
  18. 代理模式真得这么简单
  19. 如何知道一台Linux服务器使用的是千兆网卡还是万兆网卡
  20. 小程序审核经验分享|小程序发布如何快速过审?

热门文章

  1. mysql如何用first函数_mysql FIRST()函数 语法
  2. Flask框架——消息闪现
  3. flask消息闪现和日志
  4. 金蝶K3系统定制国内销售日报表
  5. 你真的了解python中的setup.py吗?
  6. Dream it possible
  7. 电磁铁常见故障有哪些
  8. Invalid id reference
  9. 【信号去噪】基于EMD、EEMD和CEEMDAN算法实现ECG信号去噪附matlab源码
  10. spket1.6.23安装 spket破解