
你给一个大语言模型看这样一段代码:
K = apple
B = K
D = B
print(D)
它几乎每次都能答对,答案是apple。这没什么稀奇的,变量追踪本来就是编程语言最基础的能力。
但如果你把这段代码拉长一点呢?加到八行,十六行,二十四行?
研究团队测试了十三个主流的预训练大模型,从Qwen到Llama,从OLMo到Gemma,甚至还测了一个292B参数的超大模型-V4-Flash。结果让人意外:这些模型能可靠追踪的链条长度中位数只有2.2行。换句话说,超过两三行的变量传递,模型大概率就会答错。
这事儿的反直觉之处在于,我们一直以为更大的模型、更多的层数意味着更强的推理能力。可现实是,哪怕把层数从32层翻倍到64层,追踪能力也只从2.6行涨到2.6行,几乎原地踏步。-V4-Flash这种292B的庞然大物,在六行链条上的准确率是42%,八行是38%,已经逼近纯猜测的33%了。
更让人困惑的是,那些专门设计用来"循环思考"的模型也没能幸免。Ouro-1.4B号称能循环四次相当于加深四倍,结果链条追踪长度分别是0、1.6、2.3、2.2、2.2行,增长几乎停滞。这就好比你雇了一个员工,告诉他可以把同一份报告反复检查四遍,结果他检查完第二遍之后就开始摸鱼了,后面两遍基本没起作用。
这篇论文要讲的故事,就是研究团队发现了这个"摸鱼"的具体位置,然后用一个极其微小的改动,让模型重新认真干活。
模型为什么会在中途停下来
要理解问题出在哪,得先搞清楚模型处理这种变量链条时,内部到底发生了什么。
研究者用了一种叫因果追踪的技术手段。
因果追踪:通过替换模型某一层某个位置的内部状态,观察这个替换如何影响最终答案,从而定位某个计算发生在网络的哪个部分。
他们发现Qwen3-8B处理这类任务时,存在一个清晰的三段式流程。第一段,每个变量的真实值会老老实实待在它被定义的那个位置,几乎不动,一直到第32层(总共36层)附近才被"查询"环节接管。第二段,也就是所谓的指针解析,离查询最近的那个变量最先被读取,然后一步步往前倒推。第三段,最后几层把解析出来的值复制到输出。
问题就出在第二段。研究者用一个线性探针去测试,模型内部的表示到底能"记住"一条链上多少行的归属信息。
线性探针:训练一个简单的线性分类器,从模型某一层的内部状态里预测某个变量属于哪条链,用来衡量这个信息是否被显式编码出来了。
结果是,无论什么模型,这个叫做relay的信息传递过程,最多只能稳定延续到第三到第五行,然后就断掉了。
relay:论文里指代码行与行之间传递"自己属于哪条链"这个身份信息的接力过程。每一行从前面的行那里收集信息,再往后传。
这就像一场接力赛,前三棒跑得挺好,交接棒也顺畅,可第四棒的人突然走神了,接力棒掉在地上。后面的查询环节看到这个烂摊子,只能自己硬着头皮去前面摸索一两步,凑合给个答案。如果链条短,查询环节自己摸索的这一两步刚好够用;链条一长,查询环节也救不了场。
如果没有这个relay机制的存在,模型根本不可能连续答对哪怕两三行,因为变量名之间没有任何结构化的传递通道。但它只工作了两三轮就停摆,这才是真正的瓶颈所在。
一个65537个参数的开关
研究团队的解决方案简单到有点不可思议:在模型的某一层插入一个rank-8的LoRA模块,其他所有参数原封不动地冻结。
LoRA:全称Low-Rank ,一种参数高效微调技术。它不去改动模型里动辄几十亿的原始权重,而是额外插入一个低秩的小矩阵,用很少的参数去调整模型的行为。rank-8指的是这个附加矩阵的秩是8,维度很低。
具体到Qwen3-8B这个80亿参数的模型上,插入的LoRA只有65537个参数,占比不到0.01%。训练完之后,24行长度的链条追踪准确率从15.5%直接跳到99%。
这个数字值得咂摸一下。15.5%意味着什么?三选一的任务里,15.5%比瞎猜的33%还要低,说明模型在长链条上基本是乱答。而99%几乎等同于全对。一个占模型总参数万分之一不到的小补丁,把一个基本失灵的能力,变成了几乎完美的能力。
这就好比一台运转多年的老式收音机,信号总是断断续续,你以为是电路板彻底坏了需要大修,结果老师傅只是换了一个小小的保险丝,整台机器立刻恢复清晰。如果没有找到那根保险丝的位置,你可能会把整个电路板拆了重装,费时费力还未必有效果;但保险丝的位置选错了,换了也没用,机器照样沙沙响。
这个类比里最关键的是"位置选错了也没用"这句话,因为论文后面大段内容都在讲位置的问题。
训练更久一点,这个LoRA还能走得更远。用更长的训练链条喂给它,它能让Qwen3-8B在40行链条上做到98%准确率,48行做到88%,整体的可靠追踪长度(reach)推到了50行。
reach:论文定义的一个指标,指模型能以80%以上准确率追踪的最长链条长度,通过在相邻测试长度之间线性插值得到。如果测试到的最长长度都能通过,就标记为"下限",表示真实能力可能更强。
循环模型里,同样的小技巧效果更惊人。Ouro-1.4B是一个会把同一组24层循环运行四次的模型,加上这个LoRA之后,循环四次能追踪60行,循环八次直接给出"至少160行"的下限结果,因为测试到的最长长度它全部答对了。
从频率上看一下这个变化的幅度:原本循环八次几乎白转,现在循环八次能处理的链条长度是原来的大约70倍。
放错位置,等于白做
这里有个地方特别值得展开讲,因为它颠覆了"微调随便放哪层都差不多"的直觉。
研究者系统地测试了把这个LoRA放在模型不同层的效果,发现存在一个极其陡峭的分界线。
以Qwen3-8B为例,LoRA放在第20层,reach是20.5行;放到第21层,reach直接跌到5.2行。只挪动了一层,效果就断崖式下跌。OLMo-3-7B在12到15层之间,Llama-3.1-8B在13到15层之间,都出现了类似的急剧转折。
为什么会这样?研究者给出的解释是,relay这个接力过程本身只在模型中间的一小段层范围内推进,出了这个范围,后面的层已经不再执行这种"收集并传递链条身份"的操作了。LoRA的作用是启动这场接力,如果LoRA被放在relay已经结束的位置,它就算拼命干活,后面也没有合适的"接力队友"能继续往下传。
这就好比你想给一条正在运转的传送带上多装一个分拣工位,如果装在传送带还在移动货物的那一段,这个工位就能正常把货物分拣下去;可如果装在传送带已经停止、货物已经卸完的那一段,任你这个工位多卖力分拣,面前根本没有货物可分,一切都是空转。如果不认真测量传送带到底在哪个区间还在运转,随手找个地方装工位,很可能就白忙活一场,还误以为"分拣工位这个思路不管用"。
有意思的是,研究者还尝试用纯粹冻结模型本身的信息,去预测这个分界线大概在哪里。他们定义了一个叫 layer的指标。
layer:通过观察冻结模型里,一个指针(即变量右侧引用的另一个变量)的信息从源头消失、被后续层"接管"的那个临界层来确定。
这是一种"体检报告"式的预判方法,不需要真的训练LoRA去逐层试错,只靠分析模型本身的行为模式就能给出一个大致的坐标。研究者提前登记了这个预测规则,然后在四个此前完全没看过的模型上做盲测。结果三个模型的预测落在了实际分界线附近,只有OLMo-3-32B偏差了五层。
这个预判方法不是万能钥匙,它给出的更像是一个"大概在这附近找"的提示,真正精确的分界线还得靠局部扫描来确认。但这已经比瞎猜强太多了,相当于医生看了片子大致判断骨折在哪一节脊椎,虽然具体到哪一毫米还要靠手术中探查,但至少不用把整条脊椎都切开看一遍。
拆开relay的内部结构:谁在给谁递话
光知道relay存在还不够,研究团队进一步拆解了这场接力赛的内部机制,想搞清楚具体是谁在传递什么信息。
他们测量了一种叫注意力距离的东西:每一行的指针,会往前看多少行去寻找同链的信息。
注意力:架构里,每个位置通过注意力机制决定该重点"看"输入序列中的哪些其他位置,从而获取相关信息。注意力距离指这种关注范围能延伸到多远。
没有LoRA的时候,注意力基本只盯着紧邻的父行,也就是定义当前变量的那一行,再往前几乎看不到。加上LoRA之后,Qwen3-8B的注意力距离在16到18层之间能看两行之前,19到22层能看到三行、四行、六行、七行之前,距离在逐层扩大。
更关键的发现是,这些"能看得更远"的注意力头,并不是LoRA新造出来的,而是模型本身就存在、但平时只会看父行的那些头,被重新激活去看得更远了。研究者专门做了消融实验验证这一点:在Ouro模型里,把这几个被重新激活的"长距离头"强行关掉,reach从24行左右跌到12行;而随机关掉同样数量的其他头,reach基本不受影响。
这说明LoRA不是在凭空创造新能力,它更像是一个调度员,把模型里本来就存在但没被充分使用的资源重新调动起来。这就好比一家工厂里,有几台高性能机床平时只被安排干最简单的粗加工活,明明有精密加工的能力却从没被用上。来了个新主管,把工作流程稍微一调整,这几台机床立刻被分配去做精密加工,产能瞬间翻了好几倍。如果这几台机床压根就是淘汰设备没有精密加工能力,再怎么调度也没用,这正好说明了问题不在硬件而在调度。
研究者还验证了父行这个环节到底有多关键。他们强行切断每一行对自己父行的注意力,结果Ouro的relay直接停摆,长链条追踪能力归零。而切断对两行以上更早位置的注意力,影响相对温和,reach从17.8降到9.4,打了个折扣但没彻底崩溃。
这个对比挺说明问题的。父行就像是信息传递链条上不可或缺的第一环,断了就全盘皆输;而更远距离的注意力更像是加速器,少了它relay还能往前挪,只是挪得慢一点。
除了LoRA,别的方法也能撬动同一个开关
研究者还做了一个挺有意思的对照实验:换掉LoRA这种具体的修改手段,换成别的轻量干预方式,看看是不是只要放对位置,效果都差不多。
他们试了投影LoRA(直接调整注意力和前馈网络里的权重投影),还试了一种叫FLAS的流式激活引导方法。
FLAS:一种通过学习到的"流"来移动隐藏状态的并行干预方法,不同于LoRA的矩阵加法形式,它用类似微分方程的积分步骤去调整表示。
结果这几种方法,只要放在同一个早期层(比如第14层),效果都差不多好,24行链条准确率都在90%以上;但一旦放到第26层(relay已经结束的位置),准确率全都跌回50%多,接近瞎猜水平。
这个结果挺有说服力的,它说明关键不在于你用哪种具体的技术手段去修改模型,而在于你修改的是不是那个"relay还能继续往下传"的位置。方法本身是次要的,位置才是决定性的。
这些发现在这个真实的多跳问答数据集上也得到了印证。
:一个要求模型组合多个单跳问题才能回答的多跳问答基准数据集。
在Qwen3-8B上,把LoRA放在早期层能带来11.4个百分点的精确匹配率提升,放在晚期层只有不到2个百分点,有的模型晚期层干预甚至是负收益。Llama-3.1-8B的早期层提升达到17.9个百分点,这个数字相当可观,意味着在实际问答场景里,原本每答对一半问题,现在能多答对将近五分之一。
写在后面
读完这篇论文,我反复琢磨的一个点是:模型"看起来不会"和模型"真的不会"之间,原来隔着这么大一道鸿沟。
一个模型在24行变量链条上只有15.5%的准确率,如果你只看这个数字,会很自然地下结论说这个模型缺乏长程推理能力,甚至会怀疑是不是架构本身有缺陷需要重新设计。但事实是,这种能力一直都在,只是被埋在某个具体的层里没被激活。65537个参数,不到模型总参数的万分之一,就能把这个能力完全释放出来。
这让我想起一件事,很多时候我们评价一个系统"不行",其实只是看到了它默认配置下的表现,而默认配置往往是为了通用性做了妥协,未必是能力的真实上限。这个教训大概不只适用于大语言模型。
论文里还有一个细节我觉得值得单独拎出来说。研究者发现,如果只在循环模型的第一次循环里加LoRA,后面几次循环完全不改动,居然也能让模型的追踪能力延伸到25行左右。这说明被激活的relay能力,一旦启动,后续的原始权重自己就能接着往下传。这就像给一个一直没转起来的齿轮组只轻轻推了一下第一个齿轮,后面那些本来就咬合良好的齿轮,立刻自己转动起来了。这个发现比"每层都要改"更有想象空间,因为它意味着改动的成本可以压得更低。
还有一个没完全解决的问题,论文自己也承认:这套机制目前验证的任务还是相对人工构造的变量链条和虚构事实问答,真实世界里更复杂、更模糊的推理链条,这个小LoRA的开关是不是也能找到,还是个未知数。如果答案是肯定的,那这可能是一种成本极低但效果巨大的模型能力挖掘方式;如果答案是否定的,那说明人工合成任务里发现的这种relay机制,可能只是冰山一角,真实世界的语言理解需要更复杂的接力方式。
这篇论文留给我最大的疑问是:模型里还藏着多少这样的"保险丝",我们因为从没对症下药,一直以为它们根本不存在?
Q&A
Q1:为什么大语言模型追踪变量链条的能力这么弱?
A:研究发现模型内部存在一种叫relay的信息接力机制,负责把"这一行属于哪条链"的身份信息逐行传递下去,但这个接力过程默认只能稳定进行两三行就会中断,后面的查询环节只能自己摸索一两步,链条一长就答错了。
Q2:论文里说的rank-8 LoRA具体是怎么起作用的?
A:它是一个插入在模型某一层、只有几万个参数的低秩附加模块,其余所有权重保持冻结。它不会创造新能力,而是重新激活了模型本身就有但平时很少用到的长距离注意力头,让relay接力机制能继续往下传递,从而大幅提升长链条的追踪准确率。
Q3:这个LoRA放在模型的任何一层都有效吗?
A:不是的。研究发现存在一个非常陡峭的分界线,只差一层效果就可能从20行的reach跌到5行左右。关键在于LoRA必须放在relay机制还在活跃推进的那段中间层里,一旦放到这个区间之后,后面已经没有合适的层继续传递信息,效果会大幅下降。
DeepSeek 又一开源重器!深挖 DeepInfer 究
DeepSeek开源了DeepInfer推理引擎,包含MoE...(85 )人阅读时间:2026-10-30
Transformer停止思考得太早,一个微小的LoRA就能
大语言模型在追踪变量传递时表现不佳,即使参数量巨大或层数增多...(174 )人阅读时间:2026-10-30
蚂蚁灵光2.0打通钉钉、支付宝等数十项服务,加速走向“能管事
AI助手灵光2.0拓展跨平台连接能力,接入钉钉CLI等外部工...(152 )人阅读时间:2026-10-30
榆林市横山区直播电商协会联合横山职教中心师生赴武功县开展电商
榆林市横山区直播电商协会联合职业技术教育中心师生赴武功县开展...(119 )人阅读时间:2026-10-30