理论——RNN(循环神经网络)与LSTM(长短期记忆神经网络)

RNN

背景

人类的思考具有连续性,我们常联系过去的经验来理解现在。比如阅读时我们常提及的“上下文”、“伏笔”、“语境”等;或者是我们常说的“第一印象”,对一个人过去的刻板印象影响了我们对此人当前行为的判定。因此在使用神经网络算法时,利用过去的因素干预后面的预测十分重要。传统的神经网络在处理序列数据的时候,很难利用做到这一点。

RNN(循环神经网络)是一类用于处理序列数据的神经网络,能很好的解决这一问题。所谓的序列数据就是后面的数据跟前面的数据有关系,如时间序列(时间戳上的变化),文字序列(一句话等)等。

结构

神经网络包含输入层、隐层、输出层,通过激活函数控制输出,层与层之间通过权值连接。激活函数是事先确定好的,那么神经网络模型通过训练“学“到的信息就蕴含在“权值“中。
基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接。示意图如下:

在这里插入图片描述
在上图中,一组神经网络 A接收某些输入xt,并输出一个值ht。 循环的存在允许上一轮的信息传递到下一轮,神经网络每一次运行都会传递一个消息给后继者。 这就意味着你输入神经网络以及用来训练网络的数据的顺序很重要:输入”牛奶“、”饼干“和输入”饼干“、”牛奶“会产生不一样的结果。

应用

循环神经网络的应用:
在这里插入图片描述
(1)没有 RNN 的Vanilla(最基础的)神经网络,从固定大小的输入到固定大小的输出(例如图像分类)。
(2)序列输出(例如,图像标题识别,输入图像并输出一个单词句子)。
(3)序列输入(例如,将给定句子归类为表达积极或消极情绪的情绪分析)。
(4)序列输入和序列输出(例如机器翻译:RNN 用英语读取句子,然后用法语输出句子)。
(5)同步序列输入和输出(例如,我们希望标记视频每帧的视频分类)。

梯度消失、爆炸

循环神经网络最大的问题是梯度消失(或者梯度爆炸),这取决于使用的激活函数。在反向传播过程中需要对激活han函数进行求导,如果导数大于1,那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆炸。同样如果导数小于1,那么随着网络层数的增加梯度更新信息会朝着指数衰减的方式减少这就是梯度消失。因此,梯度消失、爆炸,其根本原因在于反向传播训练法则,属于先天不足。

我们可以看到,“信息损失“也是随着序列的推荐而不断积累的。在这种情况下,随着时间的流逝信息会快速消失。以anh函数为例说明,这是tanh函数的函数图和导数图:
在这里插入图片描述

tanh函数的导数范围是(0,1],这就会导致一个问题,在上面式子累乘的过程中,如果取sigmoid函数作为激活函数的话,那么必然是一堆小数在做乘法,结果就是越乘越小。随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于0,这就是“梯度消失“现象。

其实RNN的时间序列与深层神经网络很像,在较为深层的神经网络中使用sigmoid函数做激活函数也会导致反向传播时梯度消失,梯度消失就意味消失那一层的参数再也不更新,那么那一层隐层就变成了单纯的映射层,毫无意义了,所以在深层神经网络中,有时候多加神经元数量可能会比多家深度好。

RNN可利用的历史数据是有限的,解决“梯度消失“是非常必要的。这里说两种改善“梯度消失”的方法:

1、选取更好的激活函数,如ReLU函数
在这里插入图片描述
ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了小数的连乘,但反向传播中仍有权值的累乘,所以说ReLU函数不能说完全解决了“梯度消失”现象,只能说改善。

2、改变传播结构,如LSTM结构

LSTM

长期依赖问题

有时候,我们仅仅需要小间隔的信息就可以完成当前任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测 “the clouds are in the sky” 最后的词,我们并不需要任何其他的上下文 ,就可以预测最后一个词:sky。在这样的场景中,所需的信息和预测的词位置之间的间隔是非常小的,RNN 可以进行预测。

但是同样会有一些更加复杂的场景。假如我们试着去预测“I grew up in France… I speak fluent French”这句话中最后的单词。当前的信息只能得知下一个词代表一种语言,但是如果我们要弄清楚这是什么语言,就需要回溯到距当前词很远的 “France” 。此时,所需信息和当前预测位置之间的间隔就变得非常大。当间隔不断增大时,RNN 就会不可用。

LSTM 提供了一种解决方案。

LSTM网络

长短期记忆网络是RNN的一种变体,RNN由于梯度消失的原因只能有短期记忆,LSTM通过引入门结构(gate)和一个明确定义的记忆单元(memory cell)来尝试克服梯度消失或者梯度爆炸的问题。这一思想大部分是从电路学中获得的启发。
每个神经元都有一个记忆单元和三个门结构:输入、输出和忘记。这些门结构的功能是通过禁止或允许信息的流动来保护信息。输入门结构决定了有多少来自上一层的信息被存储为当前记忆单元。输出门结构决定下一层可以了解到多少这一层的信息。忘记门结构初看很奇怪,但是有时候忘记是必要的:如果神经网络正在学习一本书,并开始了新的章节,那么有必要忘记前一章的一些人物角色。

长短时记忆网络能够学习复杂的序列,比如:像莎士比亚一样写作,或者合成简单的音乐。值得注意的是,这些门结构中的每一个都对前一个神经元中的记忆单元赋有权重,所以一般需要更多的资源来运行。

LSTM网络一定程度上解决了梯度消失的问题。只能说一定程度上,过长的序列还是会出现“梯度消失”,所以LSTM叫长一点的“短时记忆”。

结构

LSTM 通过刻意的设计来避免长期依赖问题。

在这里插入图片描述

所有 RNN 都有一种链式的循环模块。在标准的 RNN 中,模块只有一个非常简单的结构,例如一个 tanh 函数。
在这里插入图片描述
LSTM同样是这样的结构,但是对循环模块进行了改进。整体上除了h在随时间流动,细胞状态c也在随时间流动,细胞状态c就代表着长期记忆。

在这里插入图片描述
在这里插入图片描述
黄色的矩形是学习得到的神经网络层
粉色的圆形表示一些运算操作,诸如加法乘法
黑色的单箭头表示单向量的传输
两个箭头表示两个向量合成为一个向量
一个箭头表示一个向量复制为两个向量

细胞状态类似于传送带,并且贯穿整个神经网络。信息在上面流动时只有一些少量的线性交互,很容易保持不变。
在这里插入图片描述
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法操作。Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”!LSTM 拥有三个门,来保护和控制细胞状态。
在这里插入图片描述
1,遗忘门
在我们 LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过被称为遗忘门的组件完成。该门会读取 h t − 1 h_{t-1} ht1 x t x_t xt,输出一个在 0 到 1 之间的数值,并与细胞状态中的 C t − 1 C_{t-1} Ct1相乘。

其精髓在于遗忘门使用的sigmoid函数只能输出(0,1)之间的小数,通过相乘决定信息保留的程度,1 表示“完全保留”,0 表示“完全舍弃”。LSTM网络经过学习决定让网络记住以前百分之多少的内容。
在这里插入图片描述
2,输入层
下一步是确定什么样的新信息要输入细胞状态中。
第一,sigmoid 层称 “输入门层” 决定我们将要更新的值。然后通过tanh 层创建一个新的候选值向量 C ~ t \tilde{C}_t C~t,并将其加入到状态中。
在这里插入图片描述

然后我们可以将旧细胞状态从 C t − 1 C_{t-1} Ct1 更新为 C t C_t Ct

上一步我们通过遗忘门把旧状态与 f t f_t ft相乘,丢弃部分信息。这里我们将其加上 i t ∗ C ~ t i_t * \tilde{C}_t itC~t 。这就是新的候选值。sigmoid函数选择更新内容,tanh函数创建更新候选。
在这里插入图片描述

3,输出门
输出门确定输出什么值。

首先,我们通过sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh层处理(得到一个-1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定要输出的那部分。
在这里插入图片描述
这三个门虽然功能上不同,但在执行任务的操作上是相同的。他们都是使用sigmoid函数作为选择工具,tanh函数作为变换工具,这两个函数结合起来实现三个门的功能。

参考文献:
1. https://www.jianshu.com/p/4b4701beba92.

2. http://karpathy.github.io/2015/05/21/rnn-effectiveness.

3. https://blog.csdn.net/qq_24690701/article/details/81868048.

3. https://blog.csdn.net/zhaojc1995/article/details/80572098.

新开通了本人的公众号,欢迎关注:燕南路GISer ,专注GIS干货分享,不定期更新。
主要兴趣:GIS、时空数据挖掘、python、机器学习深度学习
提问、求资源等都可在公众号后台留言
CSDN的部分内容会重写再搬迁到公众号,欢迎关注!
在这里插入图片描述

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕南路GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值