标准RNN可以处理短期依赖,难以处理长期依赖,例如 I grew up in France...........I speak fluent _____.空格处显然应该填法语,但是标准RNN中,输入x4对Ot的影响可能微乎其微,而LSTM(Long Short-Term Memory),即长短时记忆网络,是RNN的扩展,其会通过特殊的结构设计来增加长期记忆问题。
LSTM的结构如下图,比标准RNN多出了一部分C,为长期状态,体现为向量:
忘记门确定接收哪些长期信息,遗忘哪些长期信息;
输入门控制如何利用当前的信息来更新长期状态;
输出门控制如何使用长期状态来更新当前隐藏层的输出ht;
以下左图为乘法门,为了让信息选择性的通过,sigmoid层的输出矩阵中每隔元素的范围是[0,1],输入如果乘以0,则不输出;如果乘以1则输出。右图为加法门,在输入1的基础上加上输入2的信息进行更新。因此,在LSTM中,忘记门和输出门要用到乘法门,输入门要用到加法门。
图中保存和流动的就是长期状态信息,以下是LSTM的详细计算过程。
(1)忘记信息:从长期状态中丢弃某些信息。
忘记信息是通过对上一时刻的长期状态Ct-1乘以一个忘记门ft来实现的,ft矩阵中每一个元素都是通过sigmoid函数映射到0,1之间的,如果Ct-1中的某个元素乘以ft中的1,表示该元素的取值完全保留,相反如果乘以0则表示完全忘记。忘记门的输入为ht-1和xt的拼接。
(2)新记忆信息:将新信息存放在长期状态中
更新长期状态是由三个部分完成的,首先利用一个双曲正切层创建一个新的候选值向量,然后利用sigmoid层即输入门 it 控制候选值向量哪些元素需要更新以及更新的幅度。最后新的输入信息被加入到长期状态中。
(3)计算输出信息
首先,利用ht-1和xt的拼接,并通过sigmoid函数来确定将输出哪些信息,即得到输出门ot。然后将长期状态通过双曲正切层进行处理,将其与经过输出门过滤后的结果进行进行相乘。得到要输出的信息ht。ht就是我们最终要得到的,可以通过sigmoid进行处理或者当做下一次的输入,以上就是LSTM的主要框架。
附:1> 双曲正切函数tanh,形式如下:
定义域为R,值域为(-1,1),在x=0时函数值也为0,所以函数过原点。
2> sigmoid函数,形式如下:
当x=0时函数过(0,0.5)
结语:保持学习,持续热爱。