Naive RNN:
Bidirectional RNN:
RNN是三维的,沿时间维串起来,形成一个立体。因为下一时间点隐藏层的计算需要上一时间点隐藏层的数据,因此因此层需要一个memory单元来存储中间计算结果。
long short-term Memory(LSTM):
从命名可以看出,LSTM依然是短期记忆网络,只不过是记忆的时间比较长而已。LSTM有input Gate,forget gate,outputgate,和input四个输入,所以LSTM需要的参数(w)是一般网络的四倍。即原本的一个输入vector,乘上4个不同的w矩阵,变成4个不同的vector,对应到这四个输入。
LSTM的一个神经元长这样:
LSTM的计算过程长这样,如果看不懂可以去看李宏毅的教学视频
简单描述一下:
输入一个向量X(就跟全连接网络输入的X一样),X乘上4个不同的transformer,变成Z和Z的三个控制信号(Z就和全连接网络里的Z一样),然后输入到neuron里面进行组合运算(全连接的neuron里面只有一个激活函数,但LSTM的neuron有5个激活函数),之后再进行输出。
通常呢,对输入的向量X也有改进,即
X_改进=X_原来 串接 上一时间点Output Gate后的输出 串接 上一时间点上一层cell中的值(peephole)。
最后,我们来总结一下LSTM:
李宏毅老师的视频确实讲的好,但这个图未免有些太乱了,我们从知乎上找了一张描述更清晰的图,来对LSTM做一个总结。
三个门控的激活函数都是σ激活函数,从左到右依次是遗忘门,输入门,输出门。门的激活函数不选用relu是因为relu是没有饱和区域的,那么就没法起到门的作用。
遗忘门的作用是控制长期记忆有多大长度被保留下来
输入门的作用是控制临时记忆有多大程度被记录在长期记忆中
输出门的作用是控制长期记忆有多大程度被当作隐藏层状态的输出。
候选记忆用tanh激活函数产生是因为tanh的输出在-1~1,是0中心的,并且在0附近的梯度大,模型收敛快。
隐藏层状态的输出同理。