赞
踩
由于学业繁忙,突然发现近四个月没更新博客了,于是将前几天讲课的PPT做了简单整理,水一篇博客。本文主要做一些RNN及LSTM的简介而非深入讲解,文中部分LSTM通用结构图及通用公式来源于网络,此处不一一列举,感谢图片的原创博主提供的支持!
RNN的全称为Recurrent Neural Network, 即“循环神经网络”,是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。
1. 为什么要采用递归循环结构
RNN最开始是为NLP领域的任务所设计的,例如机器翻译。在机器翻译任务中,每次翻译的语句长度是不定的,采用递归结构的好处在于RNN网络可根据要翻译的语句长度通过递归自行展开到所需要的长度,而不用针对每一种句子长度单独设计具有不同网络层数的RNN。
2. 为什么要权值共享
在上图CNN与RNN的对比中可以看出,CNN的每一层由数字进行区分,但RNN的每一层却是相同的。由循环递归的思想我们也可以知道,通过循环递归展开的RNN网络,每一层必然是相同的,即网络的每一层进行了权值共享。但是,权值共享不仅是循环递归的一个结果,更有一定的工程意义。假如RNN像CNN一样,每层都有自己独立的权值,那么我们考虑一个极端的例子,如果我们要翻译一段有一万词的句子,那RNN则需要一万层,而每一层又具有自己独立的权值,那么整个网络的参数量将是巨大的,这就使得RNN难以在工程中应用。
RNN主要用于序列处理,比如自然语言处理,时间序列预测这种输入输出序列之间具有高度的相关性或依赖性的任务,RNN可以捕获序列间的依赖关系从而完成相应的任务。
1.什么是序列
这里的序列可以简单理解为离散数据,比如周期序列,语言文字等。
2.什么是依赖性或相关性
以下将通过三个例子来解释所谓的依赖性或相关性
(1)语义依赖关系
在这个机器翻译的例子中,句中的系动词用is还是are取决于前面是cat还是cats。也就是说,前边名词的单复数决定了后面系动词的形式,系动词依赖于前边的名词,两者就产生了语义上的依赖关系。
(2)周期依赖关系
在已知周期规律的周期序列中,给出前几个值我们就可以知道后边的值。例如以1,2,3为周期的周期序列,我们知道3后边的一定是1,这是因为数字之间具有周期依赖关系。
(3)函数依赖关系
在轨迹预测中,我们知道上一刻运动目标的位置、速度、加速度、方向、时间间隔等信息,就可以通过物理公式计算出下一刻目标的位置,这是因为它们之间存在函数依赖关系。
当然,依赖关系有很多,包括但不限于上述列举的三种。
通过上图以及公式可以看出,RNN的每一步输出不仅依赖于当前的输入,还会综合考虑以前所有步的输入。即Y2的输出不仅取决于X2(红色),还利用了X1的隐状态S1(蓝色)。各时间步之间通过隐状态的连接实现信息共享,使每一步都能综合考虑当前与以前的所有输入进行输出。
1.梯度消失
梯度消失不仅是RNN的缺陷,而是包括CNN在内的神经网络的普遍问题,这也催生了ResNet的出现。所以,对于梯度消失问题,这里不再作赘述。
2. 无法捕获序列的长时间依赖关系
考虑一个NLP领域的例子:I grew up in France… I speak fluent French。在例子中,France与French具有语义上的依赖关系,但两者之间间隔很大,RNN难以捕捉到两者间的依赖关系,模型性能会因此下降。我们很难从数学的角度严格推导RNN捕捉长时序列依赖性能力差的原因(不考虑梯度消失),目前比较普遍的解释是,传统RNN中,模型对以前时间步传过来的隐状态做了过于复杂的操作,以至于使隐状态中蕴含的信息丢失。更直观的理解,像人类一样,如果在让你记住事件A的同时让你去做很多其他的事,那你忘掉事件A的概率就大大增加了,这里的“其他事”就相当于RNN中对记忆状态过复杂的操作。
也正是RNN的这种缺陷,催生了后来的LSTM。
长短期记忆网络(LSTM)的全称是Long Short Term Memory networks,是RNN的一种特殊形式,特点是能够学习长距离依赖关系。由Hochreiter & Schmidhuber (1997)首先提出,之后被很多学者改善和推广。它在很多问题上都得到很好的表现,现在被广泛使用。
LSTM的设计之初就是为了解决长距离依赖问题。记住长距离的信息实际上是他们的最基本的行为。
1.RNN与LSTM的关系
LSTM可以看作是RNN网络的一种特殊形式,同理,GRU也是如此。LSTM将传统RNN中每一个RNN单元换成了更加复杂的结构,如图下所示。
LSTM的关键之处是单元状态(cell),就是图中最上面的水平线。
单元状态就像一个传送带。它直接沿着整个链运行,只有一些简单的加减等线性操作,信息很容易保持不变。
LSTM建立一条单独的“路线”用来传递长时依赖关系,每个LSTM单元只对这条通路上做一些简单的加减操作,以保证长时依赖信息不被破坏。
1.遗忘门
LSTM的第一步是决定我们要从单元状态中舍弃什么信息。这一步由激活函数为sigmoid的神经层决定,我们称之为遗忘门(forget gate)。首先将ht-1与xt的和作为遗忘门的输入,对于的每一个数字,遗忘门输出一个[0,1]区间的数字,输出1代表“完全保留”,输出0代表“完全遗忘”,再将遗忘门的输出与Ct-1对应元素相乘以忘记一些长时依赖信息。
2.输入门
LSTM的第二步决定将要在单元状态(cell)中存储哪些新的信息。这由两个部分组成。首先,激活函数为sigmoid的称为输入门(forget gate)的层决定将更新哪些值。接下来,激活函数为tanh的层创建一个新的候选值向量,可以添加到单元状态。 候选值向量经过输入门筛选后加入到细胞状态(cell)中,细胞状态因此完成更新。
3.输出门
最后,LSTM将决定输出的内容,这由输出门(Input gate)决定。这个输出将基于我们的单元状态,但将是一个过滤版。首先,我们运行一个sigmoid层,决定我们要输出单元状态的哪些部分。然后,我们通过tanh函数把更新后的细胞状态值转换为[-1,1]区间。最后,把转换后的单元状态与sigmoid门的输出相乘,这样我们只输出我们决定的部分。
总结来看,LSTM中红色的主线传递是长时记忆,而蓝色的主线传递的是短时记忆,这大概也是它被命名为“长短时记忆”的原因吧。
近些时间,Transformer凭借其强大的多头注意力机制以“屠城”之势在NLP、CV等领域吊打各种主流模型,其中就包括LSTM。但多头注意力机制也给训练Transformer带来了巨大的时间成本与计算开销,虽然有些研究人员将多头注意力机制换为傅里叶变化以减小计算量,但LSTM相比之下在这些方面仍很大优势,因此将合适的注意力机制融合进LSTM框架可能是LSTM与Transformer抗衡的思路之一。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。