找回密码
立即注册
搜索
发回帖 发新帖

6416

积分

0

好友

811

主题
发表于 1 小时前 | 查看: 6| 回复: 0

墨问群里有使用 DeepSeek-V4 的朋友反馈过一类现象:同一个问题,昨天答得挺像回事,今天换个说法再问,质量就掉了一大截。提示词明明没怎么动,模型却像换了个人。

偶尔出一次偏差不算什么,但如果反复出现,那就该是不确定性里藏着某种确定性了。昨天读了一篇文章,讲的是字节 Seed 团队的一项发现,恰好为这种位置相关的不稳定提供了一个工程层面的解释。急着看结论的朋友可以跳到文末的实用技巧部分。

ByteDance Seed 团队与普林斯顿、斯坦福、UC Berkeley 合作论文标题页

论文在这里: https://ultimatejupiter.github.io/blog/periodic-weak-spots/

研究团队发现,在特定的检索和代码补全测试中,DeepSeek-V4 系列模型的表现会随着输入信息所在位置,以 4 个 Token 为周期规律地上下波动。在 128K 长上下文的检索测试里,Flash 基础模型最好位置组与最差位置组的准确率差距达到 40.2 个百分点。这确实能解释一种位置相关的波动,但还不足以断定群友遇到的问题就一定源于此。

40 个百分点有多大?用考试打个比方,30 分和 70 分之间,恰好隔着 40 分。当然,这里测的是一组检索任务的准确率差值,不能直接换算成日常聊天的质量感受,但量级上的意思很明确。

为什么会出现这个现象?我和 AI 讨论了几轮,大致理清了缘由。DeepSeek-V4 采用分块 KV Cache 压缩技术来降低长上下文的开销,其中 CSA 使用 8 个 Token 的压缩窗口,每隔 4 个 Token 启动一个新窗口。窗口之间有重叠,不同位置的信息在压缩和检索的过程中,能被保留下来、再被完整找回来的能力存在系统性差异。

打个比方:班里同学排成长队,老师每次把连续八个人的情况浓缩记在一张纸上,然后往前走四个人,再写下一张。摘要之间互相重叠,但每个人的信息未必都记得一样清楚。等模型稍后需要调取某个人的信息时,这个人站在摘要纸里的哪个位置,就可能直接影响查找效果。

这就是所谓的“相位敏感性”。这里的“相位”,指的是 Token 位置除以压缩步长后的余数。在研究测试的模型和任务中,弱点会沿着这个相位规律地重复出现。下面这张示意图可以帮我们建立直观概念:

DeepSeek-V4 CSA 分块 KV Cache 压缩窗口与步长示意图

压缩窗口和步长示意:周期与步长对应,图中仅展示 CSA 的分块关系。

研究还提到,后训练确实能提高准确率、缩小差距,但在已测试的版本中,周期性差异依然存在。比如 Flash 后训练版的差距降至 19.1 个百分点,Pro 后训练版为 14.8 个百分点。DeepSeek-V4.1-Flash 在该测试中的差距进一步收窄到 6.1 个百分点,不过其周期也随压缩步长变成了 2 个 Token。

DeepSeek-V4 各版本在 128K 上下文键值检索中的位置组准确率差距对比图

同一检索实验中的位置组差距:40.2 个百分点来自 Flash 基础模型,后训练版本差距明显较小。

看到这里,自然会有新的疑问:其他模型会不会也有类似的毛病?

原理解释上看,采用类似分块 KV Cache 压缩的模型,理论上也可能出现同类问题。这口锅不该只让 DeepSeek 来背,因为研究者们在从头训练的小模型中也复现了这一现象。长上下文场景下,KV Cache 的内存开销实在太大,降低内存和注意力计算开销是业界常见的优化方向:有的按块压缩,有的用稀疏注意力,有的上滑动窗口。这几种机制并不等同。

固定分块可能带来位置相关的差异,但具体会不会显现、强弱如何,还要视架构和训练方式而定,不能仅凭“切块”两个字就匆忙下结论。

DeepSeek-V4 的波动之所以呈现规律的 4 Token 周期,是因为它与压缩步长直接对应:窗口大小是 8,步长是 4。别家的实现不同,表现出的周期和强弱可能并不一样,甚至压根没有明显周期性。

就这个问题,我还咨询了做模型的朋友。他说,哪怕不用分块压缩,模型大概率也会对位置敏感。

学术界早就有“Lost in the Middle”的说法:在所测试的模型和任务中,相关信息出现在长上下文的开头或结尾时,模型通常利用得更好;放在中间位置时,表现往往下降。人似乎也差不多,读文章时印象最深的经常就是头尾。这种现象在未采用上述分块 KV 压缩的模型中也曾出现过,但它和每隔几个 Token 就重复一次的相位弱点,是两种不同的位置现象,不能简单归结为注意力机制必然带有这个缺陷。

滑动窗口也不能一概理解成窗口之外的信息全都丢了。单层局部注意力确实无法直接访问窗口外的位置,但多层网络能够间接传递更早的信息,混合架构还可能保留其他记忆路径。具体能记住多少,要看模型的具体设计。

回到日常使用层面,我们真正能做的,是让关键信息更容易被模型捕捉到,再验证模型是否真的用对了地方。我总结了几条:

  1. 重要内容优先放开头或结尾。 在长文档、长代码或长对话中,把最关键的指令和相关信息安排在这些位置,是有研究依据的经验做法。不过效果仍取决于具体模型和任务,不能保证彻底消除分块压缩引起的相位弱点。

  2. 关键信息可以简洁地说两遍。 开头提一次,结尾呼应一次,以少量 Token 成本换取模型对重点的更好把握。重复内容要保持一致,别越说越复杂,也别指望重复就一定奏效。

  3. 对结果不满意时,不必急着“PUA”模型,可以挪挪关键信息的位置再问一次。 很多人看到 AI 事没办好,第一反应是改提示词,结果越改越复杂。这项研究说明,小幅调整信息位置也可能改变结果。需要注意,相位是按 Token 计算的,挪动一两句话之后,可能进入了不同相位,也可能仍停留在原相位。

  4. 关键结论要做交叉验证。 这一点我之前就写过,尤其在做 Coding 时,一次做到 95% 完成度的场景很少见。让模型自己多跑几轮 review,或者调用多个模型交叉检查,质量会可靠不少。

顺带一提,这类缺陷有可能随着训练方法和架构迭代逐步缓解,但什么时候消失、能否完全消失,目前还没有明确答案。今天总结的这些技巧,也可能随着模型更新而逐渐失效。这大概是 AI 时代技巧类内容的一种宿命:保质期难以预测,有用的时候也得看具体场景。




上一篇:沙箱报告“未发现威胁”为什么不等于文件安全:一线分析师如何识别反沙箱规避
下一篇:从零安装 Go 1.27 环境:编写并运行你的第一个 Go 程序
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-18 07:00 , Processed in 0.067114 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表