欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RNN之LSTM

程序员文章站 2024-03-25 00:02:11
...
开始学习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的错误信号为:

RNN之LSTM:结果求导乘上误差值就是反响更新的误差量。
RNN之LSTM:结果是通过对网络的输出再**得出,这里的f是可以为不同的**函数。
RNN之LSTM:网络输出是将输入乘以相应的权重求和,这里的输入就是上一层单元的输出。
RNN之LSTM:如果是非输出层的误差更新则是为导数乘以其到下一层所有单元中贡献的输入之和。
dk(t)表示单元k在t时刻的期望输出(就是label)。经过数学推到上述公式分析会得出error flow会vanish,具体的不在此细述。
下面介绍constant error flow——naive approach:
在j时刻,单元j的local error flow是:
j(t)=fj(netj(t))j(t+1)ωjj,只有当fj(netj(t))ωjj=1
根据上述要求,可以得出:
RNN之LSTM
则:RNN之LSTM
若将ωjj=1,则得出f(x)=x。
以上是考虑单元j的自连接,还有:
1.输入权重:对于输入权重wji假设i非零,则相同的输入权重会被既用来存储特定的输入信息,也被用了忽视某些信息,这就会导致反向更新这个权重的时候出现冲突。
2.输入权重:假设j此时打开状态,存储了一些过去的信息,对于wkj,它被用了在特定时刻得到j单元中的内容,也被用来防止在其他时刻j打扰到k。只要j非零,就会导致相同的更新冲突。比如刚开始的训练阶段可以减少一些short time lag error,当之后的时候在为了试图减少long time lag error的时候则会又重新因为一些误差。

相关标签: LSTM