想象你是个送外卖的骑手,每天穿梭在同一片街区。你路过一栋写字楼门口的那棵树,几分钟后拐了个弯去送另一单,二十分钟后又骑回这栋楼。这时候如果你发现那棵树突然变成了一面墙,你肯定会愣住,这不对劲啊,刚才明明是棵树。
这种"回到老地方,发现东西没变"的能力,对人来说是本能,但对AI生成视频的"世界模型"来说,是个大难题。
一个能根据相机轨迹生成连续视频的AI系统,如果你让它控制镜头在一个虚拟场景里走一圈,再走回起点,它生成的画面大概率会"认不出"自己刚才画过的东西。这篇来自阿联酋穆罕默德·本·扎耶德人工智能大学的论文,就是在死磕这个问题。他们管这个系统叫LOCI。
记忆这件事,到底难在哪
先说清楚"世界模型"在干什么。
世界模型*:一种能根据动作或相机轨迹,持续生成逼真视频画面的AI系统,相当于给AI装了一双"能想象接下来会看到什么"的眼睛。
这类模型现在能做到让你在虚拟场景里"走动",镜头往哪转,画面就实时生成到哪。听起来很酷,但问题出在"记忆"上。
你往前走,看到一棵树,然后转身走开,过了半分钟又折回来,这棵树应该还在原地,长得还是那个样子。这要求模型做两件事:第一,得把之前看到的画面存下来;第二,当你回头的时候,得准确地把"刚才这个位置看到的是什么"给翻出来,而不是随便编一个。
存储和检索,这两件事放在一起看似简单,做起来却互相打架。
业内目前主要有两条路子。第一条叫"键值缓存",说白了就是把每一帧画面的详细特征都存起来,需要的时候直接去翻。
键值缓存*:Transformer模型里用来存储历史信息的一种机制,把每个历史时刻的关键特征(键)和对应内容(值)都保留下来,后续生成时可以直接"查表"调用。
这条路的好处是记忆精确,一棵树就是一棵树,细节不会丢。但问题是,视频越长,存的东西就越多,显存很快就扛不住了。
第二条路叫"循环记忆",用一个固定大小的"状态"去不断吸收新信息,滚动更新。
循环记忆*:用一个大小固定的向量或矩阵来持续总结历史信息的机制,新信息来了就融合进去,旧信息被压缩或遗忘,占用空间不会随时间增长。
循环记忆的好处是空间占用恒定,不管视频多长,记忆占用都不涨。但代价是:具体的某一帧画面,一旦被压缩进这个"状态"里,就再也捞不出来了。这就好比你让一个人用一句话总结一整本书,总结得再好,书里某个人物说的某句原话,你也别想从这句话里逐字还原出来。
论文作者的洞察是:为什么非要二选一?能不能让这两种记忆同时存在,各司其职,又互相配合?
这就是LOCI的核心思路:一半的网络层保留详细的键值缓存,另一半换成循环记忆,然后让循环记忆的"读出结果"去影响历史缓存层查找信息时用的"查询",让两种记忆真正联动起来,而不是各管一摊。
两条记忆线,怎么拧在一起
LOCI的骨架建立在Wan2.2-TI2V-5B这个50亿参数的视频生成模型基础上,一共30个transformer模块。
transformer模块*:深度学习中处理序列信息的基本单元,通过"注意力机制"让模型在生成当前内容时能参考之前的相关信息。
论文的做法是,把这30个模块分成两拨,各15个。
一拨是"混合模块",在处理当前这一小段画面(论文里叫"chunk",一个chunk是5帧)时用常规的注意力机制,同时还接入一条循环记忆通道,这条通道用的是Kimi Delta Attention(简称KDA)。
Kimi Delta Attention(KDA)*:一种高效的循环记忆机制,靠一个固定大小的状态矩阵存储历史信息,每次新信息进来时,既会"部分遗忘"旧内容(保留机制),也会"修正"已有的关联(增量修正)。
另一拨是"历史注意力模块",保留传统的键值缓存,能直接访问之前所有被保留下来的画面细节。
这里有个关键设计:混合模块里的循环记忆读出结果,会和当前画面的特征加在一起,形成新的特征流。这个特征流往下走到历史注意力模块时,历史模块是用这个"融合过的"特征去生成查询,再拿这个查询去历史缓存里检索。
换句话说,循环记忆不是独立存在的,它悄悄地改变了后续模块"该去找什么"这件事。
这个设计思路,拿你找钥匙这件事来类比最合适。假设你家里有个储物间,堆满了杂物(这对应键值缓存,什么都存着,但找起来费劲)。同时你脑子里还有个模糊印象:"钥匙好像跟最近买的那把伞放在一起"(这对应循环记忆,压缩了的、不精确但有方向性的线索)。
如果没有这个模糊印象,你翻储物间得挨个翻,效率极低,甚至可能翻漏了。如果只靠这个模糊印象,你压根不知道钥匙具体长什么样、放在哪个抽屉的第几层,因为细节早就被压缩掉了。
LOCI做的事情,就是让这个模糊印象去"指挥"你翻储物间的方向,先去那几个可能的抽屉找,而不是瞎翻。这样既保留了储物间里的完整细节(历史缓存),又靠模糊印象(循环状态)大幅提升了找到钥匙的效率和准确度。
相机朝哪儿转,记忆往哪儿存
但光有"两条线"还不够,还得解决一个更麻烦的问题:循环记忆怎么知道该把什么和什么联系起来?
一个很朴素但容易被忽略的事实是:空间上的相关性,不等于时间上的相关性。
你十分钟前看到的一面墙,可能和你现在正对着的这面墙是同一面,哪怕中间隔了很久、拐了好几个弯。但如果只按"时间远近"去组织记忆,系统很容易觉得"十分钟前的东西不重要了",从而丢掉关键信息。
论文的解法是用相机的投影几何信息去给记忆"定位"。他们用了一种叫PRoPE的技术。
PRoPE(Projective Rotary Position Embedding)*:一种把相机的位置、朝向、镜头参数编码进注意力计算过程的方法,让模型在处理画面特征时,能感知到"这个画面是从哪个角度拍的"。
具体来说,循环记忆里存、取信息时用的查询(query)、键(key)、值(value),都会先经过相机参数的变换,相当于给每一条记忆打上了"这是从哪个机位拍的"这个标签。这样一来,哪怕两次观察隔了很久,只要相机位置和朝向相近,记忆系统也能把它们关联起来。
论文还做了个验证实验很有意思:他们试图从训练好的循环记忆状态里,用一个简单的线性模型去反推相机当时的朝向角度(yaw)。结果发现,R?达到了0.946,中位误差只有3.6度。
这说明什么?说明这个压缩后的状态,并没有把相机的方向信息丢掉,而是以一种可解码的方式保留了下来。作为对比,如果去掉PRoPE这个相机编码,这个解码能力会大幅下降,R?掉了0.646之多。
这就好比你蒙着眼睛在一个房间里走,但手里一直攥着一个指南针。哪怕你看不见周围长什么样,指南针告诉你的方向信息,能帮你判断"我现在站的位置,跟十分钟前站的位置,朝向是不是差不多"。如果没有指南针(也就是没有PRoPE这种相机编码),你光凭感觉去猜方向,很容易错乱,系统也就没法准确判断"现在该去调取哪段记忆"。
遗忘这件事,得按"时间"来,不能按"字数"来
还有一个容易被忽视但很重要的细节:记忆系统什么时候该"忘记"一些旧信息?
KDA原本的设计是每个token(可以理解为画面里的一个小块)都单独算一次"保留还是遗忘"。这在处理文本的时候没什么问题,因为文本是一个词一个词顺序出现的,词的顺序本身就带有时间信息。
但视频不一样。一帧画面会被切成几百个patch(图像块),这些patch是同时出现的,没有先后之分。如果按token逐个做遗忘衰减,那同一帧里排在后面的patch会被保留得更久,排在前面的反而很快被"冲淡",这其实是被图像的排列顺序(光栅顺序)误导了,跟真实的时间流逝毫无关系。
论文的解法是:遗忘这件事,一个chunk(5帧画面)只做一次,而不是每个token都做一次。具体内容的"增量修正"还是按token逐个来(这样能保证记忆更新的精细度),但"要不要遗忘"这个决策,是整个chunk统一做的,基于这个chunk的平均特征来算。
这个区别乍一听挺技术化,但换个场景想想就明白了。假设你在读一本书,每翻一页就决定"这一页的内容该淡忘多少"。正常人不会按"这一页第几个字"来决定遗忘速度,那没有意义,字的位置和内容重要性无关。合理的做法是按"读完这一页之后,这一页整体上该淡忘多少",这是跟着时间走的,不是跟着排版走的。
论文做了个对比实验验证这一点。他们训练了一个按token逐个遗忘的版本,拿来和按chunk遗忘的版本对比。短时间内(8到20秒)的重访,两者差别不大。但当时间拉长到超过60秒之后,按chunk遗忘的版本在局部一致性上明显更好,差距还随着时间间隔拉大而继续扩大。这说明按chunk统一遗忘,确实更贴近"遗忘应该跟着真实时间走"这个直觉。
效果到底怎么样,数据说话
说了这么多设计思路,到底管不管用?论文在好几个测试场景里做了验证。
第一个是公开的MIND记忆基准测试,相当于给模型看一段"记忆片段",然后让它接着生成后续画面,再跟真实录制的视频做对比。
| 模型 | 参数量 | 是否训练过MIND数据 | PSNR↑ | SSIM↑ | LPIPS↓ |
|---|---|---|---|---|---|
| GIM-World(参考值) | 1.3B | 是 | 13.40 | 0.414 | 0.630 |
| HY-WorldPlay | 8B | 否 | 12.54 | 0.398 | 0.715 |
| Matrix-Game 3.0 | 5B | 否 | 11.69 | 0.373 | 0.666 |
| **LOCI(满历史)** | 5B | 否 | **14.36** | **0.464** | **0.643** |
| LOCI(有限带宽) | 5B | 否 | 13.02 | 0.409 | 0.679 |
PSNR*:峰值信噪比,数值越高代表生成画面和真实画面越接近。
SSIM*:结构相似性,衡量两张图片在结构上的相似程度,数值越高越相似。
LPIPS*:一种基于深度学习特征的感知相似度指标,数值越低表示人眼感知上越接近。
值得一提的是,LOCI压根没在MIND的数据上训练过,是"零样本"直接拿去测试的,结果却比专门在MIND上训练过的GIM-World表现还要好。这个对比挺说明问题,证明LOCI学到的不是某个数据集的特定套路,而是一种更通用的记忆能力。
更能说明架构本身价值的,是论文做的"对照实验":拿一模一样的骨干网络、一模一样的训练数据、一模一样的训练步数(5000步),唯一的区别是一个用LOCI的混合记忆架构,另一个全程用传统的全注意力机制(论文叫full softmax)。结果在有限内存预算下,LOCI的PSNR比全注意力版本高出0.89分贝,在50个测试片段里有44个片段表现更好。这个差距不是靠"存了更多历史"刷出来的,因为两边能访问的历史帧数量是完全一样的,纯粹是架构设计带来的提升。
还有一个长程记忆测试挺硬核的:给两个模型看2到5分钟的真实录制视频作为历史记忆,然后让它们生成剩下的45到60秒,这段时间里相机会回到60秒之前看过的地方。结果在全部四条测试轨迹上,LOCI的表现都明显优于全注意力版本,PSNR领先0.68到1.93分贝不等。论文里配的图很直观:全注意力模型在这种情况下会把场景"换掉",比如把原来的建筑换成新建筑,或者把一棵树直接抹掉;而LOCI能把这些细节准确地复原出来。
显存和速度上的账
除了准确度,这篇论文还算了一笔很实际的账:显存和速度。
在"满历史"模式下(也就是不限制能看多远的历史),两个模型的显存占用都会随着生成时长线性增长,直到把GPU显存耗尽。全注意力版本在生成到157秒时就因为显存不够而崩溃,而LOCI能撑到225秒才崩,相同长度下显存少用了大约30%。
原因很直接:LOCI只有一半的层在存储完整的历史键值缓存,另一半用固定大小的循环状态代替,这部分状态不会随着视频变长而膨胀。
而在"有限带宽"模式下(限制只保留一个固定数量的历史帧,比如开头一帧、20帧的"全景库"、最近8帧),LOCI能够以恒定23.6GiB的显存稳定跑完300秒的视频生成,同时速度上也比全注意力版本快,比如处理前40秒的画面,LOCI平均每秒视频要花7.2秒计算时间,而全注意力要花8.1秒。
这个"有限带宽"模式还有个挺巧妙的设计,叫"全景库"。
全景库*:论文中设计的一种有限容量的历史帧存储策略,优先保留那些"视角覆盖范围"和已存帧重叠较少的历史画面,而不是简单按时间远近取舍。
这个设计背后的逻辑是:如果你只按"最近"原则保留历史帧,那些很早之前看过、但视角很独特(比如拍到了某个只在那一刻能看到的角落)的画面就会被直接扔掉,以后想找也找不回来了。全景库的做法是优先保留"信息增量大"的旧画面,哪怕它时间上已经很久远。这其实又是一次在空间相关性和时间相关性之间的权衡,论文反复在强调这件事不是巧合,是贯穿整个设计的核心矛盾。
局部一致性:看不见的细节也要抓住
论文里还有个挺细致的发现,值得单独说一说。
整帧画面的平均误差(比如PSNR、LPIPS)有时候会掩盖一些局部的严重问题。想象一下,一帧画面99%的区域都生成得很好,PSNR看起来很漂亮,但偏偏画面里一个很显眼的物体,比如门口那棵树,凭空消失了。这种局部错误,整体平均指标是很难体现出来的。
为了抓住这种问题,论文设计了一个额外的度量:在重访的画面里,用DINOv2提取特征,找出生成画面和真实画面差异最大的5%的局部区域(也就是最糟糕的那部分),专门看这部分的误差。
DINOv2*:Meta开发的一种自监督视觉特征提取模型,能在没有人工标注的情况下学会理解图像的语义内容,常被用来衡量两张图片在内容层面是否一致。
结果显示,在这个"最糟糕局部区域"的指标上,LOCI相比全注意力版本有显著优势(差值-0.073,统计上非常显著),13个有这类重访场景的测试片段里有12个LOCI表现更好。但有意思的是,如果只看整帧的LPIPS,两者差别并不明显。
这说明两个模型的差距,主要体现在那些容易被忽略的局部细节上,比如物体突然消失或变形,而不是整体画面的模糊程度。这恰恰是循环记忆在起作用的证据:论文还做了个消融实验,如果在推理时把LOCI的循环状态每个chunk都重置一次(相当于强行关掉循环记忆的跨chunk传递能力),这个局部误差指标会明显变差,画面也会变得更模糊。这说明循环状态不是摆设,它真的在短时程的一致性上出了力。
写在后面
读这篇论文时,我一直在想一个问题:为什么"记忆"这件事,在AI视频生成里会变得这么棘手?
人类记东西其实也在做类似的压缩,你不会记得十年前某一天吃的每一顿饭的细节,但你大概率记得那年搬家时房间的布局。人脑的记忆机制本身就是"压缩+索引"的结合体,不是简单的录像带。LOCI这种架构设计,某种程度上是在用工程手段模拟一种更接近人类记忆运作方式的东西:既有模糊的、方向性的整体印象(循环状态),又有在被提醒后能精确调出的细节(键值缓存)。
论文里那个"按chunk遗忘而不是按token遗忘"的设计,其实点出了一个容易被忽略的陷阱:模型的内部机制很容易被数据的组织方式(比如图像被切成patch的顺序)带偏,而不是真正按照任务本身的逻辑(时间流逝)去运作。这种"表征和语义脱节"的问题,恐怕不只存在于视频记忆这一个场景里。
还有一点让我觉得挺扎实的,是论文反复强调"这不是靠存更多历史刷出来的"。在同样的历史访问预算下做对照实验,这种较真的态度,比单纯堆参数、堆数据更值得尊重。
如果有一天,AI生成的虚拟世界能做到"你随便怎么逛,回头看到的东西都严丝合缝",那种体验会不会跟你第一次玩开放世界游戏时的惊讶感很像?只是这次,惊讶的理由反过来了,不是"这个世界好大",而是"这个世界,它真的记得我来过"。
Q&A
Q1:LOCI是什么?
A:LOCI是一种为视频世界模型设计的混合空间记忆架构,一半网络层用传统键值缓存保留历史画面细节,另一半用相机几何信息驱动的循环记忆压缩历史上下文,两者通过特征流联动,让模型在相机重访旧场景时能更准确地还原画面。
Q2:LOCI和传统全注意力模型相比有什么优势?
A:在相同数据、训练步数和历史访问预算下,LOCI在MIND记忆基准上PSNR比全注意力模型高0.89分贝,显存占用在相同生成长度下减少约30%,还能以恒定显存支持300秒的长视频生成,而全注意力模型显存会随时长不断增长直至崩溃。
Q3:LOCI为什么要用相机投影几何信息来指导记忆?
A:因为场景的空间相关性不等于时间相关性,很久之前看到的画面可能和当前视角高度相关。论文用PRoPE技术把相机位置朝向编码进循环记忆的读写过程,实验证明这让记忆状态里的相机朝向信息可被线性解码,R?达到0.946。







