RNN与LSTM两个小伙伴的学习笔记
这段时间一直在看NER相关的工作,终于把RNN以及LSTM的基本结构整理清楚了,于是接下来码一码,以便三天后又忘了找不到出处。其实大部分内容也是搬运来的。
RNN
首先介绍RNN,RNN全称循环神经网络。
在传统的深度神经网络模型中,我们的输入信息是没有顺序的。NLP领域中,我们输入单词经常使用embedding,将词汇映射为词向量,然后输入到神经网络。但是这种输入方式会有一些问题,比如,"我 爱 你"和"你 爱 我"在传统的神经网络中不能很好的识别。
在这种情况下,有人提出了将n-gram信息加入到输入层,比如fasttext,在一定程度上解决了单词间的顺序问题,但是这种方法也有一些弊端,就是我们无法捕获长句子的单词依赖,比如一个句子n个单词,那么如果想要捕获全部的单词顺序信息,需要1+2+3…+n,所以这种方式会让embedding_lookup变得非常大。
RNN就是专门解决这种无法捕获长距离的句子信息的模型。
简单来说,RNN侧重了时序,可以捕捉到句子之前的信息。
RNN模型
RNN的基本模型很简单。直接上图。一般来说分为输入层,隐藏层和输出层三个部分
xi表示在第i步输入的单词,hi表示当前的隐藏层权值向量,hi+1表示输出。
这里有三种常见的RNN结果,具体的就不说了。链接在下面。
https://www.cnblogs.com/stephengoodboy/p/12773466.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%9A%E5%87%BA%E7%8E%B0rnn
梯度消失和梯度爆炸
这里回到我们RNN的计算公式,**函数sigmoid其实就是tanh,是一种求tan的手段。
梯度消失:RNN梯度消失是因为**函数tanh函数的倒数在0到1之间,反向传播时更新前面时刻的参数时,当参数W初始化为小于1的数,则多个(tanh函数’ * W)相乘,将导致求得的偏导极小(小于1的数连乘),从而导致梯度消失。一句话就是小于1的数,不停相乘,导致最后的结果趋于0。
梯度爆炸:当参数初始化为足够大,使得tanh函数的倒数乘以W大于1,则将导致偏导极大(大于1的数连乘),从而导致梯度爆炸。一句话就是大于1的数不断相乘,导致最后的结果趋于无限大。
LSTM长短神经网络
LSTM的产生就是为了解决RNN梯度爆炸和消失的问题。但是,LSTM并不能完全解决这个问题。
首先看看RNN和LSTM结构图,你会发现,其实LSTM只是在RNN的机制上,增加了三个门。也就是遗忘门forget gate,输入门input gate,和输出门output gate。通过这三个门的开关来选择性地保留之前文本的信息,这样可以解决梯度爆炸和消失的问题,可以处理更长的文本数据。图来自知乎。
如果要分细节一点的话,应该是增加了五个门,分别是forget gate,input gate,cells gate,output gate,final output gate。这五个门对应LSTM的五个计算步骤。
下面再来看看LSTM的模型结构。
上图是LSTM全局结构,本质上看和RNN差不多,每一个cell具有两个输入和两个输出。但我们看下面这具体的LSTM结构可以发现,细分起来,LSTM其实是具有三个输入以及四个输出的。本图中未体现出来。ht可以单独进行输出。
遗忘门forget gate
直接上图see see,遗忘门的部分用蓝色区域已经标记出来了,所谓遗忘门顾名思义就是决定遗忘,丢弃哪些信息。遗忘门通过σ和ft函数,来控制ht-1和xt中哪些信息要被删除掉。公式直接截图贴了。
输入门input gate
还是直接上图,简单说就是决定从ht-1和xt中输入什么,加入到目前的cell中。
计算新状态
这里因为公式的插入还不会,下次不用这个编辑器了。新状态就是蓝色框框标注的东西,个人认为这来俩应该一起被称作输入门。不过为了方便区别,σ代表所有门的计算。这里和输入门的功能一样,决定哪些信息可以进入目前的cell中。最后和it做叉乘后,再做一个向量和。就完成了新cell的状态。也就完成了一个输出的计算。
当前状态ct就不讲了,也就是目前已经经过计算后的cell信息。
输出门 output gate
看图,记得门计算的标志是σ。输出门决定ht-1和xt中输出哪些东西,加入最后的ht计算中。直接上图。这里输出门和输入门的原理有点像。都是先决定输出什么,再与其他信息一起计算,得到最后的输出。
最后的ht计算在图里很清楚,就不再说了。
总结
总结的时候还是看图,哈哈哈。
RNN具有较好的序列数据处理能力,但是存在短时记忆问题,LSTM使用门来缓解短时记忆问题,学习长期依赖性。
遗忘门决定从cell状态中丢弃什么信息,
输入门在决定有多少新的信息进入到cell状态中,
最终基于目前的cell状态使用输出门决定输出什么样的信息。
ct的输出经过了遗忘门和输入门处理。
ht的输出是将ct处理后与输出门处理的数据联合处理得到的,经过了三个门处理。
完结。
撒花。