AI视频生成模型:为何绕回同一路口画面就对不上?
你有没有玩过那种开放世界游戏,走出一个房间再绕回来,发现墙上的画突然换了个方向,或者原本放在桌上的杯子凭空消失了。这种违和感会让人瞬间出戏,因为我们对"同一个地方应该长一个样子"这件事有着根深蒂固的直觉。现在把这个问题丢给AI视频生成模型,让它凭空"想象"一段你在虚拟世界里行走的视频。你从一个十字路口出发...
开放世界游戏里常有这种体验:走出一个房间再绕回来,墙上的画换了个方向,或者原本摆在桌上的杯子凭空没了。人一下子就被拉出戏了。说到底,是因为大家默认同一个地方就该长同一个样子。
把这个场景丢给AI视频生成模型,让它凭空“想象”一段你在虚拟世界里行走的画面,问题就来了。你从十字路口出发,逛一圈,三分钟后再回到这个路口,理想状态下AI画出的路口该和出发时一模一样。可大部分模型做不到,它们会把这个路口画成一个看着像、其实对不上的新地方。
这不怪AI不聪明,症结在训练方式上。MBZUAI的论文《Memorizon: Training World Models Beyond Their Context Window》把这个死结拆开讲了一遍,还给出了一条挺巧妙的解法。
**AI为什么记不住几分钟前的事**
要弄明白这个问题,先得知道这类视频生成模型是怎么训练的。
它们大多跑在Transformer架构上,靠“注意力机制”处理信息:生成下一帧时,模型会回头翻之前的所有帧,算出每一帧和当下这一刻的关联有多强,再把这些信息综合起来做决定。
Transformer*:这是一种深度学习架构,靠注意力机制运转。处理序列数据时,模型能随时把目光投向序列中任何一个位置的信息,不必再像老式循环网络那样,只能按顺序一级一级往下传。
麻烦就出在“回头翻”这个动作的成本上。视频片段长度翻一倍,注意力机制要算的关联数量就变成原来的四倍——每一帧都得和其他每一帧扯上关系,这种平方级增长的计算量叫做二次方复杂度。
二次方复杂度摆在那儿,训练用的视频片段一般只有几秒到几十秒。可模型部署到实际场景里跑起来,用户往往让它连着生成好几分钟的内容。尴尬的局面就这么出现了:训练时模型压根没见过“几分钟前的事还得记住”这种情况,上线后却被要求做到。
论文给了一组很扎实的数据。他们用虚幻引擎5渲染的训练语料里,统计了相机真正“离开又返回”同一地点的情况,最短间隔是13.25秒;判定标准再严一些,这个数字会被推到28秒以上。而他们常用的训练片段只有10秒长。
这意味着什么?没有任何一条训练样本同时装着“离开”和“返回”这两个瞬间。模型从没被明确告知:“看,这就是同一个地方,你画的时候得保持一致。”它能不能学会这件事,全靠自己瞎猜。
打个比方,教一个孩子认人,每次只给他看半张脸,而且每次都是陌生人的半张脸,从不拿同一个人的两张照片让他对比。这孩子长大后能一眼认出老朋友吗?大概率不行。因为从来没人要求他“记住并认出”,训练材料里根本没有这种配对练习。
**直接拉长训练窗口为什么行不通**
最直觉的解法似乎是:短片段不够长,那就把训练片段拉长,覆盖到几分钟。
论文明确否决了这条路,拦路的还是二次方复杂度。训练窗口从10秒拉到30秒,显存需求大约是原来的三倍,这个数字放到实际工程里相当致命。更讽刺的是,论文统计发现,就算真拉到30秒的窗口,里面完整包含一次“离开再返回”的样本占比也只有3.8%。三倍显存花出去,换来的有效训练信号少得可怜。
有人会说,那就用稀疏注意力或者历史压缩技术把计算成本降下来。这些技术确实能让处理长序列更便宜,但论文点出一个关键问题:它们改变的是“处理每个token的成本”,不是“一条训练样本能关联哪两次访问”。打个比方,厚笔记本换成轻便的电子笔记,翻页是快了,可你压根没在笔记里记下“第一次路过这里”和“第二次路过这里”的对照关系,电子笔记再轻便也帮不上忙。
**Memorizon的核心思路:把监督的跨度和注意力的跨度拆开**
论文作者的洞察很关键:训练样本得跨越很长的时间跨度,才能捕捉到“返回”这件事;但模型算注意力的时候,并不需要把这段跨度里的每一帧都塞进去算一遍。
这话听着有点绕,换个角度就清楚了。你要证明“我今天走的路线最后回到了起点”,不必把路上拍的每张照片都摆出来,起点的照片,加上你记得的几个关键地标,就够证明了。
Memorizon就是这么做的。一条训练样本可以覆盖任意长的时间跨度,十几秒到几百秒都行,但真正参与“打分”——也就是计算损失、指导模型学习——的只有这条跨度里最后k个片段。跨度中间那些没被打分的历史内容,不会被完整转换成token塞进序列里。
chunk(片段)*:论文的做法是把视频的隐变量序列分段处理,分出来的每一段就是一个chunk,可以理解为若干帧画面被打包成的最小处理单元。
替代的做法是,每个被打分的片段主动去历史里“检索”和自己最相关的K个片段,所有被检索片段的集合叫一个“记忆库”(bank)。这个库的大小有严格上限,最多是k乘以K。训练样本跨越10秒还是400秒,库的大小都不会失控增长。
整篇论文最巧妙的地方就在这里:它把“需要覆盖多长的时间”和“模型要处理多长的序列”彻底解耦了。不这么做会怎样?要么只用短片段训练,模型永远学不会跨越长时间的一致性;要么硬着头皮上长序列训练,接受显存和计算量的爆炸式增长。Memorizon让两头都占了便宜:时间跨度随便拉长,序列长度却被钳制住。
这好比写一本几十万字的小说,出版社却规定每次交稿字数有上限。笨办法是硬塞,把几十万字压成几万字交上去,内容必然失真。聪明的办法是:每次只交最后几章的完整内容,但在这几章里主动引用前面章节的关键情节片段,比如某个伏笔、某个人物的性格描写。读者看完最后几章,依然能感受到整部小说的连贯性,而出版社收到的稿子字数始终没超标。
**检索的是哪些片段,依据什么来挑**
要从历史里拣出“相关”的片段,先得定个尺子,说清楚什么叫相关。论文把相机的“共视性”当作尺子,说白了就是看两幅画面有没有照到同一片空间。
具体用了两条线索:一条叫视锥重叠度(frustum overlap),另一条叫姿态距离(pose distance)。
视锥重叠*:镜头能看到的范围就是视锥,好比手电筒打出的光锥。视锥重叠度算的是,眼下要生成的画面视野,有多大比例落在候选历史帧的视野里,取值在0到1之间。
姿态距离*:算的是两台相机位置和朝向差多少,相机中心点之间的距离要算,两个朝向之间的夹角也要算,转15度大致相当于挪动4米的权重。
论文做了一件挺实在的事:拿真实画面的相似度(用余弦相似度衡量)去检验这两个指标到底顶不顶用,没有因为理论上说得通就直接认定有效。结果显示,单用视锥重叠度表现平平,只到理论最优表现的47.4%,问题出在不少候选帧会“撞分”——只要候选帧把当前画面整个包住,重叠度就顶到1,再没法分出谁更合适。单用姿态距离能到55.9%,起作用的主要是角度差异这一维;要是只看相机位置、不看朝向,效果一下掉到19.8%,原因是这些虚拟相机转动的幅度比移动的幅度大得多。
最后论文把两者合起来,用重叠度减去一个加权的姿态距离,组合分数能到57.2%,已经贴近理论上限。这个结果本身就挺有启发:只看单一维度的几何线索都有盲区,重叠度分不出谁离得更近,距离看不出谁拍到了更多共同画面,两者互补才靠得住。
这让人联想到找路时的两种办法。一种是认地标——“我看到那座红色的桥了,说明我离某个地方不远”,跟重叠度类似,判断的是你看到的东西和目标地点有多少交集。另一种是看指南针和步数——“我往北走了两百步”,跟姿态距离类似,判断的是你和目标地点的相对位置关系。只靠地标,容易被长得像的建筑骗了;只靠步数,中途绕了弯路就会算错。两种办法一起用,才能比较靠谱地判断“这是不是我要找的那个地方”。
**记忆库如何共享,又怎样确保信息不丢**
训练时一条样本包含k个被打分片段,各片段分别检索自己的top-K候选帧。如果每个片段都把检索结果直接拼进序列,序列长度会随片段数量线性上涨,老问题就又出现了。
论文的解法是让所有片段共用一个记忆库,库里存的是这k个片段各自top-K候选的并集。构建训练样本时,这k个片段对应的相机位置已经全部确定,所以并集可以提前一次性算好,所有片段共用这一份;每个片段该读库里的哪些条目,由一个“掩码”机制来控制——掩码就像一张权限表,规定每个片段只能看到跟自己真正相关的那部分记忆。
掩码(mask)*:注意力计算里用来控制“谁能看谁”的技术手段,给不相关的位置打上屏蔽标记,模型计算时就会忽略那些位置。
论文还证明了一个很严谨的性质,叫“共享记忆库是无损的”。意思是,库里存的虽然是k个片段检索结果的并集,但某个片段从这个共享库里再挑自己的top-K时,挑出来的结果和它直接从完整历史里挑top-K完全一样。这个证明保证了“共享”这一工程上的优化不会牺牲任何检索准确性。按论文测算,共享这份记忆相比每个片段各自留一份私有拷贝,每个被打分的隐变量平均只需1.82个槽位,私有拷贝方案则要3.75个槽位,开销省了将近一半。
**位置编码上的小心思:不让模型知道记忆有多老**
Transformer处理序列时,得知道每个元素在序列里的相对位置,靠的是一种叫RoPE的位置编码技术。
RoPE(旋转位置编码)*:给序列中每个位置分配编号的技术,让模型能感知元素之间的相对距离和顺序关系。
论文有个很细节但很重要的设计:记忆库里的所有条目,不管来自多久以前,都共享同一个位置编码索引。第一帧的索引是0,记忆库里的条目统一用索引1,后面的片段才依次往后排。
这么做的结果是,模型根本不知道一条被检索出来的记忆是5秒前的还是5分钟前的,它只知道这是“被检索出来的某个相关记忆”。这个设计还带来一个意想不到的好处:一个只在10秒短片段上训练过的模型,实际运行时却能够读取59秒之前的记忆库条目,并且在相隔20到60秒的返回场景里依然能获得提升。原因就在于模型从没被训练去分辨“记忆的年龄”,它学到的是“如何利用一条相关记忆”这个通用能力,而这个能力不挑记忆是多久以前的。
换个方向,把记忆库按时间顺序编号会怎样?论文同样做了对比实验,结论是喜忧参半:部分指标上,按时间顺序编号能带来小幅提升,可图像质量整体更差。论文给出的解释是,这类按顺序编号的模型更容易机械照搬检索到的画面像素,而非真正理解该位置应有的样子。
**实验结果:与开源世界模型的正面对比**
理论之外还得看实战。论文拿Memorizon去和市面上几个有代表性的开源世界模型正面对比,包括LingBot-World 2.0、DreamX-World 1.0、HY-WorldPlay 1.5、Matrix-Game 3.0、Infinite-World,以及一个设计思路相近的CaR模型。
评测用的核心指标叫Revisit(重访一致性),衡量的是模型两次生成同一个地方时画面的皮尔逊相关系数,简单说就是两次画的像不像。同一段视频里随便两帧也会有一定相关性,所以论文又定义了一个Gain指标,把这部分“天然相关性”扣掉,剩下的才是真正归功于“记忆”的部分。
| 方法 | 起始点Revisit | 起始点Gain | 中途点Revisit | 中途点Gain |
|---|---|---|---|---|
| LingBot-World 2.0 | 0.143 | -0.006 | 0.147 | 0.011 || DreamX-World 1.0 | 0.146 | 0.033 | 0.109 | 0.009 || HY-WorldPlay 1.5 | 0.243 | 0.040 | 0.194 | 0.037 || Matrix-Game 3.0 | 0.254 | 0.075 | 0.283 | 0.089 || Infinite-World | 0.109 | 0.019 | 0.168 | 0.070 || CaR | 0.350 | 0.220 | 0.450 | 0.312 || **Memorizon** | **0.365** | **0.230** | 0.447 | **0.329** |
这组数字里,LingBot-World 2.0在起始点的Gain只有-0.006,最扎眼。说白了,它画出的"返回画面"跟随便两帧之间的天然相似度差不多,没多出什么提升——也就是说,这个模型在"记住这个地方"上基本没起作用,画面看着像只是碰巧。Gain这一栏里,Memorizon和CaR把其他方法甩得很远,论文也直言,目前只有这两个系统表现出了"清晰记忆能力"。
不过两者强的地方不一样:CaR更擅长"回到起始点",毕竟起始画面一直待在注意力窗口里头;Memorizon则在"回到中途经过的某点"上更胜一筹。后者恰恰最考验真记忆,因为中途的点不像起点那样天然被模型"看在眼里"。
论文也没藏着自己的短板:图像质量指标并不占优,主体一致性和背景一致性上HY-WorldPlay 1.5反而更高。作者的解释是,这类指标量的是相邻帧之间的平滑度。一个画面慢慢漂移、一点点偏离原始场景的模型,反倒容易在这类指标上拿高分——它每帧跟上帧都挺像,只是整体在悄悄走样。Revisit指标和画质一致性指标之间的这层张力,挺有意思。
**消融实验揭示的几个关键事实**
论文做了一连串拆解实验,逐项加进检索机制、记忆库、更长的训练跨度,看每一步会带来什么变化。
头一个发现:哪怕只在10秒的短片段上训练,只要加上"每个片段独立检索",重访一致性就会明显提升。模型没见过的场景(训练集里没出现过的地图)和用户上传的真实照片上,提升尤其突出。可见检索机制本身的价值,并不完全取决于训练跨度有多长。
第二个发现有点反直觉:光把注意力窗口拉长、不加检索机制,效果可能更差。论文测了个"全片段互相可见"的宽注意力窗口,在没见过的照片场景里,16个样本中有13个的重访一致性低于原始滑动窗口方法。原因是除第一帧外,宽窗口里能看到的全是模型自己生成的内容。在渲染引擎生成的场景里,自己生成的内容误差还小;可要是起点是一张真实照片,模型每生成一步都会轻微漂移,窗口越宽,等于让模型越多地盯着自己已经走样的历史画面去学,误差被不断放大。
第三个发现关乎"谁来检索"。把检索方式换成Context-as-Memory那种"整个被打分区间共享一次检索",而不是"每个片段各自独立检索",效果会明显下滑,真实照片场景里降幅约三分之一。道理不难懂:一次检索没法同时照顾好几个片段各自不同的视角,大部分片段最后读到的都是为别的视角挑出来的帧,自然用不上。
第四个发现关于训练跨度本身。跨度从100秒拉到200秒,各项记忆指标继续往上走;可拉到400秒,反而掉回100秒的水平甚至更低。论文的解释很扎实:训练跨度一旦足够覆盖大多数"返回"场景的首次访问(论文统计,100秒能覆盖64%的返回,200秒能覆盖84%,400秒能覆盖93%),再拉长只是给记忆库塞进更多没人选的候选项,记忆库的大小在200秒之后就基本不长了。换句话说,跨度是"够用就好"的参数,不是越大越好。
这个发现让我想起健身房里关于训练量的争论。很多人觉得练得越久效果越好,可过了某个阈值,多练的时间只是在消耗恢复资源,并不会多长肌肉;关键不是你练了多久,而是练的内容有没有覆盖到该练的肌群。Memorizon的训练跨度也是同理,一旦覆盖到该覆盖的"返回"场景,再往上加时长就是边际效益递减,甚至倒退。
至于为什么400秒反而画质回升、一致性却下降,论文追到了根源:训练时记忆库和近期片段用的都是干净的真实数据,实际运行时它们装的却全是模型自己此前生成的内容。这种训练和推理之间的差异叫"曝光偏差"。论文专门做了对照实验验证:给模型提供干净的真实历史数据时,无论训练跨度是10秒还是200秒,画质都能逼近真实渲染视频的水平。差距主要来自对自身生成历史内容的依赖,而这个依赖主要通过记忆库这条路径渗透进来。
曝光偏差(exposure bias)*:训练时模型看到的是完美的标准答案作为输入,实际使用时它只能看到自己此前生成的、可能带有误差的输出。这种训练和推理之间输入质量的不一致,会让误差随着生成过程不断累积放大。
**用蒸馏技术缓解训练推理不一致**
针对曝光偏差,论文引入了一套蒸馏方案,灵感来自Self Forcing和分布匹配蒸馏(DMD)这两项技术。
落到操作上,团队先把训练好的完整模型蒸馏成一个轻量版,四步就能出结果。蒸馏时生成器不再拿真实的标准答案当拐杖,而是像正式推理那样,靠自己的输出一段接一段往下滚。产出的片段连同记忆库条目一起,被重新放回训练用的序列结构里做去噪,由教师网络和评价网络共同指导生成器学习。说白了,这是让模型提前习惯一件事:它会犯错,而且得在犯错的基础上继续画下去。
论文也承认,这套蒸馏方案究竟能挽回多少曝光偏差造成的损失,还需要进一步量化测量。这是一个诚实的留白,没有把蒸馏的效果往大了说。
**局限性:这个方法目前解决不了的问题**
论文很坦率地承认了两个边界。
先说场景范围。现有实验都建立在静态场景上,即只有相机在动,场景里的物体一概不动,默认一个路口永远长一个样,这个假设才站得住。可一旦场景里的物体动起来,或者地点本身随时间变化,比如一天中光线不同、季节更替,"重访一致性"这个评价标准就失灵了,因为画得不一样,有可能恰恰是对的。
另一个局限正是前面说的曝光偏差。蒸馏方案只是缓解,并没有彻底解决,究竟缓解到什么程度,论文留给了未来工作。
写在后面
论文里真正让我记住的,其实不是检索机制,而是反复出现的那句"够用就好":200秒是最优点,拉到400秒效果反而掉下来。说到底,这提醒的是,我们常会下意识觉得资源堆得越多、覆盖得越广就越好,可只要任务本身有明确边界,比如多数返回场景200秒内就能覆盖,那么越过这条线的投入就没有回报,还会因为多出更多依赖自身生成内容的环节,把质量拖下去。这种"甜蜜点"思路,放到不少工程决策里都该重新掂量,而不是默认更长、更大、更多就必然更优。
还有个细节我也琢磨了很久,就是位置编码那块,故意不告诉模型记忆库里的内容有多老。选择看着简单,背后却是一种很克制的工程取舍:与其让模型学会"怎么处理不同年龄的记忆"这类复杂的泛化本事,不如把这个信息直接扣掉,逼它只练"怎么用上一条相关记忆"这一件事。信息少给一点,泛化能力反倒更好,这个反直觉的交换挺有意思。
论文里那组曝光偏差的对照实验,也值得单独拿出来讲。喂给模型真实的历史数据,训练跨度再长,画质都能贴近真实视频;可一换成它自己生成的历史数据,画质就开始往下掉,而且大部分损失是从记忆库这条通道渗进来的。记忆机制因此像把双刃剑:模型靠它"记得住",它同时也成了误差累积、自我强化的路子。一边用记忆保住一致性,一边又不让记忆里的错误污染结果,这个平衡怎么找,恐怕是这类长时记忆世界模型接下来要硬啃的问题。
Q&A
Q1:Memorizon是什么?
A:Memorizon是MBZUAI团队提出的一种训练方法,目的是让视频世界模型在超过注意力窗口长度的时间跨度上仍能保持场景一致,做法是让每个受监督的片段各自去历史里检索相关帧,再汇成一个共享的、大小设有上限的记忆库。
Q2:Memorizon如何解决AI视频生成中场景不一致的问题?
A:它把"训练样本覆盖的时间跨度"与"模型实际计算注意力的序列长度"拆开了,训练样本能跨越任意长的时间,但打分只针对最后几个片段,中间的历史内容不直接进序列,改由按相机共视性检索出的记忆库来供给,序列长度因此始终有界,不随训练跨度一起增长。
Q3:Memorizon训练跨度是不是越长越好?
A:不是。实验里训练跨度拉到200秒时记忆效果最佳,再拉到400秒反倒变差。原因在于跨度一旦足够覆盖大部分返回场景的首次访问,继续加长只会多出没人选用的候选,还会加重依赖自身生成内容所造成的画质损失。