经典论文阅读---LSTM
- 记录下LSTM
本文解决了什么问题
- 在摘要中提到了,传统的BPTT或RTRL会出现,误差(就是梯度)消失、爆炸的问题;梯度消失会导致更新过慢,甚至不能学习,梯度爆炸会导致权重震荡
- RNN和Lstm的不同之处,在于改进了RNN的梯度爆炸、消失问题
- 本文利用lstm的结构,改进了这个问题,整个结构使得恒定的error flow,不会梯度爆炸、消失(感觉是吹的)
BPTT
BPTT是back propagation throught time,是梯度沿时间通道传播的算法
假设在时间
,真实值(文中说的target
)是 , 指第 个值;预测值为- 有一说一,原论文的公式写得太简洁了
- 如果损失函数是mse,即
- 那么第
的单元的误差就是,对第 个神经元求导,即- 文中把这个叫做
error signal,误差信号 - 文中用了vartheta这个符号来表示这个梯度
- 文中把这个叫做
- 其中
, - 即
是激活函数, 是单元 到单元 的权重连接,也就是我们需要更新的参数 - 而中间层的误差为,即对
个神经元求导,有
Hochreiter’s analysis
- 现在关注下神经元
到神经元 的误差流向( 在模型的底层, 在上层,所以反传的时候,是) 这里有两个概念,第一个是时间
,神经元任意一个神经元
,在时间 ,产生的误差,都会反传回去,假设反传了 个step,即 个时间,到达神经元 ,
- 这一章的符号看得一愣一愣的,完全不知道在说啥
- 但是提出了一个观点,即增加神经元的个数,不一定能增加error flow
constant error flow
- 前面一节太难了,符号太麻烦了
- 这一节讲怎么得到常数级别的误差
模型结构
- 本文构建了一种模型,有常数级别的error flow,这些error可以传递过特殊的、自连接的神经元,而且又没有上面方法的缺点
这里扩展了constant error carrousel
- constant error carrousel的意思
- carrousel应该翻译成旋转木马
输入门:保护存储在
上的记忆,个人认为是特征,避免被不想关的信息给扰动- 输出门:文中用了multiplicative来形容,是用来保护存储在当前
中的,不相关的记忆 - 记忆门:每一个记忆门的神经元,都是建立在中心的线性神经元之上,而且有固定的self-connection,这是什么意思
为啥要用gate units:避免输入权重的冲突,模型使用输入门来决定,保留还是重写记忆门中的
,输出门的
决定什么时候获取
- abuse problem:在学习(训练)的开始阶段,可能还没有存储信息就已经缩减了误差,那么模型就倾向于滥用memory cells,可能需要很长时间才能释放这些滥用的memory cells。
- 有两种方式来解决这个问题:sequential network construction,即无论误差是否已经停止下降了,都可以加memory cell进去;output gate的bias设置成负值,来促进memory cell激活值趋于零,在实验中表明,这些数值
- internal state漂移的问题:如果memory cell的输入,大多都是正(负)数,那么internal state会倾向于随着时间漂移(感觉就是发散了,不集中在中间),一阶导就会容易倾向于变成小的数值,然后梯度就会消失。
- 解决的方法是:选择合适的激活函数;初始化输入门的bias为0,这里是个trade off问题
- 文中提到,使用sigmoid激活函数之后,就不需要来微调bias
实验部分
- 首先,任务应该要足够复杂,不能被简单的解决掉,言下之意就是,不能通过随机猜权重就解决了