显式引入了顺序性的归纳偏差,能够泛化至任意长度的文本 是一种数据驱动的编码方式,并且额外增加的参数量与文本长度无关 sinusoidal encoding可以看作是FLOATER的一个特例,因此使用预训练Transformer初始化FLOATER 可以在不增大参数量的前提下将位置信息直接注入到每一层中 前情提要 RNN和LSTM通过按顺序读取输入序列的方式来包含顺序性归纳偏差,而非自回归的Transformer由于其置换等价的特性 而对位置不够敏感,对于一些对位置信息要求较高的任务来说(NER),如何有效地对Transformer编码位置信息是很关键的问题。当前流行的位置编码包括如下三种解决方案:
1. 三角函数编码 「优势:」
Inductive: 显式刻画了位置的顺序信息,可直接外推到长句子上。 「不足:」
Parameter-free: 是预定义的函数,不包含可学习的参数,不够灵活。但对于NMT这类对位置信息要求不高的任务是够用的。另外,Universal Transformer和ALBERT发现将位置编码注入每一层会有进一步的性能提升: 2. 绝对位置编码 「优势:」
Data-driven: 与词向量的学习类似,通过对各个位置构建一个 的映射得到位置嵌入矩阵 ,通过可学习的参数让模型从数据中自动学习位置信息。比起sinusoidal encoding,position embedding更适合词汇级任务(BERT、RoBERTa)。由于额外参数量较大,还没有人尝试将position embedding应用到每一层上去。 「不足:」
Bounded: 需要额外增加 的参数量,需要预先指定输入文本的最大长度(如BERT、RoBERTa设定的 ),因此无法给出 。
Non-smooth: 和词一样,不同位置的编码是独立训练得到的,然而位置和词并不完全对等,因为词汇的索引是根据词典的编排顺序来的,每个词是独立的,而位置索引天生就有顺序性。因此这样的方式不能充分建模位置的顺序关系,模型只能分辨出两个位置的不同,而不知道它们的相对关系是什么。
3. 相对位置编码 「优势:」
Unbounded: 更直接地建模了词与词之间的相对位置关系,适用于长句子的位置编码(Transformer-XL) 「不足:」
Less flexible: 需要额外增加 的参数量,因此需要预先指定最大相对距离 防止参数量过大,这导致了距离大于 的token之间位置依赖关系的丢失。
Non-smooth: 学习到的位置编码不光滑,但实际上位置编码的不光滑并不代表效果就不好。
4. 复值函数编码 在本文发表的同一时期,ICLR 2020: Encoding word order in complex embeddings[2] 提出了一种以单词 和该单词所在位置 为自变量的连续复值函数来联合编码词汇和位置信息:
其中振幅 ,波长 ,相位 均为需要学习的参数。这篇文章想解决的问题和本文是相似的,只是采用了完全不同的方法,不同的方法各有优缺点。
「优势:」 该位置编码函数能够使得同一个单词在相邻的位置有相似的向量表示,能够满足位置的一些基本性质,另外,通过训练 ,模型还拥有动态调节单词 对位置的敏感程度的能力。
「不足:」 该方法将嵌入矩阵的规模增大了三倍,显著增加了参数量。
FLOw-bAsed TransformER (FLOATER) 综上,本文作者认为一个好的位置编码应满足如下的三个条件:
「Inductive:」 能够处理比训练过程中看到的任何序列都长的序列「Data-Driven:」 位置编码应该从数据中学习(learnable)「Parameter Efficient:」 位置编码引入的额外参数量应该不受文本长度的影响,模型尺寸的过度增加会影响泛化能力本文提出了一种将位置编码建模为一个连续动力系统的方法,该方法几乎克服了上述编码方式的所有缺点,「一方面显式引入了顺序性的归纳偏差,另一方面位置编码是通过训练得到的,且每个位置的编码不是独立学习的,另外额外增加的参数量不会随着序列的长度而变化,且能够自然外推到长句子上。」
Position Encoding with Dynamical Systems Transformer中的位置编码可以看作是一个离散序列 ,我们可以将该序列连续化为 ,为了建立序列的自相关性,我们使用常微分方程(Neural ODE)构建一个连续动力系统:
它的积分形式更好理解:
方程初始条件为 , 是一个由 定义的神经网络,其输入为 。离散的位置编码 可以通过取 在 上的值得到,可以简单地将 设为 ,其中 是一个超参数。这样,我们就可以根据 和 解出 :
在训练时采用Adjoint Method[3] 计算 的梯度:
被称为adjoint state,可以通过求解adjoint equation得到:
作者在NMT任务上使用步长为 的Runge-Kutta法,在GLUE和RACE上使用中点法来求解上述方程。
Parameter Sharing among Blocks 之前提到可以在Transformer的每一层都注入位置信息,不过该方法只适用于sinusoidal embedding,因为每增加一层的位置信息,用于位置编码的参数量就会翻倍,虽然可以让每一层共享参数,但这样做的话每一层的位置编码都会是一样的,不会带来什么额外信息。
但作者提出的连续动力系统能够在共享参数的同时,使得每一层的位置编码是不一样的,这是因为虽然每一层的 是一样的,但是初始状态 ,所以求解得到每一层的位置编码是不一样的:
其中每一层的Neural ODE共享参数:
Compatibility and Warm-start Training 作者发现sinusoidal encoding实际上是FLOATER的一个特例:
因此可以考虑将其用于模型训练的参数初始化。Transformer每一层的查询矩阵 可以表示为
其中 为sinusoidal encoding,我们可以以同样的方式表示FLOATER,并将其分解为sinusoidal encoding和偏置项之和:
因此FLOATER等价于在原始Transformer的基础上增加了偏置项 ,所以可以考虑直接对偏置项建模:
然后设定 ,可以发现,当 时, ,此时FLOATER退化为sinusoidal encoding。
这样,FLOATER就和原始Transformer是兼容的,我们知道原始Transformer没有自回归结构,因此训练是非常快的,而加入了Neural ODE后的FLOATER训练速度会显著下降,所以我们可以用预训练好的模型来初始化FLOATER,然后直接在下游任务上微调模型,而不用从头训练FLOATER,这样也可以直接对比作者提出的方法是否能够带来改进。
实验 作者将RoBERTa作为基础模型,并设置完全相同的超参数和checkpoint,FLOATER与RoBERTa唯一的不同就是在fine-tune阶段,FLOATER需要优化位置编码中的Neural ODE。
机器翻译
可以注意到对每一层都注入位置信息会带来性能提升,然而Fixed-length Position Embedding是例外,这是由于引入的额外参数过多会导致模型过拟合。
语言理解和问答
讨论与分析 泛化能力 为了研究FLOATER的泛化能力有多好,作者从WMT14 En-De数据集中取出短句( ,占数据集的98.6%)训练模型,并在长句上测试模型,测试结果表明FLOATER在长句翻译的表现上显著优于其他位置编码方式。
Is RNN a good alternative to model the dynamics? RNN和Continuous Dynamical Model有很多相似之处,它们都有递归的特性和外推的能力,因此作者也尝试了用RNN来做位置编码:
其中 分别代表第 个位置的位置编码和输入, 可以是scalar,也可以是vector,作者认为将其表示为sinusoidal vetor更好。实验结果显示FLOATER具有优势。作者提到将vector作为输入更好,却没有在相同参数量下与FLOATER作对比。
What does each position encoding look like? 下图展示了不同位置编码方式得到的编码矩阵,可以注意到position encoding底部几乎是常数,这是由于训练集中长文本太少,位置编码得不到充分的训练。而FLOATER的编码看起来更光滑。RNN存在梯度消失问题,因此低维度的位置特征没有得到充分学习。
Remarks on Training and Testing Efficiency Neural ODE带来的额外时间开销是不容忽视的,即使选择简单的 (两个全连接层+一个非线性变换层)也会大大增加时间开销。因为Neural ODE需要调用微分方程求解器求解,无法利用GPU并行计算能力。
作者尝试对偏置建模,使用原始Transformer来初始化FLOATER也是为了避免从头训练模型,另外作者还通过用小权重初始化 ,以及单独训练位置编码层,增大位置编码层的学习率,测试时使用预先计算的位置编码等手段来减小时间开销。最终,与Transformer相比,FLOATER只增加了20%-30%的训练时间。
尾巴 本文应该是少数几篇将Neural ODE用于NLP的文章,一方面是由于自然语言高度离散化的特点使得连续性假设可能并不实用,另一方面,Neural ODE目前尚处于理论发展阶段,还没有得到广泛的应用,Understanding and Improving Transformer From a Multi-Particle Dynamic System Point of View[4] 曾利用动力系统来解释并优化Transformer,取得了不错的结果。
就位置编码的后续处理方式来说,本文依旧选择将位置编码向量和词向量相加,但TENER[5] 指出这种方式常会导致位置编码信息在后续变换中丢失。
由于Transformer的模型容量是很大的,很大程度上还处于欠拟合的状态,只要提供更多的数据,训练更长的时间,模型就能得到进一步的性能提升。可以猜测,当模型的体量越来越大,数据中已经隐含着丰富的位置信息时,更先进的位置编码方式所带来的改进可能就会越来越小。
本文参考资料 [1] Learning to Encode Position for Transformer with Continuous Dynamical Model: https://icml.cc/virtual/2020/poster/5906
[2] ICLR 2020: Encoding word order in complex embeddings: https://iclr.cc/virtual_2020/poster_Hke-WTVtwr.html
[3] Adjoint Method: http://papers.nips.cc/paper/7892-neural-ordinary-differential-equations
[4] Understanding and Improving Transformer From a Multi-Particle Dynamic System Point of View: https://arxiv.org/abs/1906.02762
[5] TENER: https://arxiv.org/abs/1911.04474
[6] 香侬读 | 基于连续动态系统学习更加灵活的位置编码: https://zhuanlan.zhihu.com/p/120349792
[7] 一起读论文 | Complex-order: 一种新的位置编码方式: https://zhuanlan.zhihu.com/p/110662282
[8] Encoding Word Order in Complex Embeddings: https://zhuanlan.zhihu.com/p/98736506
[9] Transformer的物理解释: https://zhuanlan.zhihu.com/p/71747175