[控场AI]
· 8 分钟阅读· 4,310 字

加几个空格就让DeepSeek翻车?字节论文揭示分块KV压缩的相位盲区

加几个空格就让DeepSeek翻车?字节论文揭示分块KV压缩的相位盲区

字节论文揭示DeepSeek等分块压缩模型存在相位敏感性,关键信息易丢失。

字节团队发现,DeepSeek等采用分块KV Cache压缩的模型存在“相位敏感性”:输入中微小扰动(如增加几个等号)会导致输出剧烈波动,因为 Token 在压缩段内的位置(相位)决定了信息保留程度。在128K大海捞针测试中,不同位置准确率差距高达40.2%,且缩短压缩步长只能缓解无法根除。该问题源于分块压缩的结构缺陷,与位置编码和参数调优无关,所有类似技术路线的模型均受影响。动态分块被视为潜在解药,但面临算法、显存和硬件对齐的多重挑战。

同一个问题问 DeepSeek 两次,只是多敲了几个空格,给出的答案居然一个像"天才",一个像"智障"。这不是偶发的幻觉,而是一个可以被精确复现的结构性缺陷——字节团队的最新论文把它揪了出来。RSS来源截图

一个空格引发的"神鬼二象性"

字节团队的发现始于一个再普通不过的任务:让 DeepSeek广告-V4-Flash-Base 补全一段代码。

具体来说,是补全一段 FP8 量化函数的最后一个 Token。按照代码逻辑,正确结果应该是 8。但研究人员在代码最前面加了一串纯装饰用的等号之后,模型输出了 32。

更诡异的是,错误不是随机的,而是和等号的数量严格挂钩——当等号数量除以 4 余数为 0 或 1 时,错误率高达 71.3%;余数为 2 或 3 时,正确率回到 91.5%。

这种"加几个空格就翻车"的现象被字节团队称为相位敏感性,论文标题为《Periodic Weak Spots: Phase Sensitivity from Chunked KV-Cache Compression》,直接点名了 DeepSeek V4 系列模型的"神鬼二象性"问题。

根因:分块压缩带来的"位置决定命运"

省钱杀手锏的另一面

分块 KV Cache 压缩技术,是 DeepSeek 用来解决长上下文显存压力问题的核心手段。它把连续的 Token 按固定长度切割,每一段里的 Token 通过一个可学习的门控层压缩成"小摘要",长上下文的显存压力随之大幅减轻。

这解决了显存问题,但引入了新问题。

标准 Transformer 的注意力只依赖 Token 之间的相对距离,不关心绝对位置——一句话不管放在哪里,只要词序不变,意思就不变。但采用分块压缩之后,每个 Token 在压缩段内的位置变得至关重要,这个位置叫"相位"。门控层会给不同位置的 Token 分配不同权重(槽位增益因子),排到强势槽位的 Token 会被加权保留,排到盲点槽位的 Token 几乎被忽略。

研究人员进一步解剖模型内部,发现注意力头形成了自然分工——有的专门处理段内靠前的位置,有的专门处理靠后的位置。这种"相位专门化"让某些排位成了系统性的薄弱环节。

KV Cache 是什么? Transformer 模型在自回归生成时,每生成一个新 Token,都需要对之前所有 Token 的 Key 和 Value 向量做注意力计算。为了避免重复计算,推理系统会把这些 K、V 向量缓存下来,这就是 KV Cache。问题在于,它的显存占用与上下文长度成正比:上下文越长,缓存越大。以 128K Token、数十层、多头注意力为例,KV Cache 动辄占用数十 GB 显存,成为长上下文推理的主要瓶颈。因此,业界才需要各种 KV Cache 压缩(如量化、稀疏化、分块合并)技术来降低成本。

门控层与槽位增益因子:在分块压缩方案中,一个压缩段内的多个 Token 并非被等权平均,而是通过一个可学习的门控网络为每个位置分配权重。这些权重被称为槽位增益因子,类似一个“软开关”,决定该位置的 K/V 信息保留多少。模型在训练中自行学会:某些位置(如段首)包含更多关键信息,就分配高增益;某些位置(如段中)冗余较多,就分配低增益。这种数据驱动的分配并不完美,于是形成了“强势槽位”和“盲点槽位”。

大海捞针测试:40% 的准确率波动

为了验证这不是巧合,字节团队做了一个严格控制的"大海捞针"实验。

他们构造了一段长达 128K Token 的上下文,里面包含约 1.6 万个键值对。键值关系不变、问题不变、上下文总长度也保持一致,唯一的变化是:把其中一个键值对放在不同位置。

结果触目惊心:DeepSeek-V4-Flash-Base 在不同位置之间的准确率最大差距达到 40.2%,换成 DeepSeek-V4-Pro-Base 后差距仍有 34.8%。即使经过后训练优化,差距依然有 19.1% 和 14.8%。

这意味着什么?如果你让大模型审阅几十页合同,而关键条款刚好卡在了"信息盲区",模型可能直接无视这条信息,给出完全相反的结论。你可能永远不知道问题出在哪里。

大海捞针(Needle-in-a-Haystack) 是评估长上下文模型信息检索能力的经典基准。做法是:在一段很长的无关文本(“草堆”)中,随机插入一条关键信息(“针”),然后向模型提问与该信息相关的问题,检验它能否准确回答。通过改变“针”在输入中的绝对位置和深度,可以绘制出准确率随位置变化的曲线。这个测试能暴露模型在长上下文不同位置上的检索能力差异。本文中,字节团队进一步控制了变量——键值关系、问题、总长度都不变,只改变一个键值对的位置,从而将“位置”这一因素独立出来,精准测量“相位敏感性”。

减半步长也治标不治本

DeepSeek 在 V4.1-Flash 中尝试将压缩步长从 4 砍半到 2,每一轮压缩只合并 2 个 Token。这样即使关键信息落在偏弱的奇数位置,相邻位置只差 1 个 Token,上下文也很难被完全丢失。

效果确实有——准确率差距从 40% 降至 6.1%。但问题并没有被根除。

RoPE(旋转位置编码) 是当前主流大模型广泛采用的位置编码方案。它通过旋转矩阵将位置信息注入注意力计算,使得模型可以感知 Token 之间的相对距离。标准 Transformer 在理论上具有平移不变性,即注意力只依赖相对位置,不依赖绝对位置。然而,分块压缩打破了这一性质:压缩后的表示依赖于 Token 在压缩块内的绝对位置(相位),从而引入了周期性偏差。字节团队通过移除 RoPE 实验排除了位置编码的干扰,证明波动根源于压缩机制本身。

不是 DeepSeek 一家的问题

字节团队用 Qwen3-0.6B 架构从头训练了一批模型,所有配置完全一致,只改压缩机制。结论非常清晰:

  • 所有采用分块压缩的模型,都出现了周期性准确率波动;没有压缩的全注意力基线模型,完全正常
  • 波动周期严格等于压缩步长
  • 去掉 RoPE 位置编码,波动依然存在——不是位置编码带来的偏差
  • 把可学习的门控权重换成最简单的平均分配,照样周期波动——不是参数没调好

只要按固定长度做分块压缩,这个问题就无法避免。 这是方案本身的结构缺陷,不是调参、换位置编码或后训练能根除的。

据了解,Llama 3 系列等采用了类似分块压缩或稀疏化技术的开源模型,或多或少都存在类似问题。在当下这个高喊"把长文本成本打下来"的时代,这几乎是所有走这条路线的模型共同的盲区。

动态分块:解药还是方向?

有网友指出,要彻底解决这个问题,得让切块本身"活"起来——根据内容的重要程度动态决定边界。当 Token 没有固定的相位,相位差也就无从谈起。

动态分块的核心思路,是抛弃按固定 Token 数量一刀切的模式,根据语义和重要性灵活调整切分粒度。它的技术重构涉及三个层面:

第一层,重构注意力的数学基础。 信息密度低的废话大块合并,遇到关键转折和高密度信息就拆分得足够细。这在数学上重构了被固定分块打破的平移不变性,还赋予模型一种"预判能力"——该快读的地方快,该细品的地方慢。

第二层,倒逼显存管理的演进。 底层传统的"静态连续矩阵"不再适用,必然要向"拓扑稀疏矩阵"演进,靠动态索引完成寻址。好消息是,不同 Transformer 层之间的动态分块边界高度相似,可以直接复用,大幅摊薄寻址开销。

第三层,破解硬件对齐的难题。 GPU 天然偏好规整的矩阵运算,分块大小参差不齐会让专为矩阵计算打造的加速单元大量空转。业界已有零填充等可行解法。

在实际成果方面,香港科技大学(广州)团队提出的 ChunkKV 走的是"语义连续性"路线——以连续的语义块为基本压缩单位,要么整块保留,要么整块丢弃,避免传统方法把完整句式拆得支离破碎。在最考验长文本检索能力的 NIAH 基准测试中,当 KV 缓存限制在 128 时,基于 LLaMA-3 的 ChunkKV 准确率达到 73.8%,远超传统方法 SnapKV 的 58.9%。

Jina AI 肖涵博士团队则聚焦检索场景优化,提出的延迟分块方案让模型先完整读完全篇文本,直到输出结果前再按语义自然分界切分,最大程度保留完整信息。

在"稀疏计算"方向,微软亚洲研究院的 MInference 框架针对百万字级别场景,为不同注意力头匹配最适合的稀疏计算方式,在检索准确率不降的前提下,百万字长上下文的 prefill 阶段最高实现 10 倍加速。

这场 Bug 揭示的更深层问题

长上下文竞赛的上半场,大家比的是"谁能处理更长",KV 压缩技术功不可没。但长上下文的本质从来不是为了长而长——当用户开始真正用长上下文处理合同审查、代码分析、法律检索等真实任务时,"能用、好用、不丢信息"才是新的 KPI。

字节这篇论文的价值,不在于找出 DeepSeek 的一个漏洞,而在于暴露了整条技术路线的结构性代价:我们为长上下文省下的显存和成本,最终可能以"关键信息静默丢失"的方式被用户买单。而更棘手的是,这种错误不报错、不可见、难以复现——你甚至不知道应该检查什么。

动态分块被寄予厚望,但它对从算法数学、显存管理到底层硬件的整个技术栈提出了重构要求,短期内难以大规模落地。在过渡期里,用户或许需要对长上下文模型的输出保持一份额外的警惕——尤其是当关键信息在输入中的位置不确定时。

动态分块与静态分块的对比:静态分块按固定 Token 数(如 4 个一组)机械切割,导致每个 Token 的相位固定,一旦关键信息落入盲点槽位,信息就被系统性丢弃。动态分块则根据语义边界或重要性分数自适应决定切分点,使得 Token 不再有固定的相位,从而打破周期性的薄弱环节。但动态分块也带来新挑战:变长分块导致显存管理复杂化,需要从静态连续矩阵转向拓扑稀疏矩阵,并依赖动态索引寻址;同时 GPU 擅长规整矩阵运算,不规则分块会造成硬件利用率下降。业界通过零填充、边界复用等技巧部分缓解,但距离大规模高效落地仍有距离。

#DeepSeek#KV Cache压缩#相位敏感性#字节论文#长上下文#动态分块#ChunkKV#大模型缺陷
分享:

相关推荐