尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

语言模型能自己决定该看哪里吗?

语言模型能自己决定该看哪里吗? 你有没有想过一件事一个能读懂百万字小说的AI回答男主角小时候养的那只猫叫什么名字这种问题时其实是把整本书从头到尾又扫了一遍才找到答案的这听起来有点荒谬。你自己回忆一件事的时候绝不会把一辈子的记忆全部倒带一遍再作答你会直接跳到相关的那个片段。但今天几乎所有的语言模型在处理长文本时都在做这种笨功夫。这就是这篇论文要解决的问题。KAIST AI和Google DeepMind的研究者们发现语言模型在生成每一个字的时候理论上只需要关注上下文里很小的一部分信息可实际操作中它却不得不把整个上下文都读一遍才能确定该关注哪一部分。这种矛盾造成了巨大的浪费而更有意思的是他们提出的解决方案不是造一个更聪明的检测器,而是直接问模型:你不是知道该看哪里吗那你自己说出来不就行了。一个反直觉的浪费:模型明明知道答案在哪,却要重新翻遍全书先说清楚问题有多严重。以一个真实的例子来说,Qwen-3.5-397B这样的模型处理100万token的上下文时每生成一个字都要从显存里读取大约15GB的KV缓存KV缓存*模型在处理文本时,会为每个已经看过的词生成一组叫做Key和Value的向量,存起来供后续生成时参考。上下文越长,这个缓存就越大,读取它的开销也越大。这15GB是什么概念差不多相当于把这个模型170亿激活参数整个重新加载一遍的带宽消耗。而这只是生成一个字的代价如果回复有几百字这个开销就要重复几百次。问题的核心在于注意力的分布高度集中。已有研究反复证明模型在处理长文本时真正被重点关注的往往只是上下文里的一小撮token大部分内容对当前生成的这个字几乎没有影响。既然如此为什么还要把全部内容都读一遍原因很扎心没人知道提前该读哪部分。注意力分数是要等模型算完整个注意力矩阵之后才知道的这是一个先有鸡还是先有蛋的问题。于是学界过去几年发展出了一整套预测热点区域的方法比如根据最近使用过的token优先保留这被称为近期性启发式或者根据历史注意力权重的大小来判断哪些token更重要。这些方法有一个共同的软肋它们都是靠猜的。近期性、历史权重这些规则本质上是静态的经验法则没法真正预判未来某个特定问题需要用到上下文里的哪个具体细节。后来的改进方案变得更聪明一些它们会在每一步生成时先对KV缓存做一次轻量级的扫描打分挑出得分最高的一批token去参与真正的计算这就是所谓的动态稀疏注意力。DeepSeek的V3.2、V4都用了类似思路通过一个轻量级的索引器给每个token打分。这确实降低了常数级别的开销但问题的本质没变这个打分扫描过程依然要过一遍全部的上下文复杂度还是O(N)只是系数变小了。这就好比你为了找家里钥匙放在哪专门雇了一个助手每次都把全屋翻一遍只不过这个助手手脚比你快。手脚快是快了但翻箱倒柜这个动作本身没有被省掉如果房子越住越大上下文越来越长这个助手迟早也要慢下来。研究者们的思路是反过来问一个问题模型自己不是知道钥匙在哪儿吗那为什么不让它直接说出来让模型开口说我要看哪里:声明式注意力协议这就是这篇论文提出的核心方法,叫做**声明式注意力**Declarative Attention简称DA。DA*一种协议让模型在生成回答的思维链过程中用特定的标签明确声明接下来这段推理我需要关注上下文的哪个部分推理引擎读取这些声明后直接跳过不相关的KV缓存读取。这个想法的灵感来源其实并不神秘。已经有研究证明语言模型的隐藏状态里其实编码了关于未来token的信息而思维链提示chain-of-thought本质上就是把这种潜藏的计算过程用可读的文字表达出来。既然模型可以把接下来该怎么想写出来那让它把接下来该看哪里也写出来逻辑上是完全说得通的延伸。DA把生成过程切分成了三种模式。第一种叫global全局模式模型在这个状态下能看到全部上下文用来做导航判断接下来该去哪个区域找答案。第二种叫focus聚焦模式模型只能看到自己指定的那一小段上下文专门用来从里面提取具体信息。第三种叫local局部模式模型完全看不到原始上下文只能基于自己已经生成出来的内容做推理和总结。论文里给了一个特别直观的例子。假设问题是Acme公司成立多久后上市的模型的推理过程可能长这样先进入global模式,说我需要找到成立年份和上市年份,第2个片段应该包含公司历史信息然后切到focus模式,只盯着第2个片段读出Acme公司2003年在圣何塞成立再回到global模式找上市信息,定位到第7个片段再次focus提取出2011年上市最后进入local模式,不再看任何原文,只凭前面提取的两个数字做减法算出8年。整个过程读起来跟人类解题的思路几乎一模一样先扫一眼定位再精读细节最后闭着眼睛算答案。这里有一个特别巧妙的设计细节值得单独说一说。研究者把长文本切成大约2048 token一段的魔法片段魔法片段magic chunks*论文对上下文分段单元的称呼之所以叫魔法是为了提醒模型这些分段是任意切出来的检索单位跟文档本身的章节结构没有关系避免模型把它们和真正的语义边界混淆。而这些片段呈现给模型的方式不是简单地拼接文本而是伪装成一段工具调用记录好像模型之前调用了一个叫get_magic_chunk的工具一段一段把文档取回来了虽然这个工具其实压根没被真正执行过所有内容在生成开始前就已经摆在那里了。为什么要这么绕一圈因为模型在预训练和后训练阶段见过大量结构化文本段落边界、句子边界尤其是工具调用里user、assistant、tool这几种角色轮次之间的边界是模型天然就很擅长追踪的东西。如果用一些从没见过的自定义分隔符去标记片段模型反而可能追踪得磕磕绊绊。这就好比你想让一个新员工快速记住文件柜的分类逻辑与其发明一套只有你自己懂的编号体系不如直接沿用公司里每个人都习惯的部门缩写员工上手更快出错更少。那这套声明是怎么真正转化成计算节省的答案在于一个叫DA状态机的东西,它跟推理引擎并肩运行实时监听模型输出流里的标签变化一旦看到或者标签就立刻更新接下来这一步该允许模型看到哪些KV缓存位置构造出一张分段级别的注意力掩码。这套机制被集成进了vLLMvLLM*一个开源的大模型推理服务框架被广泛用于生产环境部署以高效管理KV缓存著称。的推理框架里而且做得相当讲究工程细节。因为vLLM把KV缓存存成一个个固定大小的块通常16到32个token一块注意力核函数是整块整块读取的如果只是零散地丢弃个别token实际的内存读取量根本不会减少。所以DA的掩码是按块对齐的把要保留的token范围向外圆整到块边界最多在每个边界多读几十个token相对2048 token的片段来说几乎可以忽略。这样一来现成的FlashAttentionFlashAttention*一种针对Transformer注意力计算做了IO优化的高效算子被广泛用于大模型的高速推理和训练。核函数完全不需要改动就能直接吃掉这个掩码跑得又快又稳。这样值不值:更多的解码步骤,换来更少的每步开销这里有个绕不开的权衡问题既然DA需要模型多写一些标签、多绕几圈思考那生成的步数肯定会变多这多出来的步数会不会把省下来的注意力开销又吃回去论文用了一个叫roofline wall-time屋顶线墙钟时间的分析框架来回答这个问题。Roofline模型*一种衡量硬件性能上限的经典分析方法把计算任务分为计算受限和内存带宽受限两类分别用峰值算力和峰值带宽作为理论天花板去估算实际耗时。简单说这套框架把解码过程中的开销拆成两部分一部分是FFN前馈网络的矩阵乘法这部分在大批量推理时是计算密集型的跟上下文长度没关系只跟生成了多少个token有关另一部分是注意力的KV缓存读取这部分是内存带宽密集型的会随着上下文长度和步数同时增长。在大批量、长上下文的生产部署场景里注意力这部分的开销会远远压过FFN。论文给了一个具体的数字例子以Qwen-3.5-397B为例在100万token上下文下单步注意力操作的理论耗时大约是矩阵乘法耗时的145倍。这个差距意味着只要能压缩注意力这一块的读取量哪怕多花一点步数总体也是划算的前提是部署环境是那种把prefill预填充和decode解码分开跑在不同硬件池上的现代化大批量服务架构这在DeepSeek这类大厂的生产环境里已经是标配做法。用一个开车的场景来理解可能更清楚。假设你要开车去一个陌生地方每一步都要停下来把整本地图册翻一遍确认路线这显然很慢。而如果你先花几秒钟看一眼路标确定大概方向相当于global模式然后专心盯着眼前这一小段路相当于focus模式大部分时候甚至可以凭刚才记住的路线直接往前开而不用再看任何标识相当于local模式,你确实会因为确认方向这个动作多花了几次停顿但省下来的翻地图时间远远超过这点停顿的代价。如果不这么做每一步都全本翻阅速度会被拖到让人无法忍受。实测效果:15个长文本任务,省下一半以上的注意力开销方法讲清楚了接下来看它到底管不管用。研究者在Gemma-4-31B和Qwen-3.6-27B这两个当前主流的开源大模型上做了零样本零样本zero-shot*不对模型做任何额外训练或微调直接用一段固定的提示词让模型执行新任务的方式。测试没有做任何针对性训练完全靠一段固定的提示词模板让模型照做。测试覆盖了15个长文本任务涵盖RULER、LongBench v1/v2、LooGLE和ZeroSCROLLS这几个业内知名的长上下文评测基准任务类型从简单的密钥检索到跨文档的复杂多跳推理都有上下文长度从几千token到超过百万token的代码仓库不等。结果是这样的在Gemma-4-31B上DA把解码过程中总的注意力读取量降低了52.0%平均准确率只掉了1.27个百分点从87.01%降到85.74%在Qwen-3.6-27B上注意力读取量降低了31.1%准确率掉了2.75个百分点从85.31%降到82.56%。| 模型 | 方法 | 准确率 | 注意力读取量(M/样本) ||---|---|---|---|| Gemma-4-31B | Vanilla原始 | 87.01% | 13.43 || Gemma-4-31B | DA | 85.74% | **6.45** || Qwen-3.6-27B | Vanilla原始 | 85.31% | 22.54 || Qwen-3.6-27B | DA | 82.56% | **15.52** |单看这个数字可能没什么感觉换算一下在最长的代码仓库问答任务上LBv2/code_repoGemma模型每次回复省下了4180万个token的注意力读取量Qwen省下了5200万个。这不是理论上的数字游戏是实实在在的显存带宽节省。为了确认这些节省到底是从哪儿来的研究者还专门做了一个对照实验叫DA-no-mask简称DAnm用一模一样的提示词模板让模型照样生成那种分模式思考的文字但是推理引擎完全不做任何掩码限制还是老老实实把全部上下文都算一遍。结果发现DAnm的准确率跟原始方法几乎没有差别Gemma上87.01%对87.01%完全持平Qwen上84.62%对85.31%只差0.69个百分点但是它的注意力读取量反而比原始方法还高出66.2%Gemma和28.8%Qwen因为模型在这种协议下确实会生成更多的思考步骤。这个对照实验说明了一件很关键的事真正带来效率提升的不是让模型多想一点这个动作本身而是那个真正被执行的掩码。如果只是让模型嘴上说说我现在要聚焦看哪里却不真的把这句话落实成硬件层面的读取限制那反而是白白多花了力气还没捞到好处。这就好比公司要求员工每天写工作日志声明今天重点做A任务但如果没有人真的照着这份日志去调配资源、减少其他任务的干扰那这份日志除了增加员工的书写负担什么好处都不会有。越大的模型,用起来越顺手论文还测了一个很有意思的规律模型的能力和它用好DA协议的水平之间存在明显的正相关。研究团队一共测了六个不同规模的模型Gemma系列从4B到31BQwen系列从4B到27B。结果显示DA相对于原始方法的准确率保留比例随着模型规模增大而稳步上升。在Gemma系列里从最小的E4B模型只能保留29%的原始准确率到最大的31B模型能保留99%Qwen系列从4B的64%上升到27B的97%。为什么小模型表现这么差研究者进一步拆解发现很大一部分原因根本不是推理能力不够而是协议都没遵守好。他们统计了一个叫focus成功率的指标衡量模型发出的focus标签有多少能正确解析成一个有效的片段引用。Gemma-4-E4B这个最小模型的focus成功率只有58%而最大的31B模型能达到99%。换句话说小模型很多时候连我要看哪个片段这句话都说不利索自然没法指望它精确地找到答案。这个发现挺有意思的它意味着DA不是一个万能药而更像是一种需要一定语言表达能力门槛才能发挥价值的协议。这跟人类学习一门新技能有点像一个刚学会走路的孩子你让他精确描述你现在想去哪个方向他大概率说不清楚但一个成年人做同样的事情毫无压力。模型的规模在这里扮演的角色某种程度上类似于语言表达和自我认知的成熟度。有意思的是注意力节省的比例反而跟模型规模关系不大五个模型里注意力读取量都稳定在原始方法的46%到69%之间跟准确率那条明显向上的曲线形成了鲜明对比。这说明每一步该读多少这个机制本身的效率是相对稳定的真正随着模型变强而改善的是模型用好这套机制去解决问题的能力。上下文越长,省得越多另一个符合直觉但仍然值得单独拎出来说的发现是DA节省的绝对token数量会随着上下文长度的增加而急剧放大。研究者把15个任务的数据按上下文长度分桶统计发现DA在短上下文8K以内时只比原始方法省下大约100万个token而在最长的那一档64K到256K里节省量猛增到2100万个token。这个现象背后的道理其实很朴素。因为DA每一步的节省比例大致维持在50%左右这个恒定值是一个相对固定的百分比而上下文本身的体量决定了这个百分比对应的绝对数字有多大。上下文越长50%对应的绝对数字自然就越夸张。这就好比给一辆百公里油耗5升的车加满油和给一辆油耗10升的车加满油省下来的钱的绝对数额会随着油箱大小成倍放大即便省油的百分比是一样的。也正因为这个规律DA这个方法的应用场景越往长上下文的方向走价值就越明显。而当前整个行业的趋势恰恰就是上下文窗口越做越长从最初的几千token一路推进到今天动辄百万token的规模这也是研究者在论文里反复强调的一点这个方法的收益会随着行业本身的技术演进而自然放大不需要额外做什么。掩码内部到底发生了什么:三种模式的成本分布再往细节里看一层DA的三种模式在实际生成中各自占了多大比重每种模式又省下了多少。在Gemma-4-31B上global模式只占了生成token总量的大约27%剩下73%都花在了focus和local这两种便宜模式上。而这两种便宜模式的每token注意力节省效果非常可观focus模式平均能省掉88%左右的每步注意力开销local模式更是能省掉94%左右因为local模式压根不去看原始上下文。这里有个细节值得琢磨global模式的占比会随着上下文变长而上升在超过128K的最长一档里global占比涨到了45%左右。这意味着导航这件事本身在超长文档里也会变得更费力模型需要花更多的思考步骤去反复确认自己该往哪儿看。研究者提出了一个未来可能的改进方向让模型在导航阶段不必看完整的原始内容而是浏览一份类似目录索引的压缩摘要就像图书馆的分类卡片目录一样体积比原书小得多翻起来自然快得多。局限和例外:哪些任务DA还搞不定研究者也很坦诚地列出了几类DA目前处理得不太好的任务一共六个例子可以归为两类根本性的矛盾。第一类问题是分段本身破坏了答案所需的证据。比如一个统计全文里某个词出现次数的任务答案需要跨越所有片段做全局计数而focus模式一次只能看一个片段天然就凑不齐完整信息准确率在这类任务上跌幅高达30个百分点。再比如遇到跨片段的表格切分本身就把一张完整的表格硬生生斩断了数据自然就残缺了。第二类问题是输出长度本身会随着文档长度线性增长的任务比如逐段做摘要、或者需要给整本书里所有内容排序的任务。这种任务的解码步数天然就会随着文档变长而暴涨即便每一步的注意力开销确实降低了累积起来的总token数依然可能超过原始方法。这两类问题揭示了一个挺重要的道理DA的三种模式假设的是信息可以被局部化处理一旦某个任务需要真正意义上的全局信息聚合或者输出体量跟文档规模强绑定这套分模式思考的框架就会显得力不从心。这不是掩码机制本身失效了论文里特别强调即便在这六个失败案例上每一步的注意力读取量依然确实降低了39%到67%问题出在生成策略本身跟任务形状不匹配而不是底层机制坏了。写在后面读完这篇论文最触动我的不是那些节省了多少百分比token的数字而是它选择的解决问题的角度。过去几年几乎所有减少注意力计算量的研究都在琢磨怎么造一个更聪明的外部裁判去猜测模型接下来需要看哪里无论是靠历史统计规律还是训练一个专门的打分器。这篇论文换了个立场它问的是既然模型自己心里明镜似的知道该往哪看为什么不直接问它这个转向背后其实藏着一个更大的判断就是思维链本身正在从一种让模型多想想提高准确率的技巧慢慢演变成一种让模型的内部计算过程变得可读、可控、可干预的接口。论文里提出的系统2稀疏注意力这个说法我觉得挺贴切,以往的稀疏注意力方法本质上是系统1式的,是从模型的内部激活里猜出该关注哪里而DA是系统2式的,是模型用语言说出来的。这个差别看起来只是实现方式不同但它意味着未来这套选择逻辑可以像调教模型的推理能力一样用强化学习去继续优化而不是被锁死在一套固定的启发式规则里。还有一点我觉得值得单独提一句论文里提到的可逆式上下文压缩这个设想。现在的agent系统在处理超长对话历史时常用的做法是摘要压缩把旧内容浓缩成一段总结原始token的KV缓存就此永久丢弃如果之后又需要用到被压缩掉的细节只能重新从文本把它跑一遍prefill代价不小。而DA因为从不真的删除序列只是暂时不让某一步看到某些内容理论上被忽略的那部分KV缓存完全可以被挪到内存的更外层存放等哪一步的声明重新点名它时再取回来跟解码过程并行加载不需要重新计算。这算是一个附带发现但想象空间还挺大。论文里也留了一个我觉得挺值得继续追问的口子目前所有实验都是在模型没有开启思考模式思考模式*部分模型支持在正式回答前生成一段较长的内部推理过程也叫thinking通常用特殊标签包裹不直接展示给用户。的情况下跑的因为研究者发现模型在思考标签内部没法好好遵守DA协议。可现在的agent系统越来越多地依赖那种在工具调用之间穿插思考的长推理链条如果DA没法在思考模式下稳定工作它能省下的开销可能就只覆盖了整个推理过程里的一小段。这个限制什么时候能被打破或许才是决定这套思路能走多远的关键。如果有一天模型不仅能告诉你答案是什么还能顺带告诉你它是怎么找到这个答案的、途中翻了哪几页书、跳过了哪些内容你会不会觉得这样的AI更值得信任一点QAQ1声明式注意力DA是什么ADA是一种让语言模型在生成回答的思维链中主动声明接下来该关注上下文哪个部分的协议分为global、focus、local三种模式推理引擎读取这些声明后直接跳过不相关的KV缓存读取从而减少计算开销。Q2DA会不会明显降低模型的回答准确率A影响较小。在Gemma-4-31B上准确率只降低1.27个百分点在Qwen-3.6-27B上降低2.75个百分点同时注意力读取量分别减少了52%和31.1%而且这个准确率差距会随着模型规模增大而进一步缩小。Q3DA需要额外训练模型才能用吗A不需要。论文中的DA完全是零样本zero-shot方法只依靠一段固定的提示词模板在现成的Gemma和Qwen模型上直接生效没有做任何参数微调或专门训练。
返回列表