![]()
你有没有想过一件事:当你问 ChatGPT 一个问题,它翻出前面几千字的对话记录,真的是把每一个字都仔细看了一遍吗?
直觉上你可能会说,当然了,不然它怎么知道你之前说过什么。但这篇论文给出的答案有点意外:模型很可能只盯着其中一小撮词在看,剩下的大部分,它压根没怎么理会。
这就引出了一个挺基础但一直没人正面回答的问题:语言模型在生成每一个词的时候,到底用了上下文里多少信息?是全都用上了,还是只挑了几个关键词?如果是后者,这个数字会随着文本变长而怎么变化?
卢森堡大学和伦敦数学科学研究所的三位研究者,用了一套相当巧妙的实验设计,试图把这个模糊的问题变成可以测量的数字。
### 自注意力机制在看什么
要理解这篇论文在做什么,得先说说自注意力是怎么工作的。
自注意力:Transformer模型的核心机制,它让模型在处理每个词的时候,去"看"句子里所有其他词,并给每个词打一个分数,分数高的词被认为更相关,模型会更多地参考它的信息。
打个比方,你在开会的时候,耳朵里飘进来十几个人的说话声,但你的注意力其实只分给了正在发言的那个人,还有刚才提到你名字的那句话。自注意力机制本质上在做同样的事:给每个上下文位置打分,分数就是它常说的"注意力权重"。
论文的出发点是这样的:既然注意力权重有高有低,那是不是说明只有权重最高的那几个词才是真正"有用"的?剩下权重很低的词,删掉是不是也无所谓?
研究者把这个"有用"的概念专门定义了一下,他们管它叫"有用令牌假设"。
有用令牌假设:假设对于每一次具体的预测,上下文里存在一个未知大小的"有用集合",这个集合里的词才是真正帮助模型做出正确预测的词,其余词即便注意力权重不为零,也只是噪音。这个集合的大小会随着句子、层数、注意力头、以及当前预测位置的不同而变化,论文里统称为K(C)。
问题是,这个"有用集合"是看不见的,没人知道它具体是哪几个词、有多大。论文的办法是不直接找它,而是用一个可以操作的替代方案:按注意力权重排序,只保留排名最靠前的N个词,把其他词的权重强行清零,权重保留的部分不做任何修改,然后看模型的预测效果掉了多少。
这里要讲清楚一个关键区别。研究者测试的不是"删掉第几个词句子会不会读不懂",而是在模型的内部计算里,直接操作每一层、每一个注意力头的打分结果,把排名靠后的词的贡献设为零。这整个过程不需要重新训练模型,是在已经训练好的模型上做的"手术"。
### 保留多少词才不掉链子
实验测了九个主流的开源模型,包括 Qwen、Gemma、Llama、Mistral 的多个版本。研究者给每个模型喂上一段 1024 个词左右的文本,然后在每一层、每一个注意力头上做刚才说的截断操作,只保留 N 个权重最高的词,N 从 1 一路试到 512,看模型预测下一个词的准确程度掉了多少。
衡量预测准确度用的是负对数似然:
负对数似然(NLL):衡量语言模型预测准确度的指标,数值越低说明模型对正确答案的预测越自信,数值升高就代表模型"变笨了",预测更不准了。
结果挺有意思。如果你按注意力权重来挑词,保留几十个到一两百个词,大多数模型的 NLL 几乎不怎么涨。但如果你用随机挑选等量的词来做对照组,损失会蹿得老高,有的模型甚至涨了上百倍。这说明注意力权重确实不是瞎打的,它真的在用某种方式把有用的信息排到前面。
但模型之间的差异大得吓人。要把损失控制在 5% 以内,Mistral-7B 只需要留 14 个词,Llama-3-8B 需要 16 个,而 Gemma-7B 居然需要 226 个,是 Mistral 的十几倍。研究者专门拿同系列的 Gemma-2-9B 做对比,发现它只需要 12 个词就够了,比 Gemma-7B 少了将近 19 倍。这说明模型大小、模型家族都不能解释这个差异,具体是训练方式还是架构细节导致的,论文没有深挖。
这里有个容易被忽略的点:论文测的是"全模型统一用一个 N"的效果,也就是说,不管哪一层哪个头,都被要求只能保留最多 N 个词,但具体保留哪几个词,是每个位置自己决定的。这就好比公司规定每个部门只能留 10 个人,但具体留谁由各部门自己定。如果某个部门本来就该留 30 个人,被砍到 10 个,这个部门的效率会掉得特别厉害,但整个公司的平均效率可能还凑合。论文后面专门做了分层分析,发现确实有些层对截断特别敏感,比如 Gemma-7B 的第 0 层,保留 128 个词时损失涨了 70.9%,而其他层几乎没受影响。所以这个"统一 N"的估计值,代表的是一个全局约束下的平均结果,不代表每个注意力操作本身需要这么多词。
### 几何分离和预测准确不是一回事
论文还做了一个很有意思的辅助验证,就是看被选中的词在向量空间里是不是真的"扎堆"在一起,和没被选中的词有没有明显的边界。
研究者把每个被选中词乘以它的注意力权重,得到一个加权向量,然后用几何距离的方式衡量:被选中的那堆向量,和没被选中的那堆向量,在空间里是不是分得很开。结果显示,按注意力权重选出来的词确实比随机选的词分得开得多,这个结论在欧氏距离和余弦距离下都成立,欧氏距离下的差异更明显。
但这里论文有一个很诚实的提醒:几何上分得开,不代表预测效果就一定好。论文专门做了相关性分析,发现几何分离程度和损失增加之间确实有正相关,但这个相关性在排除掉选择集合只有 1 个或 2 个词的极端情况后,会明显减弱甚至变号。换句话说,几何分离可以作为一个描述性的观察,但不能当成判断"这几个词是否真的管用"的硬指标。
这就好比你观察一群人在公园里的站位,发现穿红衣服的人确实站得比较靠近喷泉,这是个真实的现象,但你不能据此断定穿红衣服能让人更容易找到喷泉,可能只是因为那天刚好是红衣服爱好者聚会,大家约好了站在那附近。几何分离和功能有效性,是两件需要分别验证的事,不能用一个推出另一个。
### 上下文越长,需要的词也越多
接下来论文做了一个很关键的实验:如果给模型更长的上下文,但预测目标不变,需要保留的词会怎么变化?
具体做法是,固定要预测的最后 128 个词不变,然后把上下文长度从 256 一路拉长到 2048,每次都重新测一遍需要保留多少词才能把损失控制在 5% 以内。
结果是清楚的:上下文越长,需要保留的词越多。比如 Gemma-7B 在 256 长度时需要 76 个词,拉到 2048 时需要 504 个,涨了 6 倍多。但有意思的是,需要保留的词占总上下文的比例,反而是在下降的,从 256 长度时的 30% 左右,降到 2048 长度时的 24% 左右。
这个现象可以用一个生活场景来理解。想象你在图书馆查一个资料,书架上原来只有 10 本书,你可能要翻 3 本才能找到想要的内容,占比 30%。现在书架上堆了 100 本书,你可能要翻 15 本才够,数量上涨了 5 倍,但占比反而降到了 15%。这说明新增的书里,有用的信息密度其实在降低,但绝对数量的需求还是在涨,因为你翻书的时候会碰到更多"看起来像是答案但其实不是"的干扰项,需要多翻几本来排除它们。如果不多翻几本,你很可能会错过真正的答案,因为干扰项把它挤到了后面。
论文还排除了一个容易想到的误解:会不会只是因为模型预测准确度本身提高了,所以相对损失的门槛变紧了,才导致需要更多词?研究者专门测了一下,发现全模型的 NLL 确实随着上下文变长在下降,说明额外的背景文本确实提供了有用信息。但即便把容忍度换成固定的绝对值而不是相对值,需要的词数依然在涨。这说明仅仅是"损失标准变严格了"不能完全解释这个增长。
### 把干扰项加进去,答案被挤到后面了
前面那个实验有个问题:拉长上下文的同时,新加进来的文本本身也可能包含对预测有用的信息,这就很难说清楚需要更多词到底是因为真的有更多有用信息,还是因为单纯竞争变激烈了。
于是研究者设计了一个更干净的实验,用 BABILong 这个专门测试长文本推理能力的数据集。做法是:固定一条标注好的"支持事实"不变,这条事实包含了回答问题所需要的全部信息,然后在它周围塞入越来越多的无关背景文本,从 0K 一路加到 4K。
BABILong:一个专门用来测试大语言模型在长文本中定位关键信息能力的基准数据集,常见做法是把一条关键线索埋在大量无关文字里,然后问模型相关问题,考察它能不能从干扰信息中把真正有用的内容挑出来。
结果相当直观。随着背景文本增多,那条本来没变过的支持事实,在注意力排名里的位置持续往后掉,掉的幅度平均达到 50 倍左右。它分到的注意力权重也在持续下降,降到原来的 43.5% 左右。更关键的是,在排名前 64 的词里,这条支持事实被包含进去的概率(也就是召回率)从比较高的水平,一路跌了 63.8 个百分点。
这就像你在教室里举手回答问题,本来教室里只有 10 个同学,你举手老师一眼就看到了。现在教室里塞进来 400 个同学,大家都在动来动去,你举的手虽然还在那儿,没有任何变化,但老师的视线被淹没在人群里,很难第一时间注意到你。你没做错任何事,纯粹是竞争者太多了。
论文在这里还发现一个挺反直觉的细节:虽然支持事实整体被挤到了后面,但如果你单独去看"任意一个干扰词超过支持词的概率",这个概率其实是在下降的,也就是说单个干扰词变得没那么容易压过支持词了。可是因为干扰词的数量涨得太猛,总体上排到支持词前面的干扰词数量反而更多了。这意味着整体排序质量没有变差,但因为对手数量太多,还是会有更多干扰词混进前排。
研究者专门给出了一个数学模型来解释这个现象,叫"竞争下的有用集合恢复"。简单说,如果有 K 个必须要找到的词,背景里有 D 个干扰词,每个干扰词超过目标词的概率是 p,那你平均需要保留 K + Dp 个词才能把所有目标词都找全。即便 K 和 p 都固定不变,只要 D 跟着背景文本一起涨,需要保留的总数就会跟着涨。这解释了为什么"有用信息量没变"也能导致"需要的词数量在涨"。
有意思的是,不同模型对这种竞争的反应并不一致。衡量预测损失是否在 0.10 nat 容忍度内所需要的词数,Qwen 从 0K 到 4K 只翻了一倍,Gemma 却涨了接近 12 倍。这说明支持事实被挤到后面这件事,并不会在每个模型上都同等程度地转化为更大的功能性需求,最终效果还要看模型怎么权衡和组合保留下来的信息。
### 重新归一化权重,需求量能降下来
论文还做了一个控制实验,专门检验一个此前没人仔细想过的变量:删掉词之后,剩下的注意力权重要不要重新归一化?
归一化:这里指的是把被保留下来的注意力权重重新调整,让它们加起来等于 1。因为删掉了一部分权重,剩下权重的总和会小于原来的 1,如果不做任何处理,相当于整体信号强度被削弱了。
论文设计了两种干预方式做对比。第一种是直接删除,保留的权重保持原样不变,其余清零,这样清零之后权重总和肯定小于 1。第二种是重新归一化,保留的权重按比例放大,让它们的和重新等于 1。
结果显示,重新归一化能大幅减少需要保留的词数,有些情况下效果非常显著。比如 Gemma-7B 在 5% 容忍度下,直接删除需要保留 226 个词,重新归一化之后只需要 7 个。但这个效果因模型和容忍度而异,并不是所有情况都这么夸张,比如 Mistral-7B 在某些设置下,归一化反而让需要保留的词数从 9 涨到了 11。
这个现象背后有个数学解释。研究者推导出,不做归一化时的误差,本质上等于"丢弃权重的比例"乘以"被丢弃那部分词的加权平均值"。而做了归一化之后,误差变成了"丢弃权重的比例"乘以"丢弃部分平均值和保留部分平均值的差"。如果丢弃的那些词和保留的那些词,它们的平均方向差不多,归一化就能把误差大幅抵消掉。反过来,如果两边方向差异很大,归一化反而可能让误差变得更糟。
这就像你往一锅汤里加盐,你本来按配方放了 10 份调料,现在因为材料不够只放了 7 份。直接端上桌,味道肯定淡了。如果你把这 7 份调料的浓度按比例提高,让总的咸淡接近原配方,汤的味道就能基本还原。但前提是你没加的那 3 份调料和你加的这 7 份味道差不多,如果没加的恰好是特别关键的一味香料,单纯调浓度也救不回来。这个类比揭示的正是归一化策略的代价和收益:它能部分弥补信息损失,但补救效果取决于被丢弃信息和保留信息之间的相似程度,这件事没法提前保证。
这个发现对理解"模型到底需要多少词"这个问题很重要,因为它说明有效注意力集合的大小,不只取决于哪些词被选中,还取决于选中之后怎么把它们组合起来。同样的选择策略,换一种聚合方式,答案可能完全不同。
### 理论模型给出的几个解释角度
论文的附录部分建了几个比较抽象的数学模型,试图从理论上说明为什么"需要的词数会随上下文增长"这件事,即使在没有新增有用信息的情况下也能发生。
第一个模型是刚才提到的竞争模型,说的是固定数量的目标词加上不断增长的干扰词数量,必然导致期望保留集合大小线性增长。
第二个模型关于注意力质量的保留。论文证明,如果打分的分布形态保持稳定,不随上下文长度剧烈变化,那么要保留固定比例的注意力总质量,所需要的词数会和上下文长度成正比增长。这意味着即便每个词的重要性排序没有变化,单纯因为蛋糕被切得更碎,想要吃到固定比例的蛋糕,需要拿的块数也会变多。
第三个模型更极端,论文构造了一个所有词的价值向量都完全相同的假设场景,在这种情况下根本不存在"更多独特信息"这回事,但只要任务对输出的整体幅度敏感,模拟实验依然显示保留集合会随着长度线性增长。这个构造是故意设计出来验证一个观点:观察到需要保留的词数在增长,并不能反过来证明上下文里真的出现了更多值得挖掘的独特信息,有可能只是单纯的聚合效应在起作用。
这几个理论模型放在一起看,传递的核心信息是:效果良好的注意力截断需要的词数增长,背后至少有三种互相独立、可能同时发生的原因,分别是竞争干扰增多、整体质量保留的数学约束、以及输出幅度对聚合方式的敏感性。单看实验现象,没法区分到底是哪一种,或者是哪几种的叠加在起作用。
### 这事儿留下的问题比答案更多
读完这篇论文,我最大的感受是,研究者非常克制,反复在强调"这个结果不能说明什么",这种诚实在学术论文里不算多见。
比如论文反复强调,注意力权重高不代表这个词真的重要,几何分离好看不代表功能有效,这两件事必须分开验证,不能互相替代。这一点其实打破了一个我之前没有细想过的默认假设,我之前默默觉得注意力权重应该天然就是"重要性"的代理指标,读完才意识到这个假设本身是需要专门验证的,而不是不言自明的。
还有个细节值得单独说一下:论文在做 BABILong 实验的时候,专门测了全模型在不同干扰程度下的准确率,发现准确率下降的幅度和候选集预测损失下降的幅度,走势并不完全一致。比如 Llama-3-8B 在加入 1K 背景文本之后,准确率反而有小幅提升,但损失却一直在涨。这提醒我们,用准确率这种二元指标去判断"模型变差了没有",可能会漏掉损失层面已经在发生的、更细微的退化。
论文还没有解决的问题其实不少。比如这些理论模型里的假设,比如打分分布保持稳定这件事,有没有在真实模型里验证过?论文自己也承认没有。再比如,为什么同系列的 Gemma-7B 和 Gemma-2-9B 差这么多,是训练数据变了,还是架构微调导致的,这个没有深挖,留下了一个挺诱人的后续研究方向。
还有一个点我觉得挺值得玩味:论文用到的"有用令牌假设"里那个未知集合 K(C),从头到尾都没有被直接观测过,所有的推理都是围绕它的"影子"在转。这种研究范式让我想起物理学里研究暗物质的方式,你看不到它,但可以通过它对周围事物的引力效应反推它的存在和性质。这篇论文某种程度上也是在用类似的逻辑,摸索一个看不见但确实在起作用的东西。
Q&A
Q1:有用令牌假设具体是什么意思?
A:它假设对于语言模型的每一次预测,上下文里存在一个未知大小的"有用集合",只有这个集合里的词真正帮助预测,其余词即便被给了注意力权重,也只是噪音,这个集合的大小会随句子、层数、注意力头和预测位置变化。
Q2:为什么不同模型需要保留的词数差异这么大?
A:论文测试发现 Mistral-7B 只需保留 14 个词就能把损失控制在 5% 以内,Gemma-7B 却需要 226 个,差了十几倍,而且同系列的 Gemma-2-9B 只需 12 个,说明模型大小和家族都不能解释这个差异,具体原因论文没有深入分析。
Q3:重新归一化注意力权重为什么能减少需要保留的词数?
A:删掉词之后不做任何调整,剩下权重总和会小于 1,相当于信号被削弱。重新归一化会把剩余权重按比例放大,如果被丢弃的词和保留的词平均方向接近,这种放大能大幅抵消误差,使需要保留的词数明显减少。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.