LSTM(Long Short_term Memory)是RNN的“升级版”,LSTM很好的解决了RNN在长期及以上的缺陷,所以使用LSTM解决序列问题是很友好的,按照李宏毅教授的话来说那就是“很 work”。
LSTM有三个”门”,可以理解为处理信息的一个路径,分别是“遗忘门”、“输入门”、“输出门”。
(PPT摘自李宏毅教授)
当在t时刻输入一个序列中的数据时,序列经过“遗忘门”时,会将重要的信息保存在Memory Cell当中,然后在t+1时刻Memory Cell中的保留的数据也会参与到运算中,然后再次保存,进行t+2时刻…大概用“套娃”来形容更容易理解,直到结束。
这是在网上找到的一个gif图,红的圆圈代表“sigmoid 函数”(生成的数据都是处于0-1之间,越接近0表示“不重要信息”,越接近“1”表示“不重要信息”),蓝色的圆圈代表“tanh 函数”(生成的数据处于-1 - 1时间),当输入的数据xt与上一时刻t-1的保留信息h(t-1)经过“遗忘门”生成一个ft。
输入的xt与h(t-1)来到了输入门,同时经过“sigmoid 函数”和“tanh 函数”,得到it与ct。
经过“遗忘门”后保存下来的ft与上一时刻细胞状态c(t-1)经过“哈达玛积”(Hadamard product)
,也就是按元素相乘,运算结束后的结果与“输入门”中哈达玛积运算后保存的结果相加,得到这一时刻的ct。
最后,就是h(t-1)与xt经过sigmoid 函数运算后保存的结果ot与ct经过tanh 函数运算后的结果进行哈达玛积运算,得到t时刻的ht,这个箭头指向的就是下一个时刻t+1,ht和ct都会加入到t+1时刻的运算,过程与t时刻的完全相同。
基本的LSTM整体流程就是这个样子,LSTM还有非常多的变化,比如单变量单步预测、单变量多步预测、多变量单步预测、多变量多步预测等等。有兴趣的话大家可以深入了解。
(我最开始学习的时候就像是这个样子↓)