当注意力机制悄悄失明:ALiBi位置编码里藏了三年的数字陷阱
创始人
2026-08-20 22:38:52
0

  炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!

(来源:科技行者)

2022年,一篇叫ALiBi的论文横空出世,它承诺了一件几乎所有位置编码方法都做不到的事情:用几乎为零的计算代价,让模型在训练时只见过2048个token,推理时却能处理更长的文本。

这个承诺听起来太美好了。事实上,不少开源大模型都用上了它,BLOOM、Falcon、MPT,这些你可能听过名字的模型,底层的位置编码全部依赖ALiBi。

但2026年的这篇论文告诉你一件事:这个承诺从一开始就没有兑现过,而且没人发现,已经悄悄失效了三年多。

问题出在一个所有人都以为无关紧要的地方,浮点数精度。

先说清楚,ALiBi到底解决了什么问题

要理解这个失误有多致命,你得先明白Transformer模型天生的一个缺陷。

**自注意力机制*:Transformer模型处理文字时,会让每个词都去"看"句子里所有其他的词,计算彼此之间的关联程度,这个机制就叫自注意力。

问题是,自注意力这套机制天生不知道词语的先后顺序。你把一句话的词打乱了扔给它,它算出来的关联程度是一模一样的。这显然不对,"猫追狗"和"狗追猫"含义完全相反,模型必须知道谁在前谁在后。

于是就有了各种位置编码方法,想办法把"位置"这个信息塞进模型里。最早Transformer论文用的是正弦曲线编码,后来又有学习式的绝对位置编码,但这些方法都有个共同的软肋,超出训练时见过的最长长度后,模型就懵了,没法处理更长的文本。

ALiBi的思路简单粗暴:不去修改词向量本身,而是直接给注意力算出来的分数加一个惩罚项。两个词离得越远,惩罚越重,模型自然而然就学会"越远的词越不重要"这条规律。因为这个惩罚是线性增长的,而且不依赖任何需要训练的参数,理论上无论文本多长,这套规则都能延续下去。

这就是ALiBi论文标题里那句"Train Short, Test Long"的由来,短文本训练,长文本也能用。这个想法在2022年确实让人眼前一亮,后来KERPLE、FIRE、Sandwich这些论文都是沿着"给注意力加偏置项"这条路继续往前走的变体。

不过话说回来,论文作者自己后来也承认,在更大规模的对比实验里,另一个叫RoPE的位置编码方法表现更好,这也是为什么现在主流大模型基本都用RoPE而不是ALiBi了。

**RoPE*:全称Rotary Position Embedding,旋转位置编码,通过旋转词向量本身来编码位置信息,是目前大语言模型里最常用的位置编码方案。

但这篇论文的作者们没有就此放弃研究ALiBi。他们想问一个更根本的问题:ALiBi真的做到了它承诺的事情吗?

核心问题:线性增长的惩罚,撞上了浮点数的天花板

答案是,没有。而且原因出人意料,不是算法设计的问题,是数字本身的物理极限。

计算机里存储小数,用的是浮点数格式,常见的有32位单精度(fp32)和16位半精度(bf16)。这些格式能表示的数字范围是有限的,当一个数字小到超出这个范围,计算机没办法把它精确表示出来,只能把它当成0处理,这个现象叫做下溢。

**下溢(underflow)*:当计算结果的绝对值太小,小到浮点数格式无法表示时,计算机会把这个数字直接归零,这个现象叫下溢。

现在回头看ALiBi的设计,惩罚项是线性增长的,词语离得越远,惩罚越大。这个惩罚会通过一个叫softmax的函数,变成一个自然指数的负指数,而指数函数有个特点,自变量越负,函数值越接近于零。

**softmax函数*:一种把一组数字转换成概率分布的函数,常用在神经网络输出层,让所有数值加起来等于1。

问题来了。当两个词的距离足够远,线性增长的惩罚项累积到一定程度,推进softmax内部那个指数运算的指数变得极端负,直接跌破了浮点数能表示的下限,直接变成了精确的0。

这意味着什么?意味着模型压根不是"逐渐忘记"远处的词,而是像被一刀切断了信号一样,完全看不到了。

论文用一个精确的数学式子刻画了这个现象,把每个注意力头(attention head)开始失明的距离称为blindness distance,并且证明了对不同的头,这个距离是不一样的。

**注意力头(attention head)*:Transformer模型里,注意力机制会被拆分成多个并行的小模块同时计算,每个模块叫一个注意力头,不同的头可以关注不同的模式。

ALiBi的设计里,每个头会被分配一个不同的斜率(slope),斜率越陡,惩罚增长得越快,这个头失明得也就越早。论文测算了默认参数下,标准的16头模型里,斜率最陡的头,在词语距离只有124个token的时候就已经开始失明了,而这时候模型的训练上下文窗口还有2048个token那么长。

这就好比什么呢?

想象你雇了一个保安团队来监控一整条街,每个保安负责的视野范围本来说好是"越远越模糊,但至少能看见个轮廓"。结果实际情况是,有的保安走出去124步,眼前的画面就直接变成一片纯黑,不是模糊,是彻底黑屏,后面发生什么他一无所知。如果你不知道这件事,你会以为整条街都在监控之下,实际上早就有大段大段的盲区,而且是完全的盲区,不是弱信号,是零信号。这就是为什么ALiBi承诺的"长距离外推能力",实际执行时大打折扣,因为很多头根本没走多远就瞎了。

论文里画了一张图,展示在2048个token的距离上,已经有36.6%的注意力权重跌进了下溢区间,直接变成了0。这不是个例外情况,而是所有用ALiBi训练的模型都必然会遇到的系统性问题。

这不只是理论推导,已发布的模型全部中招

光有数学证明还不够有说服力,研究者们找来三个真实存在、被广泛使用的预训练模型,BLOOM、Falcon-RW、MPT,直接测量它们运行时的注意力矩阵,看看下溢到底发不发生。

结果和理论预测严丝合缝。实际测出来的下溢比例曲线,和纯数学推导出来的曲线形状几乎一模一样。这说明什么?说明这不是一个理论上存在但实际影响很小的边角案例,而是每一个用ALiBi训练出来的模型,都在真实地经历这个失明过程,包括你可能用过的开源模型。

研究者还做了另一层验证,他们测试这些模型在困惑度(perplexity,衡量语言模型预测下一个词准确度的指标,数值越低说明模型越"确定")上的表现,以及在两个专门测试信息检索能力的任务上的表现。

**passkey检索*:在一段很长的文字开头藏一个密码,后面跟一大段无关的填充文字,然后让模型在结尾回忆出密码是什么,用来测试模型能否跨越长距离准确提取信息。

**needle in a haystack(大海捞针)*:passkey检索的升级版,不是简单粘贴密码,而是把密码自然地嵌入一篇真实文档里,同时考验模型能否找到正确位置、以及能否理解上下文语义。

结果很扎心。BLOOM模型在passkey任务的域内准确率(测试距离没超过训练时见过的长度)已经算不错,0.93,但一旦超出训练时的上下文窗口,准确率直接掉到了0.29。needle in a haystack任务更惨,域外表现只有0.06。Falcon-RW和MPT情况稍好一些,但也都呈现出同样的规律,一旦超出训练长度,表现断崖式下跌。

这时候一个更棘手的问题冒出来了:困惑度飙升,到底是因为模型本身就没见过这么长的文本导致的正常退化,还是因为注意力失明造成的额外损伤?这两个因素混在一起,单看预训练模型是分不清楚的。研究者自己也承认了这一点,"我们无法推断这些飙升到底是因为超出了训练上下文,还是注意力失明,或者两者都有"。

于是,为了把这两个变量拆开,他们决定自己动手训练模型。

亲手训练模型,把"失明"这个变量单独拎出来

这是整篇论文里最扎实的部分。研究团队用SmolLM配方训练了一系列1.48亿参数的Llama架构解码器模型,喂了200亿个来自FineWeb-Edu的token,专门设计了几组不同的斜率配置,人为制造不同程度的"失明提前量"。

具体来说,他们设计了三种极端配置:一种叫Steep(陡峭),故意把斜率调得很大,让失明来得特别早,失明距离压缩到只有128到512个token;一种叫Safe(安全),把失明距离推得很远,2048到4096个token,理论上在训练长度内几乎不会失明;还有一种叫Wide(宽泛),让不同头的失明距离均匀分布在16到4096这个区间里,呈2的幂次分布。

同时他们还训练了标准ALiBi版本和RoPE版本作为对照。

这个实验设计有个巧妙之处,他们固定了训练数据的顺序,只让位置编码方式和模型初始化这两个变量发生变化。这就好比科学实验里的对照组设计,如果你想知道某种肥料到底有没有用,你得保证阳光、水分、土壤这些其他条件完全一样,只有肥料这一个变量不同,这样测出来的差异才能真正归因到肥料本身,而不是别的干扰因素。如果不这样控制变量,你测出来的结果谁也说不清是肥料的功劳还是阳光多晒了半小时的结果。

结果出来后,有几个地方相当耐人寻味。

Steep这个故意让模型早早失明的配置,表现确实是所有配置里最差的,但研究者原本预期它会"完全失败",实际情况却是,它并没有崩溃,只是各项指标都偏低一些。这说明模型有一定的自我调节能力,即使某些头很早就瞎了,信息似乎还是能通过某种方式在层与层之间传递下去。

Safe配置,也就是几乎不会失明的那组,在passkey检索任务上表现最好,域内比标准ALiBi高5个百分点,域外更是高出9个百分点。但转到needle in a haystack任务,Safe的表现反而不如标准ALiBi,域内0.48对0.68,域外0.02对0.20,差距相当明显。

这个现象值得琢磨。为什么"更不容易失明"反而在某个任务上表现更差?研究者给出的解释是,那些斜率很平缓、失明距离很远的注意力头,其实承担着一种类似"检索头"的功能,即使还没走到失明的距离,它们微弱但存在的位置信号,在中短距离范围内反而是有用的信息,一旦人为削减了斜率的陡峭程度,相当于砍掉了那些负责近距离精细定位的"本地头",模型整体的敏锐度反而下降了。

这里有个细节挺有意思的,RoPE作为对照组,拿到了最低的验证损失(说明语言建模能力最强),在语言类任务上表现也最好,但一到域外检索任务,直接归零,完全检索不到任何跨越训练长度的信息。这从另一个角度印证了论文的核心发现,不管用ALiBi还是RoPE,超长文本检索这件事,现有的位置编码方案都不算真正解决。

四种补救方案,谁能真正堵住这个漏洞

发现问题之后,研究者提出了四种训练阶段的补救策略,并且做了详尽的组合实验。

第一种叫截断(Clamping)。

思路很直接,给惩罚值设一个下限,一旦惩罚要往更负的方向增长,就死死摁在这个下限上,不让它继续下降。这样一来,再远的词语,惩罚值也不会无限增长下去,自然也就不会撞上下溢那道墙。代价是,超过这个距离之后,模型没法再区分"远一点"和"更远一点"的差异,所有超远距离的词在模型眼里变得一样远。

这就好比给一台老式收音机装了个音量下限,当信号弱到快要完全消失时,你把它锁定在一个能听清楚的最低音量,虽然听起来还是很远,但至少你还能听见个大概,而不是彻底静音。

第二种叫鲁棒斜率(Robust Slopes)。

既然线性增长迟早会撞墙,那就干脆重新设计每个头的斜率,让不同头的失明距离均匀铺满整个上下文窗口,而不是像原来那样很多头挤在同一个短距离段集体失明。

第三种是这篇论文重点推荐的,对数尺度距离(Log-scaled Distances)。

原始ALiBi用的是线性距离,词语隔了1000个token和隔了2000个token,惩罚差异是双倍关系。改用对数之后,距离先经过一次对数压缩再计算惩罚,远距离的增长速度被大幅拉平。论文给出一个具体数字,在默认斜率下,原本第一个头在124个token处就开始失明,换成对数距离后,这个失明距离被推到了4.37乘以10的53次方,这个数字大到实际上不可能触及,相当于把失明这件事从"必然发生"变成了"几乎不可能发生"。

**对数尺度*:把原本随距离线性增长的数值,改成随距离的对数增长,数学效果是让远距离的数值增长速度大幅放缓,近距离几乎不受影响。

第四种叫软截断(Soft Capping)。

前面几种方法都是在动"距离惩罚"这一端,软截断换了个角度,直接限制原始的注意力分数本身,用一个tanh函数把分数强行压缩到一个固定区间里,不让任何异常大的数值突破边界。

这四种方法可以单独用,也可以组合起来用。论文做了详尽的排列组合测试,发现一个挺重要的结论:没有一种方法能在所有任务上都全面碾压默认ALiBi。

具体来看,对数距离方法在passkey检索的域外表现上效果最突出,把AUC(曲线下面积,用来综合衡量一个方法在不同距离下的整体表现)从ALiBi基线的0.08一路提升到了0.77,如果再叠加上截断策略,能进一步冲到0.79,相当于快十倍的提升。但同样是这套组合,在needle in a haystack任务上表现却不如人意,域外准确率只有0.03,反而不如什么都不改的默认ALiBi(0.20)。

这个反差挺说明问题的。passkey任务只需要精确记住一个孤立的密码短语,对上下文语义理解的要求不高,更像是纯粹的位置记忆考验。needle in a haystack任务除了记住位置,还得在一大段真实语义连贯的文字里辨认出正确的信息片段,对语义理解的要求更高。这提示我们,同一个补救策略,在不同类型的任务上可能收益完全相反,没有一招鲜吃遍天的万能药。

数字下溢,可能不只是推理时的浪费,训练时代价更大

这篇论文提出了一个很有前瞻性的猜想,虽然作者自己也说这需要未来研究去验证。

在前向传播的过程中,一个精确归零的注意力权重,和一个非常接近零但没有归零的权重,对模型输出的影响其实差不多,都小到可以忽略。但反向传播的时候,情况完全不同,只有那个没有归零的微小权重,还能继续携带一点点梯度信息回传,精确归零的那个权重,梯度也跟着变成了0,彻底断了。

**反向传播(backward pass)*:神经网络训练时,根据预测结果和真实答案的误差,反向计算每一层参数应该如何调整的过程,这是模型"学习"的核心机制。

**梯度*:反向传播过程中计算出来的一个数值,指示某个参数应该往哪个方向调整、调整多少,梯度为0意味着这个参数在这一步完全学不到东西。

这意味着,那些斜率很陡、很早就失明的注意力头,可能从训练的第一天开始,就永远没有机会学会如何利用远距离的信息,不是它暂时学不好,而是从数学上讲,它压根拿不到任何能推动它学习的信号。

这就好比一个刚入职的新员工,如果他负责的那部分工作,汇报渠道从一开始就被切断了,不管他多努力,反馈永远传不到他手上,他不是学得慢,而是根本没有学习的机会。如果不解决这个反馈渠道被切断的问题,再怎么延长训练时间,这个员工在这项工作上也不会有任何进步。

这个猜想目前还没有被完全验证,论文作者自己也把它作为未来的研究方向留下了,但这个思路提醒我们,数字下溢造成的损失,可能不仅仅是推理阶段白白浪费了计算资源(算了半天最后还是被丢弃),更可能从训练一开始,就在悄悄限制模型能学到的能力上限。

写在实践层面的建议

论文最后给出了几条相对具体的实践建议。

截断策略应该成为默认选择,如果你确实希望模型呈现出一种"软化的滑动窗口"效果,也就是让远处的信息影响力逐渐减弱到某个固定的最低水平而不是彻底消失。否则的话,不如干脆用一个硬性的滑动窗口,这样至少可以在计算层面做优化,直接跳过那些注定要被丢弃的远距离计算,不用做无用功。

**滑动窗口(sliding window)*:一种限制注意力范围的机制,只允许每个词关注离它较近的一段范围内的其他词,超出这个范围直接不计算。

软截断这个策略,论文并不推荐直接照搬使用,但限制注意力分数的整体范围这个思路本身值得肯定,因为这既能防止下溢,又能避免某些异常大的数值把整个注意力分布搞乱。

对数距离在passkey检索和多数下游任务上表现出色,是论文里表现最稳定、收益最广泛的单一策略,但研究者也提醒,这个方法在needle in a haystack任务上帮不上什么忙,而且学习速度似乎比标准ALiBi慢一些,如果训练时间足够长,这个差距可能会缩小。

至于直接调整每个头的斜率参数(也就是鲁棒斜率策略),表现介于"部分成功"和"有待进一步研究"之间,它确实带来了训练和验证损失之间最小的差距(说明泛化能力不错),也在多个组合策略里贡献了正面效果,但同时也拖累了needle in a haystack的表现,这一点还需要更多实验才能说清楚。

值得一提的是,论文也观察到MPT模型的实现里,其实已经对ALiBi的偏置值做了截断处理,把最平缓的那个头的失明距离锁定在2000左右。但研究者推测,这个设计当初很可能不是为了应对浮点数下溢问题而做的,更像是出于别的考虑(比如刻意想实现一种软性滑动窗口的效果),算是歪打正着地缓解了一部分问题,但这只是巧合,不是有意识的修复。

Q&A

Q1:ALiBi位置编码到底出了什么问题?

A:ALiBi用线性增长的惩罚项来编码词语之间的距离,但当距离足够远,惩罚值会让softmax内部的指数运算跌破浮点数能表示的下限,直接归零,导致部分注意力头对远距离词语完全"失明",而不是逐渐减弱关注度。

Q2:这个问题会影响哪些已经发布的模型?

A:论文测试了BLOOM、Falcon-RW、MPT三个知名开源模型,发现它们实际运行时测出的注意力下溢比例,和理论推导的曲线几乎完全吻合,说明所有用ALiBi训练的模型都存在这个问题,不是个别案例。

Q3:有没有办法修复这个问题?

A:论文提出了截断、鲁棒斜率、对数尺度距离、软截断四种训练阶段的补救策略,其中对数尺度距离在passkey检索任务上效果最突出,能把域外检索准确率提升近十倍,但没有一种策略能在所有任务上都全面超越默认ALiBi,需要根据具体应用场景权衡选择。

相关内容

热门资讯

长征五号B遥一运载火箭顺利通过... 2020年1月19日,长征五号B遥一运载火箭顺利通过了航天科技集团有限公司在北京组织的出厂评审。目前...
9所本科高校获教育部批准 6所... 1月19日,教育部官方网站发布了关于批准设置本科高等学校的函件,9所由省级人民政府申报设置的本科高等...
9所本科高校获教育部批准 6所... 1月19日,教育部官方网站发布了关于批准设置本科高等学校的函件,9所由省级人民政府申报设置的本科高等...
湖北省黄冈市人大常委会原党组成... 据湖北省纪委监委消息:经湖北省纪委监委审查调查,黄冈市人大常委会原党组成员、副主任吴美景丧失理想信念...
《大江大河2》剧组暂停拍摄工作... 搜狐娱乐讯 今天下午,《大江大河2》剧组发布公告,称当前防控疫情是重中之重的任务,为了避免剧组工作人...