LSTM原理
“
本文从处理具有时间依赖的信息出发,介绍了RNN的原理和存在问题,在此基础上引出了LSTM,讨论了LSTM对于解决RNN的长时依赖问题的方法。
作者/编辑:moon
”
Long-short term memory,简称LSTM,被广泛的应用于语音识别、机器翻译、手写识别等。他们由Hochreiter&Schmidhuber引入,并被许多人进行改进和普及。LSTM是一种循环神经网络,具有记忆功能,因此能够将时间序列上的信息关联起来,找出其中的特征。LSTM也是为了解决Recurrent-neural-network(RNN)的困难而提出的。为了深入理解LSTM原理,还是要从RNN讲起。
01
RNN
“
人类并不是每时每刻都从他们空白的大脑开始思考。在你阅读这篇文章的时候,你都是基于自己已经拥有的对所见词的理解来推断当前词的含义的。我们不会将所有的东西都抛弃,然后用空白的大脑来思考。我们的思想具有持久性。RNN解决了这个问题,它是包含循环的神经网络,可以处理随时间变化的信息。
对于具有时序性的数据(比如人的行为),如何在一个相互连接的模型中,有效的表示其时序模式是分析的重点。就以一个人走路姿态为例,一种处理方法是“时间并行化”,即将每个时间点人的姿态作为一个向量,并行送入到传统神经网络中,用空间来换取时间。
但是这种方法有以下三个方面缺点:
1) 首先需要一个输入缓存,当有一定数量的输入序列后才一同送入网络中。且不论生物系统中是否有这样的缓存机制,从逻辑上就存在难题:网络如何来判定何时去检查缓存中的内容?
2) 将时间序列空间化,固定了序列长度。但是一个序列的时间模式并不是固定长度的。
3) 最为严重的问题是,这种方法无法区分时间序列中的相对位置和绝对位置。比如以下序列具有相同模式,但是由于在不同位置上,很难区分出来。
以上方法将时间看作一系列并行输入变量,还有一种方法:将时间抽象化处理,将它的影响施加到处理系统上。假设由一个具有记忆功能的处理系统,每个时间点输入都会影响到系统状态。系统的下一个状态是由当前输入和当前状态决定的。用公式表示为:
将公式展开就发现每个时间点的系统状态都是由以前所有序列决定的。
RNN是一个循环网络,hidden层的输出是由context中的变量和输入变量共同决定的。Context中存储了系统前一时刻的状态,并且影响到下一个时刻的输出和系统状态。假设x是系统输入,h为系统状态,而y为系统输出。RNN中各个变量之间的联结关系可以简单表示为:
其中b和c是偏置。W,U,V是权重数据。权重数据能够提取出变量内部的特征。
虽然理论上RNN可以捕获长距离依赖,但是在实际应用中,RNN会面临两个挑战:梯度爆炸和梯度消失。
在进行误差反向传播时,我们可以利用链式法则计算误差函数l对h0的偏导数:
我们对W进行奇异值分解:
那么就有:
当t很大时,偏导数的数值取决于最大奇异值是大于1还是小于1。
1) ,梯度爆炸
此时偏导数会变得很大,实际应用中会遇到NAN的错误,会影响训练的收敛。
2) ,梯度消失
此时偏导数会趋于0,从而在梯度更新前后没有什么差别,捕获长距离能力下降。
”
02
LSTM
“
LSTM的数学形式为:
符号O表示点乘。看上去LSTM的公式十分复杂,多个中间变量相互依赖。理解LSTM的核心是是对C变量(学名细胞状态)的理解。细胞状态是一个记忆单元,它的作用是记住有用的信息,而遗忘无用或者对结果影响较小的信息。人们在看到一件事情或者景象的时候,并不会搜遍脑海中所有记忆的事情,而是会通过相关联的记忆来对当下看到的事情产生思考。Ft作为“遗忘”门控来控制对上个状态的遗忘,忘记无用信息,留下有用信息。Ft是计算上一个时刻的输入、输出以及细胞状态的sigmoid函数,数值位于(0,1)之间。为了有选择的记住新信息,增加了记忆门gt,乘以it可以有选择的记住一些信息。为了有选择的输出信息,还需要一个输出门来进行控制,因为并不是所有记住的信息都和当下需要输出的结果有关,所以输出门控制输出有关信息。整个过程用图就可以表示为:
导致RNN梯度爆炸和消失的主要是这一项求导:
LSTM是对RNN的改进,现在来看cell状态:
我们求导:
Ft是遗忘门的输出值,1表示对信息的保留,0表示舍弃旧的信息。如果选择对信息的保留,那么梯度就不会消失了。但是这也表示ct到ct-1的路径上梯度不会消失,并不能保证其他路径上梯度不会消失。LSTM可以缓解梯度消失,并不能消除,所以其可以解决RNN长期依赖的问题。
”
03
总结
RNN和LSTM都属于一种循环神经网络,循环神经网络可以处理时序信息。RNN在训练的时候,随着时间延长,梯度值的变化会不断被放大,最终导致梯度消失或者爆炸。针对这个问题,LSTM通过引入复杂门控来缓解这个问题,可以解决长时依赖问题。