Long short-term memory
LSTM算法全称为Long short-term memory,最早由 Sepp Hochreiter和Jürgen Schmidhuber于1997年提出,是一种特定形式的RNN(Recurrent neural network,循环神经网络),而RNN是一系列能够处理序列数据的神经网络的总称。
I. 推导
关于lstm,有个非常好的博客。
前向更新公式为:
依照上文的后向传播的推导方式,可以得到, 前向更新,请见代码中#sooda注释
部分:
后向更新:
注意点:
- 通过观察公式1到4, 发现所有的乘机因子为x、h,互相没有依赖,可以并行化。利用向量化进行加速
- IFOG指的是Input,Forget, Output, Cell Gate的计算值。IFOGf是IFOG经过激活函数后的激活值. 并以此为顺序。o-d表示input gate, d-2d表示forget gate, 2d-3d表示output gate, 3d-end 表示cell gate
- WLSTM保存的实际上是所有这些门相对于输入+隐藏层+偏置的权值。
- 后向传播从最后一个进行求偏导, 即按照从后向前,按部就班即可,不需要跨步骤考虑
- cache是为了保存后向传播所需要的值
本文代码可以参考gist
I.I. 反向传播
LSTM的后向推导说是推导,基本上没有一个公式。注重理解。
cs231上有一篇关于非常好的文章, 讲得非常好。 一个例子: \[f(x,y) = \frac{x + \sigma(y)}{\sigma(x) + (x+y)^2}\]
1 | x = 3 # example values |
对应的后向传播为:
1 | # backprop f = num * invden |