开始学习lstm,从《LONG SHORT-TERM MEMORY》这篇论文读起,但是论文中涉及到太多基础理论和公式.
所以还是看了很多blog(eg:http://colah.github.io/posts/2015-08-Understanding-LSTMs/等)之后再读paper,开始有所研究。
paper中提到LSTM与传统RNN重要的不同点在于对梯度的截断:truncating the gradient where this does not do harm,其重要特性“constant error carrousels(CEC)”——设置的各种gate就是去学习怎么access 和open to the CEC。RNN不能处理很长的序列是因为反向传播时参数会指数爆炸blow up或者消亡vanish。LSTM中存在一个重要不同就是结构中在特殊的单元内会执行一个不变“constant”的错误传播流。
误差——传统的BPTT:对于第k个单元在t时刻的输出表示为$d_{k}(t)$,使用均方误差,则单元k的错误信号为:
:结果求导乘上误差值就是反响更新的误差量。
:结果是通过对网络的输出再激活得出,这里的f是可以为不同的激活函数。
:网络输出是将输入乘以相应的权重求和,这里的输入就是上一层单元的输出。
:如果是非输出层的误差更新则是为导数乘以其到下一层所有单元中贡献的输入之和。
dk(t) 表示单元k在t时刻的期望输出(就是label)。经过数学推到上述公式分析会得出error flow会vanish,具体的不在此细述。
下面介绍constant error flow——naive approach:
在j时刻,单元j的local error flow是:
∂