java8 retry 重试机制_让RNN记忆得更久——UR门控机制浅析

7d36e0f13b294d7dc334c6f73f715ab3.png

递归神经网络(RNN)由于具有按照输入数据顺序递归学习的特性,目前已经成为处理序列数据的主流深度学习模型,而作为RNN的一种,长短期记忆网络(LSTM)自上世纪90年代提出以来,就一直是针对于序列问题的一个强有力的模型,其采用了门控机制(gating mechanisms),模型通过输入门和遗忘门来对历史数据进行有选择的学习,然而LSTM虽然可以“记忆”历史信息,但是却没有办法记住跨度很大的信息,这就使得它在长序列任务中的表现欠佳。

今天介绍的这篇论文Improving the Gating Mechanism of Recurrent Neural Networks,就是要让LSTM这类门控RNN能够更好地捕获长距离信息。为此,论文中提出了一种针对于门控机制的改进方法,使得改进后的门可以保留更长的记忆。特别地,由于改进的是门控机制,这就意味着它可以直接应用于各种RNN模型中,只要这些模型是采用门控机制方法来记忆信息的。该论文就将改进后的机制应用到了LSTM、GRU、ON-LSTM等模型中,特别是ON-LSTM,下文将会着重介绍这个模型与论文提出的门控机制之间的关联,建议不了解的同学可以先看一下我的这篇文章或其它相关资料,后面我就不再赘述ON-LSTM的具体细节了。

https://zhuanlan.zhihu.com/p/77086523​zhuanlan.zhihu.com

1. LSTM的"记忆"问题

在对LSTM进行改进之前,我们当然要先弄明白是什么原因导致了LSTM的长期“记忆”不好。LSTM的更新公式如下:

其中
,为了书写简便,后面就统一用

代替;公式中的其它符号与通用的符号基本一致,
分别是遗忘门(forget gate)和输入门(input gate),从公式
可以看出,LSTM通过
的更新来实现对于历史信息
和当前输入信息
的记忆与忘记。

如果我们假设遗忘门的值保持在

不变,那么k步之前的历史信息
对于当前状态
的贡献就为
,或者可以认为k步之前的信息会以
的速率
衰减(decay),而研究表明,对于这样的衰减速率,其有效的时间步长是
,也就是说只有大致只有最近的
步内的信息可以影响到当前状态,我们把这个有效时间步长称为
衰减周期(decay period),它在一定程度上反映了模型的“记忆”能力。举一个例子,如果遗忘门的激活函数
是sigmoid函数,假设括号内的
,则
,那么衰减周期大致是
,也就是说此时的模型只能记住3、4步之前的信息。

这样看的话,似乎长期记忆的问题很好解决,我们只要通过某种方法让遗忘门

趋近于1,不就能够令衰减周期变大,从而实现长期记忆了吗?这个办法确实有效,但是这样同时也会导致一个新的问题,那就是
梯度消失(gradient vanish),我们知道sigmoid函数的梯度是
,因此在反向传播梯度的时候,如果
的值趋近于1,那么梯度
就会趋近于0,这就会导致模型的训练停滞不前,因此我们称这样的
是“
饱和”的(saturating),不仅是对于sigmoid函数,这种“饱和”的现象在所有的有界函数中都会存在,比如说tanh函数,由此可见,简单地令
趋近于1是不可行的。

因此,对于原始LSTM模型来说,这是一个两难的问题,要想实现长期记忆,就会陷入梯度消失的困境,为了避开这个问题,就需要对模型做出一些改进,这方面的思路有很多,比如使用skip connections 和 dilations,或者加上一个额外的存储机制等等,还可以从常微分方程稳定性的角度出发,来寻找一个恰到好处的临界状态(具体可以看我这篇文章循环神经网络——反对称RNN模型介绍的论文)。而这篇论文就从改进门控机制的角度来解决这个问题,其名字中的UR分别代表了两种改进方法,分别是Uniform Gate Initialization(UGI) 和 Refine Gate,UGI解决的是第一步,它让遗忘门

中的一些值趋近1,但是这并不能解决梯度消失的问题,所以还需要第二步Refine Gat 来避免梯度消失。我们接下来就进入主题,分别介绍这两种方法。

2. Uniform Gate Initialization

从名字中就可以看出来,UGI做的事情其实就是对门控做初始化,从而令门控向量中值的分布符合我们的要求,通常的做法是初始化门控中线性函数

的偏置项
,例如若初始化
, 可以认为线性函数
的值也在0附近,那么遗忘门
的值就集中在0.5附近。而UGI通过令偏置服从一个特定的分布,来使得门控向量中的值服从[0,1]上的
均匀分布,这样遗忘门就既能记住长期信息,同时也能兼顾到最新输入的信息。UGI用公式来表达也很简单,如下所示:

其中
是sigmoid函数的反函数,通过这样的方式初始化
,可以使得遗忘门

这种初始化偏置的办法并不新鲜,接下来就介绍一些相关的工作,然后再将UGI与它们做些对比。

首先是Chrono Initialization(CI) ,这是第一个用区间分布来初始化偏置的方法,CI的具体形式如下:

简单分析一下,我们知道sigmoid函数形式为

,那么衰减周期D就可以写做

这样来看,CI做的事情其实很简单,就是让初始化后的遗忘门的衰减周期服从

的均匀分布。然而,虽然衰减周期是均匀分布的,但是遗忘门
中的值却并不是均匀分布的,其中较大的值会比较多,这就导致“饱和”的情况比较多,训练起来比较困难;另外就是该方法中还引入了
这个超参数,这就给模型的调参增加了困难。

为了避免超参数,也有研究者提出了下面的办法:

类似地,可以得到衰减周期D的分布为

,但是对于
来说,这仍然是一个过于强调长期记忆的
重尾分布(heavy-tailed distribution)。

现在计算一下UGI的衰减周期分布,若衰减周期

,那么相应的
,由于
是[0,1]均匀分布的,因此D的累积分布函数为

那么衰减周期的密度分布函数就为

总结一下,上面的这两种初始化办法都人为地引入了超参数或特定的分布,但是在对任务没有先验知识的情况下,相对来说还是UGI这种直接让

均匀分布的方法更加合理一些。下表列了一些不同的初始化策略对于衰减周期分布的影响。

e0bb4988fe4adb4ced4b4d027ad1c9a3.png
一些不同的初始化策略对于衰减周期分布的影响

3. Refine Gate

接下来就是这篇论文的核心内容了,我们在第一节提到,只让

的值趋近于1虽然能实现长期记忆,但是却产生了梯度消失的问题,而这篇论文则通过引入Refine Gate机制来实现梯度的高效传播,其整体思路是:对于遗忘门
,我们引入另外一个独立的refine门
,将
调整为
,调整得到的
被称为
effective门,最后它将 作为新的遗忘门参与到模型的更新当中,而为了做调整,需要引入一个额外的门,叫做 refine门,通过它来实现从
的调整,从而最终解决反向传播时梯度消失的问题。

具体来说,论文是通过在

上加一个值来实现
的调整:定义关于一个输入和遗忘门的函数
,则effective门
,相信一些看到这里的同学已经意识到,这不就是
残差连接(residual connection)吗?没错,我们知道残差连接可以有效地避免梯度消失,而这篇论文也同样利用了这一特点。不过不同于一般的残差项,这里对于
的函数形式有一定限制,它需要满足门控机制的要求,接下来我们就根据一些必要条件来推出一个满足要求的
,从而得到refine门的确切形式。

首先对于遗忘门

,我们希望对于它的调整应该是
可正可负的,举例来说,对于一个比较大的
,有时我们需要它能够记忆得更久一点,这就需要一个正的调整,不过
也有可能过大,以至于无法很好地捕捉到新信息,这时的调整就应该是负的。因此,我们希望得到的effective门应该在
这个范围之内,而对于函数
,它应该满足下面的要求:

6227912a53a04dbcea6db6b6107794d7.png

如下图所示,根据这几个条件,我们可以用图中的虚线来表示函数

的范围限制。简单分析一下,Validity要求
,Symmetry要求
,Differentiability要求
连续的。因此一个比较合理的函数形式是
,那么
,即图中的实线。

3d951891e4a284cad03bf09b5659d136.png

这样一来,为了保证在

这个范围之内,
的形式也可以确定下来了,就是
,其中
来保证effective门
。在这里我们引入一个refine门
,来构造
,这样的话
的完整形式为:

从这个表达式可以看出,

的取值范围是
,从这个过程中可以看出,refine门相当于在原先遗忘门
的基础上做了一些“
微调”,这也符合它名字的含义,原始的遗忘门相当于一次“ 粗调”,再经过refine门的一次“微调”之后,才得到最终的effective门
,通过这种方式,我们绕过了梯度消失的问题。举例来说,在
的时候,effective门可以达到0.99,这样我们即实现了长期记忆,同时也避免了在反向传播时梯度
过小的问题,refine门对于梯度的改善如下图所示,其中横轴代表
的取值,纵轴表示refine门微调后的梯度与不微调(即
)梯度的比值,蓝线表示比值的上界,黑线代表下界。举个例子,在接近“饱和”状态,即
趋近于1时,经过refine门微调后的梯度最高可以是不微调的3倍多,最小也是1倍以上(具体的公式推导见论文附录),因此微调可以在一定程度上改善梯度消失的问题。

26bd97c58f7c8effbb6378b17580419b.png

当然,我们也可以分别来计算上下界

,不过论文中说之所以不分开计算,是因为令
可以使得当refine门处于中点
的时候,
,下图展示了原始的遗忘门
和它经过“微调”后的上下界。

e793cd66fc8d29ae30400729e4c8697d.png

将UGI和Refine Gate综合起来,我们就可以改进原有LSTM的门控机制,改进后的模型就被称为UR-LSTM,其更新公式和流程图如下所示:

cd3fb0565d032587ba94b204cc7ee154.png

图中的

分别代表
取值的上下界,另外,注意到这里用
来代表原先的输入门
,通过这样的方式可以
有效地减小参数量,并且不会对模型性能造成太大的影响

将UGI和Refine Gate结合起来之后,我们需要再分析一下改进后的模型的衰减周期,根据前面的结论我们知道,

,由于
,因此D的取值在
之间,设遗忘门的衰减周期
,我们已经在上文中得到了
的衰减周期分布为
,而“微调”后的衰减周期就大致在
之间。

简单总结一下,通过上面的讨论可以发现,其实UGI和Refine Gate从分别两个角度对门控机制做了修改,U改变的是输入,通过增加一个偏置项来使得初始化后的门控能够兼顾到长期和短期记忆,而R修改的是输出,利用残差连接的思想,通过引入一个refine门来进行“微调”,这样就可以有效缓解“饱和”状态下的梯度消失问题。这里需要强调的一点是,U和R这两种方法,不止单单适用于遗忘门,它们可以用在任何门控函数上面,比如UGI也可以用在输入门、甚至是refine门上面,因此,UR机制对于LSTM、GRU等门控模型都是普遍适用的,而后面的实验也证实了这一点。

4. 与ON-LSTM的关系

为了表明UR机制的广泛适用性,论文还着重讨论了其与ON-LSTM之间的关联,发现其实ON-LSTM的改进方法也可以通过UR的思路(即控制分布+辅助门)来理解,接下来我们就详细讨论一下它们之间的关系。

关于ON-LSTM的推导这里就不再赘述了,直接放结果,该模型的更新公式为:

其中,我们称

为master门,它们的激活函数

首先来看ON-LSTM与UGI的相似之处,对于cummax这样的激活函数,我们知道它输出的向量是一定是从0到1单调递增的,而这其实就暗含了输出的门控向量是分布于[0,1]之间的,与UGI的直接产生[0,1]的均匀分布有类似之处。

其次来看与Refine Gate的相似之处,我们可以认为

这两个门的作用就是对master门进行“微调”,具体来说,ON-LSTM是先计算得到
,然后再将master门与原始的
相结合来实现“微调”,将上面的公式稍微转换一下,就可以得到下面的形式:

这样一看就很清晰了,

两个门的作用就是为了实现从
的“微调”,而这也与refine门的思路不谋而合,下面具体分析一下两者的关系。

稍微变一下ON-LSTM的公式,有

这样我们就能将

看做是effective门,可以将其写成“微调”的形式

从式子中可以看出,这里的

其实就是refine门,而
就是遗忘门,与R机制完全一致。

同样,输入门也有类似的形式

另外,考虑“绑定”情况,我们有

因此,只要令

,那么就能保证

上面的讨论可以看出,ON-LSTM在很多地方都可以体现出UR机制的思想,只要对其稍作修改就可以和UR机制符合地很好,不过ON-LSTM只是隐式地涉及到了UR机制,并没有显式地表达出来,因此它也有一些不足之处:

  • cummax激活函数:实验表明,当隐层比较大的时候,该激活函数似乎学习速率更慢、也更不稳定,这也是为什么ON-LSTM中引入超参数C来降低隐层的大小。不过,对于需要提取层级结构的任务(如分析句子的语法结构)来说,cummax还是有其可取之处的。
  • 门控“绑定”:为了减少参数,目前比较流行的做法是将遗忘门与输入门“绑定”起来,使得
    ,即用
    来表示输入门,实验表明,这样做并不会明显降低模型性能,因此像GRU和论文的UR-LSTM都采用了这样的方式,但是ON-LSTM却并没有保证遗忘门和输入门之和接近于1(可以计算出初始化后的遗忘门与输入门平均值的期望都为
    ,具体推导可见论文附录)。

5. 实验对比

为了证明UR机制可以有效改进门控模型的长期记忆能力,论文中做了许多对比实验,将U和R以及其它的baseline方法,做排列组合后加到了一些基础的递归核(如LSTM、GRU等)当中,由于构造的模型较多,因此用字母的组合来代表它们,具体如下表所示:

dc23b9dc52225ddb2752e796ff544ca9.png

这里需要注意的是,为了符号规范,ON-LSTM改用字母组合OM-LSTM来表示,代表ordered gates + master gates,同时为了公平比较,所有模型的

是“绑定”的,而且参数都与标准LSTM一致(带M的模型除外,因为需要计算两个master门)
  1. Synthetic memory 任务

这个实验比较简单直接,直接通过构造序列来考察模型的记忆能力,具体由由两个task组成:

3dfae77a056544b7dc753b08a4a35d94.png

实验结果如下图所示,其中Copy task的序列长度是500,Adding task的长度是2000

a14fae440add002f25f6c72b41585fd3.png
左图是Copy task,右图是Adding task

实验表明,除了标准LSTM之外的所有模型,都可以解决Adding task,但是只有OR-,UR-,O-, 和C-LSTM模型可以解决Copy task。为了进一步分析不同模型的记忆能力,论文还分析了在copy task中,这些模型的遗忘门在训练前和训练后的取值分布,具体如下所示:

4858a5154dda400a29456e4f041a9d00.png
遗忘门取值的分布,第一行是训练前的分布,第二行是训练后的

从图中可以看出,虽然U-与UR-的初始化分布差不多,但是U-在在训练过程中却不能很好地令遗忘门的分布趋于1,这就使得其长期记忆能力不如UR-,另外再看标准的LSTM,可以发现它更难实现接近“饱和”的分布;而对于C-,它能解决copy task的主要原因是初始化的时候直接就是“饱和”分布了,因此很适合copy task这种需要长期记忆的任务,然而论文中也指出,如果不是这类长期记忆任务,C-的性能就会变差,因此其适用性并不广。

2. Pixel-by-Pixel Image Classification

这是一个图像分类实验,不过传统的任务不同,这里需要将图像先压成一个很长的向量,然后一个像素一个像素地输入到RNN模型当中,构造向量时可以按照直接顺序排列,如sequential CIFAR-10 (sCIFAR),也可以先按照固定的顺序打乱像素位置后再压成一个向量,如permuted MNIST (pMNIST) ;从实验设定里可以看出,为了较好地实现分类,RNN能够需要捕捉到像素之间的关联,这就要求模型要具有一定的长期记忆能力。不同模型的结果如下所示,由于很多模型的结果并不稳定,因此表中的数值代表其在最佳验证集的上的分数,数字上的星号代表模型出现发散情况的次数,越大代表发散次数越多(具体细节可见论文实验部分)

cba048954abda811c5c183d176003004.png
不同模型在验证集上的准确率

689c9cff9c6fc42fd6866607b6d97d9a.png

从实验结果可以看出,采用了U和R方法后,确实改进了模型的长期记忆能力。特别地,实验还发现如果采用GRU核作为递归核,模型性能还会更好,如果我们在UR-GRU的基础上, 再加上RNN中常用的Zoneout正则化技术,其性能甚至还会超过一些如Transformer之类的非递归的模型,如下图所示。

25adf52005d60bc22615043d90a0ac58.png
测试集上的准确率,顶部是一些baseline,中间是一些非递归模型 ,底部是论文的模型

通过上面的实验,我们可以得到一些结论:首先是加上refine门的效果基本上都比加上master门的效果好;其次是CI虽然比较适合synthetic memory任务,但是在其它任务上却表现糟糕;还有cummax门确实有效,但代价是它在复杂任务上的速度比较慢;最后总的来看,还是UR-的性能最好也最稳定。

除了上面的两个实验以外,论文还做了语言模型和强化学习方面的实验,不过受限于篇幅,这里就不再介绍了,对于这些实验及其细节感兴趣的同学可以看论文的实验和附录部分,写的也很详细。

6. 总结

终于到结尾了,简单总结一下,这篇论文针对于RNN的长期记忆问题,提出了Uniform Gate Initialization 和 Refine Gate 两种改进门控机制方法,加入了UR机制之后,RNN模型既可以更好地实现长期记忆,又能够避免“饱和”状态所带来的梯度消失问题。不过更重要的是,UR机制是一种针对于门控模型的通用改进方法,它里面并没有那种针对具体任务而设置的超参数,因此在理论上采用门控机制的RNN模型都可以通过UR机制来改进,而这无疑为后续的研究提供了一个强有力的新工具。

参考资料

[1] Improving the Gating Mechanism of Recurrent Neural Networks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值