东城网站建设免费的云服务器有哪些
Transformer升级之路:7、长度外推性与局部注意力
Transformer升级之路:8、长度外推性与位置鲁棒性
Bias项的神奇作用:RoPE + Bias = 更好的长度外推性
长度外推
1.1 什么是长度外推性?
长度外推性=train short, test long
train short:1)受限于训练成本;2)大部分文本的长度不会特别长,训练时的max_length特别特别大其实意义不大(长尾)。
test long:这里long是指比训练时的max_length长,希望不用微调就能在长文本上也有不错的效果。
1.2 为了做到长度外推性,需要解决两个主要问题:
1)预测时位置编码的外推:没见过的就无法保证很好的泛化,不仅学习式位置编码如此;像正弦位置编码、RoPE也有这样的问题,它们自身虽然不用学习,但是会影响上层参数的学习;
2)预测时序列更长,导致注意力相比训练时更分散:序列长度增大意味着attention分布的熵增大了,注意力更分散了;
1.3 长度外推性的推测
可见,长度外推性问题并不完全与设计一个良好的位置编码等价。
然后,还有个问题是,虽然PE一直是transformer类模型中的重要的基础组件,很多位置编码也在尝试做一些外推性的工作,但整体来看早期的LLM其实没有特别关注或者说纠结长度外推性,直到后面各种NLG模型的崛起,尤其是ChatGPT的出现,大家才惊觉原来上下文可以做的这么长了?
为什么目前市面上的LLM鲜有使用呢(据目前所知,好像只有BLOOM/MPT/采用了ALiBi)?可能的原因:
1)专注于长度外推性的工作主要是在21/22年后才逐渐出现,效果尚未经过充分检验;
2)长度外推性的评测指标与LLM的评测指标并不完全match:目前长度外推性主要看PPL,这其实不够全面。PPL这类语言模型的指标,可能更关注局部上下文的预测,因此局部注意力相关的方案可能在这类评测上天然占优。
3)目前的长度外推性工作似乎更多的在强调外推性如何如何,但更重要的应该还是max_length内的效果,从LLM的角度来看,应该在保证max_length内的效果后再去追求外推性。比如,从GLM的消融实验来看,ALiBi的效果还是不如RoPE的。
一直的误解
第一篇明确研究Transformer长度外推性的工作应该是ALIBI,出自2021年中期,距今也不算太久。为什么这么晚(相比Transformer首次发表的2017年)才有人专门做这个课题呢?估计是因为我们长期以来,都想当然地认为Transformer的长度外推性是位置编码的问题,找到更好的位置编码就行了。
事实上,通过对比现有的一些位置编码的外推效果,确实能找到支撑该观点的一些论据。比如后面分享的多篇实验效果显示,相对位置编码的长度外推性,平均好于绝对位置编码的;像RoPE这样的函数式相对位置编码,又会比训练式相对位置编码的外推效果好些。所以看上去,似乎只要我们不断优化位置编码形式,最终就能给Transformer提供更好的长度外推性,从而解决这个问题。然而,情况没有那么乐观,像RoPE算是外推能力较好的位置编码,也只能外推10%到20%左右的长度而保持效果不变差,再长效果就会骤降。这个比例与预期差太远了,设想中好歹能外推个几倍长度才算是有价值的外推,所以不难想象,单靠改进位置编码改进Transformer的长度外推性,就不知道要等多久才能实现更长的效果了。
在直觉上,相信很多读者觉得像Sinusoidal或RoPE之类的函数式位置编码,它们没有训练参数,长度外推性应该很好才对,但事实上并非如此,这类位置编码并没有在长度外推方面表现出什么优势。为什么会这样呢?其实是大家在假设函数式位置编码的外推性时,忘了它的基本前提——“光滑性”。
其实,外推性就是局部推断整体,对此我们应该并不陌生,泰勒级数近似就是经典的例子,它只需要知道函数某点处若干阶导数的值,就可以对一个邻域内的值做有效估计,它依赖的就是给定函数的高阶光滑性(高阶导数存在且有界)。但是Sinusoidal或RoPE是这种函数吗?并不是。它们是一系列正余弦函数的组合,其相位函数是k/100002i/d,当2i/d≈0时,函数近似就是sink,cosk,这算是关于位置编码k的高频振荡函数了,而不是直线或者渐近趋于直线之类的函数,所以基于它的模型往往外推行为难以预估。能否设计不振荡的位置编码?很难,位置编码函数如果不振荡,那么往往缺乏足够的容量去编码足够多的位置信息,也就是某种意义上来说,位置编码函数的复杂性本身也是编码位置的要求。
1.4 实现长度外推性的超强基线
长度外推性是一个训练和预测的长度不一致的问题。具体来说,不一致的地方有两点:
1、预测的时候用到了没训练过的位置编码(不管绝对还是相对);
2、预测的时候注意力机制所处理的token数量远超训练时的数量。
第1点可能大家都容易理解,没训练过的就没法保证能处理好,这是DL中很现实的现象,哪怕是Sinusoidal或RoPE这种函数式位置编码也是如此。
关于第2点,可能读者会有些迷惑,Attention理论上不就是可以处理任意长度的序列吗?训练和预测长度不一致影响什么呢?答案是熵,我们在《从熵不变性看Attention的Scale操作》也已经分析过这个问题,越多的token去平均注意力,意味着最后的分布相对来说越“均匀”(熵更大),即注意力越分散;而训练长度短,则意味着注意力的熵更低,注意力越集中,这也是一种训练和预测的差异性,也会影响效果。事实上,对于相对位置编码的Transformer模型,通过一个非常简单的Attention Mask,就可以一次性解决以上两个问题,并且取得接近SOTA的效果:
不难理解,这就是将预测时的Attention变为一个局部Attention,每个token只能看到训练长度个token。这样一来,每个token可以看到的token数跟训练时一致,这就解决了第2个问题,同时由于是相对位置编码,位置的计数以当前token为原点,因此这样的局部Attention也不会比训练时使用更多的未知编码,这就解决了第1个问题。所以,就这个简单的Attention Mask一次性解决了长度外推的2个难点,还不用重新训练模型,更令人惊叹的是,各种实验结果显示,如果以它为baseline,那么各种同类工作的相对提升就弱得可怜了,也就是它本身已经很接近SOTA了,可谓是又快又好的“超强基线”。
对于第二点:
其中m是训练长度,n是预测长度。经过这样修改(下面简称为“logn缩放注意力”),注意力的熵随着长度的变化更加平稳,缓解了这个不一致问题。个人的实验结果显示,至少在MLM任务上,“logn缩放注意力”的长度外推表现更好。
第1点不一致性,即“预测的时候用到了没训练过的位置编码”,那么为了解决它,就应该做到“训练阶段把预测所用的位置编码也训练一下”。一篇ACL22还在匿名评审的论文《Randomized Positional Encodings Boost Length Generalization of Transformers》首次从这个角度考虑了该问题,并且提出了解决方案。
论文的思路很简单:随机位置训练 设N为训练长度(论文N=40),M为预测长度(论文M=500),那么选定一个较大L>M(这是一个超参,论文L=2048),训练阶段原本长度为N的序列对应的位置序列是[0,1,⋯,N−2,N−1],现在改为从{0,1,⋯,L−2,L−1}中随机不重复地选N个并从小到大排列,作为当前序列的位置序列。
预测阶段,也可以同样的方式随机采样位置序列,也可以直接在区间中均匀取点(个人的实验效果显示均匀取点的效果一般好些),这就解决了预测阶段的位置编码没有被训练过的问题。不难理解,这是一个很朴素的训练技巧(下面称之为“随机位置训练”),目标是希望Transformer能对位置的选择更加鲁棒一些,但后面我们将看到,它能取得长度外推效果的明显提升。笔者也在MLM任务上做了实验,结果显示在MLM上也是有效果的,并且配合“logn缩放注意力”提升幅度更明显(原论文没有“logn缩放注意力”这一步)。
1.5 长度外推性的新基准
Google去年在论文《Neural Networks and the Chomsky Hierarchy》专门提出的一个长度外泛化基准(下面简称该测试基准为“CHE基准”,即“Chomsky Hierarchy Evaluation Benchmark”),这给我们提供了理解长度外推的一个新视角。
这个基准包含多个任务,分为R(Regular)、DCF(Deterministic Context-Free)、CS(Context-Sensitive)三个级别,每个级别的难度依次递增,每个任务的简介如下:
- Even Pairs,难度R,给定二元序列ÿ