自回归视频生成缓存压缩新解:DeCoPrune用去噪一致性砍掉85%历史缓存
你有没有玩过那种需要你一直往前走、不能回头看攻略的密室逃脱游戏?玩到后面你会发现一个很现实的问题:你脑子里要记的线索越来越多,墙上那把钥匙的颜色、第三个房间门把手的形状、刚才那个NPC说的半句话,全都得记住,因为你不知道后面哪个场景会突然考你"还记得这个东西吗"。现在把这个场景换成AI。一个能够持续生成视频...
密室逃脱这类游戏,玩的时候只能一路往前,没法翻攻略回头查。越往后走越麻烦:钥匙是什么颜色、第三个房间的门把手长什么样、刚才那个NPC说过的半句话,样样都得搁在脑子里,谁也说不准下一关会不会突然问一句“这东西你还记得吗”。
把这事挪到AI身上,也是一样的处境。
能一段接一段持续产出视频的模型,正被同样的难题缠住。这类模型有个专门的叫法,叫自回归视频扩散模型。
所谓自回归视频扩散模型,就是一段一段往外生成视频的AI,每产出一小段,都得回头看之前生成过的全部内容,跟写连载小说要记住前情差不多。
它的好处是能一路往前生成,还支持实时互动控制,你边看边喊“往左转”“把那个水壶捡起来”都行。可代价也摆在那儿:每生成一小段新画面,之前所有生成过的画面信息都得存下来,存成的东西叫KV缓存。
KV缓存,就是模型生成时为了记住历史而保存下来的一堆数字,说白了是“压缩过的记忆”;不压缩的话,体积只会越滚越大。
麻烦就出在这儿:这份缓存只增不减,不会自己瘦身。生成一分钟视频也许还撑得住,换成十分钟、一小时呢?显存很快见底,计算速度也被拖得越来越慢。
这篇论文盯上的就是“记忆爆炸”这个难题。它给出的解法有点反直觉:一段历史画面该不该留在记忆里,不看它“重不重要”,而看AI自己去噪时“费不费劲”。
这个思路是怎么琢磨出来的,接着往下看。
记忆爆炸:删还是留,两难
在这篇论文之前,业界已经摸索出几条给越滚越大的缓存“减肥”的路子。
最粗暴的一种叫滑动窗口,只留最近几段画面,老的统统扔掉。好比记笔记只留最后三页,前面全撕了。毛病很明显:密室逃脱第一关埋的线索,到第十关才用得上,你把前九页撕干净,到时候只能干瞪眼。论文测试的一个叫Streaming的方法走的就是这条路,结果压缩比做到94.37%,可回忆准确度(用DINO分数衡量,满分1分)只剩0.4592分,比不压缩时的0.6803掉了将近0.22分。
另一种稍聪明些,靠相邻帧相似度来筛:这一帧和上一帧长得像,就当成“重复信息”扔掉。论文把这类方法叫TempDiff(时序差异法)。听着挺合理,两帧差不多,那确实有冗余对吧?可它有个硬伤,只跟紧挨着的上一帧比,没法跟几分钟前出现过的东西比。
这就像你只核对这一页笔记和上一页像不像,从不翻回第一页去对照。密室逃脱第一关的钥匙,隔了二十关又要用,这种“只看邻居”的筛法根本发现不了跨时间的重复,它压根没有跟远处内容做比较的机制。TempDiff在论文测试里拿到0.6229的DINO分数,比滑动窗口好不少,可还是比不上这篇论文提出的新方法。
那一段历史画面“值不值得留”,到底该怎么判断?
论文作者观察到一个挺有意思的现象,这个现象后来成了整篇论文的地基。
去噪的“费劲程度”,藏着信息量的秘密
要弄懂这篇论文的核心发现,得先简单说说视频扩散模型是怎么“画”出一帧画面的。
扩散模型生成图像或视频,跟雕塑家凿石头有点像:起初是一块完全看不出形状的“噪声”,好比一整块毛石头,模型经过很多步计算,一点点把噪声“去”掉,清晰的画面才露出来。这个过程叫去噪。
去噪,指扩散模型从一堆随机噪声出发,通过多轮迭代计算逐步还原出清晰画面,每一轮迭代都会让画面更清楚一点。
关键在凿石头的过程中,模型每一步都会猜一下“最终成品大概什么样”,这个猜测叫中间清晰预测。
中间清晰预测,是扩散模型去噪还没算完时,提前对“最终画面会是什么样子”做出的预判,跟工匠凿石头凿到一半先瞄一眼轮廓差不多。
。
论文发现的规律是:某一帧画面所对应的历史上下文(也就是之前存下的KV缓存)信息越丰富、越有用,模型“凿”这一帧时,中间猜测和最终结果就越接近,几步就能猜准。反过来,历史上下文里根本没有相关线索,模型就得“凿”很多步才能慢慢逼近正确答案,中间猜测和最终结果之间的差距(论文称之为“步到终值的差异”)也就比较大。
背后的直觉其实很朴素。拿猜词游戏来说,提示给得特别到位,你一下子就能猜中,几乎不用犹豫;提示含糊甚至没有提示,你就得东猜西猜,猜上很多轮才慢慢靠近答案,中间那些错误猜测跟最终答案差得老远。模型“凿石头”费不费劲,其实就是在告诉你:历史记忆里有没有现成的“提示”,能帮它一下子猜准。
这套规律在四种模型架构上做了验证,分别是Causal Forcing、LongLive、Self-Forcing和团队主要使用的LingBot World v2,结果高度一致:上下文相关时,误差曲线明显更低更平;上下文不相关时,误差曲线又高又陡。四种架构反复验证,指向同一条共性规律。
顺着这条规律,论文团队提出了一个反转思路。
画面被切成一个个小方块,论文里叫token。一个区域如果很容易被猜中,说明历史记忆里已有足够信息预测它,对记忆而言它就是冗余的,可以扔掉。反过来,一个区域很难被猜中,说明它带来了历史记忆里没有的新信息,这种区域才值得长期保存。
判断逻辑听着简单,解决的却是一个根本矛盾:怎么用模型自己的内在信号,而不是外部打分器或人工标注,去判断哪些记忆值得留。论文把这套方法叫DeCoPrune,中文可理解为“去噪一致性剪枝法”。
DeCoPrune:让模型自己告诉你哪些记忆该留
具体怎么操作?论文给了一个相当干净的公式。
正常生成一小段画面(论文称一个chunk,相当于视频的一小节)时,系统会在某个中间步骤(探测时间步)记录一次中间清晰预测。等这一段彻底生成完,再拿这个中间预测和最终结果对比,算出两者的均方误差(MSE)。误差越大,说明这个区域越难被历史上下文猜中,也就越该保留。论文设了阈值γ,误差超过阈值的区域打上“保留”标记,低于阈值的打上“丢弃”标记。
这套流程最妙的地方在于它是“顺便”完成的。模型本来就要走这一遍去噪计算,中间预测本来就会产生,系统只多做了一步“对比”,没有额外训练打分模型,也没有引入外部检索系统去算相似度。论文管这叫在线评分——整个过程在正常生成的轨迹里顺手完成,不需要额外跑一遍模型。
对已经拍好的真实视频(没有经过模型生成轨迹的那种),论文用了一个变通办法:把已观察到的那段视频重新“加噪”回去,再让模型根据保留下来的上下文重新去噪一遍,把重新去噪的结果跟原始观察到的画面做对比。这样一来,AI自己生成的历史和真实拍摄的素材,都能套用同一套判断逻辑。
算出“保留”还是“丢弃”之后,物理上怎么操作缓存?论文设计了一套分层策略。最开头的一段画面(叫sink chunk,即“锚点段”)会被完全保护,不管怎么筛选都留着,因为这往往是整个场景最初的设定信息。最近生成的几段画面也完整保留,不做筛选,这部分叫recent window(近期窗口)。只有超出近期窗口、又不是锚点的那些中间段落,才真正执行“去噪难度筛选”,筛选后留下的KV条目重新打包压缩进缓存。
关键在于,筛选结果是物理性地缩短了缓存序列的长度,而不是只在注意力计算时把某些位置的权重设成零。这个区别很重要:只把权重设成零,那些被“屏蔽”的历史信息其实还占着显存,只是暂时不参与计算;DeCoPrune是真正把这些KV条目从缓存里删掉,腾出实实在在的空间和计算量。
拿收拾书架来打比方,办法有两种。一种图省事,给平时不翻的书夹上书签,写上“暂不阅读”,书照旧占着架子,书架该占多大地方还占多大。另一种是把书直接挪进储藏间,架子上腾出的空间能放新书。DeCoPrune选的是后一种,它之所以能把生成速度提到4倍以上,原因就在这里——注意力计算要对付的历史长度是真的变短了,并非只在表面做样子。
但光有一套方法,没法验证它到底管不管用。论文团队于是还做了另一件事:造了一张专门的考试卷。
CMBench:一张专门考“记不记得”的试卷
论文作者指出,眼下有个挺别扭的情况:现有那些评测视频生成的基准,基本上只盯着画面是否好看、动作是否顺畅,或者大概看看跟历史内容合不合得上,却没人专门去问一句“我先前给你看过的那个具体东西,你还记得吗”。
这个缺口很关键。论文里有一张图表明,画面质量指标(比如VBench里的subject consistency、background consistency)在压缩比不断上升时几乎保持不变,但真正衡量“能不能认出之前见过的东西”的指标(DINO分数)却在悄悄暴跌。换句话说,一个视频可以看起来很流畅很自然,同时却已经把之前的关键信息忘得一干二净,普通的质量评测完全发现不了。
比方说,一个人失了忆,可说话做事都还正常,跟他平常聊天压根瞧不出毛病,只有你特意问“昨天咱俩约的那事你还记得不”,他才会露出破绽。常规的视频质量指标就相当于这种“平常聊天”,压根问不到点子上。
论文团队于是搞了一个叫CMBench(Context Memory Benchmark,上下文记忆基准)的新考卷。它包含58段大约一分钟长的视频情境,一共设计了116个叫“Reappear”或“Revisit”的延续任务。
Reappear任务:让AI续写视频的时候,把此前出现过的某个具体人物或物体再放回画面,并且得是同一个东西(比如同一个绿色条纹的保温杯),随便找个同类物体来凑数不算。
Revisit任务:先让镜头从场景A转到场景B再转回A,然后要求续写内容再次转回B,B里有一个显眼的物体作为评判标准。
任务素材有两个来源:其中50段由AI模型MiniMax H3专门生成,事件出现的时间点可以精确控制,这50段贡献了102个任务;剩下8段来自真实世界拍摄,贡献了14个任务。两种素材都用的原因在于,纯AI生成的画面可能带上某种“AI特有的视觉特征”,让评测结果出现偏差,掺入实拍素材是为了交叉验证,看结论是不是只在合成画面里才成立。论文附录按来源做了拆分对比,两类素材上DeCoPrune都稳定压过其他压缩方法,说明这个结论不是碰巧。
任务完成得好不好,论文的评分流程分三步:先用开放词汇物体检测模型OWL-ViT在生成的每一帧里锁定目标物体,再由图像分割模型SAM2把目标物体从背景中精确抠出,最后用视觉特征提取模型DINOv2计算抠图与原始参照图之间的相似度分数,整段续写视频里取最高分作为该任务得分。这套“先抠图再比相似度”的路子,借鉴的是图像生成领域评估“主体一致性”的经典做法。
除DINO分数外,论文还定义了指标PR(Pruning Ratio,剪枝比例),用来衡量历史KV缓存累计被削减的幅度:把所有层、所有注意力头、所有生成段落里实际保留的历史token数量加总,除以不压缩时的总量,再用1减去这个比值。它看的是“累计削减量”,并非某一时刻的峰值显存节省。
实测:记忆砍掉85%,性能几乎没损失
所有环节放到一起测,还是数据最说明问题。
主实验跑在骨干模型LingBot World v2上(选它的理由后面再说)。DeCoPrune剪掉85.43%的历史KV缓存后,DINO分数为0.6701,完全不压缩的FullKV是0.6803,两者只差0.0102分,基本可以忽略;生成速度则提升到4.14倍。
再看其他方法在相近压缩比下的成绩:压缩比在86%附近的TempDiff,DINO分数0.6229,比DeCoPrune低0.0472分。压缩更狠的Streaming(94.37%)和DummyForcing(98.03%),DINO分数掉到0.4592和0.4461,记忆准确度几乎丢了一半。
论文还给出一个增强版DeCoPrune-HS(HS即Head-Specialized,按注意力头区分处理)。它借用了另一篇论文ForcingKV的思路,把模型中的注意力头分成“动态头”和“静态头”:动态头走DeCoPrune的筛选逻辑,静态头直接用最简单的Streaming策略。压缩比因此升到86.19%,DINO分数反倒涨到0.6783,与FullKV的差距缩小到0.0020分。
分头处理为什么能多赚一点?论文的解释是,不同注意力头在模型里的角色本就不同:有些头天生只盯最近的画面,留给Streaming的简单策略就够;另一些头擅长捕捉跨越时间的长程关联,得交给DeCoPrune的精细筛选才能发挥作用。按头的特长分派任务,比一套策略硬套所有头更划算。
有个细节值得展开:论文为什么把LingBot World v2定为主要测试的骨干模型,而不用更常见的Self-Forcing、Causal Forcing或LongLive?
团队为此专门排查过。他们发现,如果连“完全不压缩”时模型自己就记不住一分钟前的内容,那压缩带来的信息丢失和模型能力不足带来的信息丢失就分不清了。实测中,Self-Forcing、Causal Forcing、LongLive在完全不压缩条件下DINO分数分别只有0.2609、0.2627、0.2608,LingBot World v2能到0.6803。前三者低到这个程度,说明它们本身就“记不住”一分钟前的东西,跟缓存压不压缩关系不大了。这就像测保险箱的防盗性能,可箱子本身的锁是坏的,东西一碰就掉出来,那“防盗”的真实效果根本测不出来。论文因此选了记忆能力本身过关的LingBot World v2作为主战场。
另外两个方法论文也没放过,在LongLive上单独补了一组10秒短上下文实验(18个案例),DeCoPrune仍以57.25%的压缩比和0.5880的DINO分数领先其他压缩方法。可见这套思路并非只绑定在某一个骨干模型上才有效。
细节拆解:三个关键设计是否真有用
主结果之外,论文还做了几组拆解实验,逐一验证每个设计环节是真有贡献还是凑数。
第一个问题:探测时间步选在哪一步、阈值γ设多少、要不要精调?
论文测了三个不同的探测步骤,在一个相当宽的压缩比范围内,三种选择的DINO分数都差不多,只有压缩比特别激进的区间才明显掉分。这说明方法对“选哪一步做探测”不算敏感,不必像炒菜放盐那样精确到克,大致取中间某一步就够用。
第二个问题:缓存里保留的历史画面,位置编码要不要特殊处理?
模型里每个画面块都带一个“位置编码”(RoPE),用来告诉模型这块画面处于时间线的哪个位置。问题是,一旦中间大量内容被压缩掉,保留下来的老画面与当前正在生成的画面之间,时间位置差距会变得异常大,模型就很难“定位”这段老记忆究竟对应什么时刻。
论文参照了另一项研究给出的方案:把老画面的时间坐标压进一个固定的“虚拟跨度”,而离当前最近的几帧仍保留原本的真实位置。可以拿相册打比方——一本厚相册被抽掉一半照片,剩下的若还按旧页码摆放,翻看时页码跳得厉害,乱得很;重新排一套紧凑页码,把空缺处“抚平”,翻起来就顺了。不过最近那几页照旧不动,因为那是最常翻的部分。
实测数据挺能说明问题。FullKV(完全不压缩)加上这套重编码后,DINO分数从0.4385升到0.6804,净增0.2418分。原因在于FullKV保留了全部历史,新旧画面之间的位置落差本来就最大,重编码带来的收益自然最突出。DeCoPrune-HS靠这个处理拿到0.0470分的提升。至于只留最近画面的策略(比如Streaming),根本没有远距离旧画面需要重编码,所以变化很小,甚至略有下降。
第三个问题也最关键:该留下“难猜中”的画面块,还是“容易猜中”的?
论文为此做了个反向对照实验,把判断逻辑颠倒过来——保留容易被猜中(误差小)的区域,丢掉难猜中的。在接近相同的压缩比(85%左右)下,反向筛选的DINO分数只有0.4512,比DeCoPrune的0.6701低了0.2189分。就算把反向筛选的阈值放得特别宽,仅压缩18.79%的内容(即留下超过80%的历史),反向策略也只拿到0.5621分,仍然明显落后。
这组对照实验是整篇论文最有说服力的证据。它直接说明“保留难猜中的部分”这一方向性判断才是真正起作用的因素,并非压缩比恰好对上才显得效果好。
写在后面
读这篇论文时,让我意外的不是DeCoPrune效果有多好,而是它选用的判断标准本身——一个不需要额外训练、也不需要外部打分模型的“自省式”信号。
一般想让AI判断“什么重要”,第一反应是再训一个专门的重要性评分器,或者引入外部检索和相似度计算。论文却反着走:直接问模型自己,你去噪时觉得这块内容费不费劲?费劲说明有价值,不费劲说明已被别的记忆覆盖。这有点像不问一个人“你觉得这事重要吗”,而是看他回忆时犹豫了多久——犹豫越久,说明这事跟他已有认知差得越远,信息量越大。
还有个细节值得单独说:论文里那张图显示画面质量指标和记忆指标的走势是分离的。常规质量指标一直平稳,记忆分数却悄悄往下掉。这其实在提醒一件更普遍的事——系统“看起来运转良好”和“真的记得该记的东西”,完全可以脱钩。不只是视频生成,任何带长期记忆机制的系统,或许都该单独设计一套“记忆专项考试”,不能只靠整体表现流不流畅来判断。
论文末尾也坦承了局限:压缩效果再好,留下来的缓存仍会随生成时长不断增长,没有硬性上限,显存占用和计算量本质上没有被真正“封顶”。另外,去噪一致性这个信号跟“未来会不会被问到”毫无关系,它只回答“这块内容现在容不容易被猜中”。如果某个此刻容易猜中、却在很久以后某个提问里变得至关重要的细节,这套方法可能低估它的价值。这就留下一个有意思的开放问题:记忆的取舍,该由“现在好不好猜”决定,还是由“将来会不会被问起”决定?这两者的张力,恐怕不只存在于AI系统里。
Q&A
Q1:DeCoPrune是什么?
A:DeCoPrune是一种面向自回归视频扩散模型的KV缓存剪枝方法,无需额外训练。它对比去噪过程中间预测与最终结果的差异,据此判断某段历史画面是否容易被已有记忆猜中——容易猜中的丢掉,难猜中的留下,从而在保持长程记忆的同时大幅压缩历史缓存。
Q2:CMBench和普通视频质量评测有什么区别?
A:CMBench专看AI是否“记得”此前视频中出现过的具体人物或物体,设有Reappear(重新出现)和Revisit(重访场景)两类任务。VBench等普通质量评测只关注画面流畅度与一致性,测不出AI是否已经忘掉关键历史信息。
Q3:DeCoPrune能压缩多少缓存,效果损失大吗?
A:主实验中,DeCoPrune剪掉85.43%的历史KV缓存,生成速度提升4.14倍,记忆准确度(DINO分数)只比完全不压缩低0.0102分,几乎可以忽略。增强版DeCoPrune-HS压缩比更高(86.19%),分数差距进一步缩到0.0020分。