目录
引言
本周阅读了一篇关于名为R-Transformer的模型的文献,结合了循环神经网络和多头注意力机制的优势,能够在序列中有效捕获局部结构和全局长期依赖关系,无需使用位置嵌入,并在大多数任务中显著优于现有方法。
Abstract
This week, I read a literature on a model called R-Transformer, which combines the advantages of recurrent neural networks and multi head attention mechanisms to effectively capture local structures and global long-term dependencies in sequences, without the need for positional embeddings, and significantly outperforms existing methods in most tasks.
文献阅读
1、题目
R-TRANSFORMER: RECURRENT NEURAL NETWORK ENHANCED TRANSFORMER
2、引言
递归神经网络长期以来一直是序列建模的主要选择。然而,它严重遭受两个问题:在捕获非常长期的依赖性和无法并行化的顺序计算过程中无能为力。因此,最近提出了许多基于卷积和注意力操作的非递归序列模型。值得注意的是,具有多头注意力的模型(如Transformer)在捕获各种序列建模任务中的长期依赖关系方面表现出了极大的有效性。尽管他们的成功,但是,这些模型缺乏必要的组件来模拟局部结构的序列,并严重依赖于位置嵌入,具有有限的效果,并需要大量的设计工作。在本文中,我们提出了R-Transformer,它既具有RNN和多头注意力机制的优点,又避免了各自的缺点。该模型可以有效地捕捉局部结构和全球长期依赖的序列,而不使用任何位置嵌入。我们通过广泛的实验来评估R-Transformer,实验结果表明,R-Transformer在大多数任务中的表现都远远优于最先进的方法。
3、问题
主要综合了RNN和Transformer两种模型的优点,提出了R-transformer
Transformer虽然在很多模型上表现出了很好的效果,但目前有两个比较致命的问题:
- 第一是对于位置的编码,虽然transformer引入了Position embedding,但是其效果并不好。并且对于具体的任务还需要设计具体的位置编码方式;
- 第二是多头注意力机制忽略了很多局部的特征
而RNN主要的问题是难以处理长距离依赖关系和难以实现并行
4、改进方法
将transformer的position embedding替换成局部的RNN,文章中称其为LocalRNN。具体来讲就是对一个序列,在每个位置的一个固定大小窗口范围内跑一个LocalRNN,将其局部的特征也表示到向量中,然后再按照transformer那样进行全局的多头attention和FeedForword
这个模型实际借鉴了TCN模型和标准transformer模型的思想。R-transformer借鉴了TCN层次化的思想,但在局部特征的提取方式上,TCN使用的是卷积核,而该模型使用了LocalRNN,这样可以更好地将位置信息进行提取。
通过以上改进,模型可以通过LocalRNN提取局部特征,弥补标准transformer在这方面的不足,同时在整体框架上依旧保持着transformer模型可并行的特点
5、R-Transformer模型
R-Transformer模型由一系列相同的层组成。每一层包含三个组件,按层次结构组织,层结构的架构如图1所示。较低级别是用于建模序列中的局部结构的本地循环神经网络;中间级别是能够捕捉全局长期依赖性的多头注意力;较高级别是逐位置的前馈网络,进行非线性特征转换。
R-Transformer提出用一个个单独的RNN来对每一个位置进行单独处理 (注:可以是Vanilla RNN,LSTM或者GRU),如下图,最底下的每一个红色圆代表句子中的一个词,最左侧虚线圆是补全上去的,每一个RNN只在一个窗口中运行,窗口的大小为3。假设没有补全,在第一个窗口中第一个红圆在第一位置,论文中需要确保处理每一个词时这个词后面的信息是不能获取到的,即将每一个需要处理的词放到窗口的最后一位,这样前面的都是过去的,不包含后面的信息,因此需要补全。
经过Local RNN之后每三个词就会对应一个隐藏状态,将隐藏状态和原始输入做一次Add & Norm
接下来会进入多头注意力层,这里与Transformer中的处理一致,区别是这里q,k,v是用隐藏状态进行初始化的。对于第 t 个时间步,首先初始化q,之后再初始化每一个k,v,然后与它们做点乘运算,形成这个q和整个序列的关系。结束多头注意力之后再过一下Add & Norm。最后经过全连接层和Add & Norm,全连接层的设置与Transformer一致。
用公式来整体看一下N层的结构,对于 层(
):
R-Transformer通过单个的RNN捕捉位置信息来代替位置编码,因为每一个词都由不同的RNN处理,避免了传统的“一个接一个”的尴尬处境,进而可以并行化处理(每个RNN处理三个词不算多);另外,传统RNN由于中间传播很多次,很容易产生梯度消失和梯度爆炸的情况,这里的每一个RNN的处理总步长只有3,可以较有效地规避这两个问题。
6、模型对比
TCN:与R-Transformer不同,TCN采取卷积运算的方式来获得位置信息,卷积的本质即是矩阵做点乘运算,将滤波器中的值换为query就可以获得滤波器窗口内词与词之间的联系,可是滤波器并非横向进行,而是一块窗口在选定范围内进行移动,因而忽略了序列信息。
7、实验
选取了图像,音频和文本数据作为实验对象,通过对照实验R-Transformer在文本领域略输于Transformer-XL,其他领域均优于Transformer-XL,Transformer和TCN。
选取了MNIST作为数据集,有趣的是这里把28 * 28的像素矩阵转为784 * 1的长序列矩阵,这样就使得原本靠的很近的像素离的很远,这样用以测试模型是否能够捕捉长距离依赖。
选取了Nottingham作为数据集,每个乐符与它附近的乐符都有较深的联系,这也就考验了模型捕捉本地序列关系信息的能力。实验中,学习率选自 ,Dropout的概率为0.1,此外训练时还选取了梯度裁剪,用负对数似然(negative log likelihood)作为损失函数。
这里选取了字符级(character-level)和词级(word-level)的文本,数据集为 PennTreebank,,任务是给定句子的前 N 个位置,预测下一个字符/词。
在字符级的任务中,学习率属于 {1,2,3} ,Dropout的概率为0.35,梯度裁剪同样用到,选取了bpc(bits-per-character)作为语言评价指标,先介绍困惑度(perplexity),对于一个长度为 � 的字符串,这里 是字符。
在词级别的任务中,上面选择的参数不变,同时选取了Transformer-XL(SOTA)作为基例,对于它来说学习率选自于 {0.01,0.001,0.0001},结果是0.001效果最好。这里用的是困惑度(perplexity)作为评价指标,这里 是词。对于Transformer-XL超过R-Transformer可以理解,毕竟是专门为该领域涉及的SOTA版。
8、结果
在本文中,我们提出了一种新的通用序列模型,它既具有RNN和多头注意力的优点,又减轻了它们的缺点。具体来说,它由一个LocalRNN和一个多头注意力池组成,LocalRNN学习局部结构,而不会受到RNN的任何弱点的影响,多头注意力池可以有效地捕获长期依赖关系,而无需任何位置嵌入的帮助。此外,该模型可以很容易地实现与序列中的位置完全并行化。来自广泛领域的序列建模任务的实证结果表明,R-Transformer比最先进的非递归序列模型(如TCN和标准Transformer以及规范递归架构)具有显着的优势。
总结
本周学习了关于R-Transformer,它既具有RNN和多头注意力机制的优点,又避免了各自的缺点。该模型可以有效地捕捉局部结构和全球长期依赖的序列,而不使用任何位置嵌入,之后会复现其附加代码进行深入的了解。