在此期间,我试图通过阅读关于LSTM的论文来记录学习过程。 因为其他事情,一直拖到现在。 记忆好像又要模糊了。 立即添加,本文的组织安排首先介绍了rnn的BPTT存在的问题,然后介绍了第一个LSTM结构,介绍了添加遗忘控制门,然后按照实际提交的时间顺序编写了添加了peephole connections结构的LSTM 本论文相当于简要总结各论文核心部分做成的笔记,提供了迅速的理解。
一. rnn结构的BPTT学习算法存在的问题,首先来看比较典型的BPTT的一个展开的结构。 如下图所示,这里只考虑了部分图。 因为其他部分不是这里要讨论的内容。
相对于时刻t的误差信号计算如下。
这种权重的更新方法如下。
上式在BPTT中非常常见。 那么,这个误差信号一直传到过去怎么样? 假设任意两个节点u、v的关系如下。
那么,误差传递信号的关系可以写成以下递归式。
n表示图中一层神经元的个数,这个递归式的大致意思很容易理解。 求出t-q时刻误差信号相对于t时刻误差信号的偏导数,首先求出t-q 1时刻对t时刻,其结果被传递给t-q时刻。 递归停止条件为q=1时,是刚开始写的计算公式。 进行上述递归部署,可以获得:
论文中说的是可以通过归纳来证明,我没有仔细推敲这里。 联合展开里面很容易理解。
整个结果式合计t的次数为n^(q-1 ),也就是说t有n^ ) q-1 )项。 那么,让我们看看问题出在哪里。
|T| 1时,随着q的增大,误差呈指数级增加,网络的参数更新会引起非常大的振动。
|T| 1时,误差消失,学习无效。 典型的激活函数使用simoid函数。 其倒数的最大值为0.25,保证权重的最大值必须小于4才能小于1。
误差呈指数增长的现象比较少,误差消失在BPTT中是常见的。 虽然原论文有更详细的数学分析,但了解这种个人感觉是充分理解问题的。
二.最初的LSTM结构为了克服误差消失的问题,需要做一些限制。 首先,假设只有一个神经元连接到自己。 概略图如下。
根据上面的、时刻t的误差信号计算如下。
为了防止误差发生变化,可以将以下公式强制为1 :
根据这个公式,可以得到以下内容。
这表明激活函数是线性的,常常取FJ(x )=x,wjj )=1.0,从而得到常数误差流,也称为CEC。
但是,还远远不够,因为存在输入输出目标权重更新的冲突(这里不太清楚原论文中的说明),为了解决这个矛盾,添加了输入门、输出门这两个控制门。 图如下。
在图中添加了两个控制门。 控件是指在计算cec输入之前,将input gate的输出相乘。 计算cec的输出时,将其结果乘以输出网关的输出。 整个框称为block。 中间的小圆圈是cec,其中有一条y=x的直线,神经元的激活函数为线性,表示自耦权重为1.0
增加框架门
最初lstm结构的缺点之一是cec的状态值可能会一直变大。 增加forget gate可以控制cec的状态。 其结构如下图所示。
这里的相当于自连接的权重不是1.0,而是forget gate的输出值,控制cec的状态值,根据需要设为0,即忘记作用,设为1时与原来的结构相同。
四.添加Peephole的LSTM结构
上面添加遗忘门的缺点之一是当前的CEC状态不影响输入门,而forget gate是下一个时间点的输出,因此添加了Peephole connections。 结构如下。
此处的gate输入部分添加了另一个源。 forget gate,input gate的输入源添加了cec当前时间的输出,而output gate的输入源添加了cec当前时间的输出。 另外,计算的顺序也必须如下。 输入门,格式门的输入输出cell的输入输出oll
五.我记得某个LSTM的全BPTT推导(用误差信号)当时看论文公式推导时有很多难以理解的地方。 最后,我几次咕噜,发现了一个类似课件的PDF,上面写了好东西,但我已经不知道它的来源了,所以很容易就知道了LSTM的向前计算,误差反而更新了。 其中,若记载与LSTM相关的部分,首先网络的完整结构图如下:
此结构也是rwthlm源包中LSTM的结构。 看看公式的符号吧。 wij表示神经元I到j的连接权重。 (请注意,这与许多论文的显示相反。 (神经元的输入表示a,输出表示b,下标,和分别表示输入门、forget gate、输出门下标表示cell。 从cell到input、forget和output gate的peephole权重分别为wc,wc and wcSc为cell c的状态控制门的激活函数,f、g、h分别为cell的输入输出激活函数I为输入层的神经元数,k
错误的反向传播: