乐于分享
好东西不私藏

AI游戏导演Agent的工作正在找人合作贡献中(上半篇)

AI游戏导演Agent的工作正在找人合作贡献中(上半篇)

先放一个Github链接:
https://github.com/leeguicong/FeelingBaisModule
咳咳,相信,观看我文章的读者有相当一部分,都是对AI和游戏领域感兴趣的小伙伴。不然也不会关注这个专职搞这块的我的公众号这么久了对吧。
那么,现在的情况是——我的LBP管线和角色Agent还没彻底搞完!大概完成度都是60%左右。但是整个游戏项目需要的工作量真心很大,这里并不是说代码行数很多,不如说代码行数多我直接交给Codex帮我就行了。但是难的部分往往都是方法,算法,公式,定义,边界这些东西。深入细节基本上很多情况下,LLM真就只能打打辅助当一个工具人来用了。
所以,我对当前导演Agent的工作——首先我知道要完成我心中的这个独立游戏,导演Agent是必须要做的,当前的角色Agent的框架,根本就支撑不起来导演的功能。但是事情也有轻重缓急,至少,我得再花一个月的时间来把之前的坑给填完,把工作给老老实实做完。
因此,导演Agent的工作我就——摸了!(指摸鱼了),寄希望于有感兴趣的读者可以为我的导演Agent添砖加瓦。反正贡献过的人都可以把成果拿来用就是了。
虽说是导演Agent,但是细分拆出来,整个模型的设计训练到部署,一共涵括了好几个派系:第一个派系是Yann 的JEPA派系,第二个派系是SSM派系,Samba是Mamba模型的分支,最后才是大伙儿比较熟悉的Transformer或者DiT。另外,当然这也是加入了一定程度上的悬置思想,所以整个配方,也可以算得上是我之前对于实时AI,抛弃了动力学建模的,传统机器学习的回退版本的一种尝试。
#一个思考的分支点
我虽然经常说悬置,但是我也做过一些思想实验,就是,假如从LLM去延伸一个近似于悬置的功能,而且不做底层颠覆,最合适的做法是怎样的呢?答案就是——承诺—修正”:每一步都先给出当前最优解释,然后允许后续不断推翻、修正、重写;虽然这样很吃Token,但姑且能达到悬置的一些表象功能。
但是对于悬置→体验来说。因为体验的模拟,本质上是在模拟人类认知的过程,在人类认知的环境中,悬置强调的,是人类在面对不确定的环境中如何继续保持生存活动和认知决策更新闭环的行为。换句话说,如果我们这个时候用LLM的语义收敛去替代悬置,那么这种对不确定性的应变,可能从本体论角度就被抹杀掉了。
但是!大语言模型本质上还是一个基于表象的模拟功能,只要模拟的像,说不定也算管用。但更往下,到底能不能模拟到位,就不是我说了算了,是得专门做对照试验。考虑到我本人的思维就是有很强的正向演算的偏置。这个工作我肯定是不做的了。就留个站位坑,看以后谁考古了谁做吧。
所以不管怎么样,在彻底摸鱼之前,我还是会先开个头。以下内容都是我或者其他读者可以顺着这条线添加的方向就是了:
1.数据工程问题
其实从一上来就用V-JEPA2当魔改的模板,我们基本上就可以猜到,他是一个以视频为主轴,其他为辅助的输入数据的框架。在原V-JEPA2的论文里面,提到了他们用Action-Free Video然后差不多是100万个小时的视频来做训练的。
而回到体验的问题,我个人初步的想法是:我们做两段数据集训练。
第一段:我们把所有带有体验性质的视听分镜拆出来。然后划分出来拼凑在一个数据集里面。这里可能需要用到多模态大语言模型去做一些CLIP标签的工作。数据集的子集全部都是根据“情绪”“悬念”之类的标签分类在一起的。这一部分是为了让模型能够强化出来相似数据集里面的潜在特征。
第二段:还是原来的数据集,但是分类方法不再是离散的,而是彻头彻尾以作品为主导。就是一部完整的作品吃进去,减少跨作品带来的语义噪声。以单部完整的作品为数据集的标准。这是让模型学会,一部单部作品所包含的体验结构应该是怎样的。
魔改段:第一阶段的数据工程我们不要求JEPA形成的表征带有语义文本,但是,V-JEPA的训练是不带任何音频通道的。这是一个要我们去魔改的地方。我默认数据集基本上都是带有音频的。
怎么魔改呢?答案是做前置预训练。
第一步:同样是沿用JEPA架构,我把它命名为:Audio-Visual JEPA吧。
这个环节,我们需要准备一种非常特殊的数据集。
我们准备一系列视频,这种视频有一个特征,就是,他是一种敲击一个物体,发起一种声音的视频;还有另一种视频,是一个人类讲话的嘴型在动然后发出声音的视频。
这种专用视频,我们要让模型学习的是:像素变化导致音频变化的物理因果关系。当模型学会所有的物理交互都可能带有某种音频潜在后验观测之后,它就能够分辨出影视作品的声音是怎么来的。
我们之后再把它调整为,让模型理解,影视作品的风格化处理。为什么不直接就加一个音频通道然后开学?因为绝大部分影视作品,他们的音频都是风格化处理过的。是服务于情绪表达的。换言之,如果你没有一个GT,那么模型很可能会无法分清楚它是物理的,还是风格的。所以,建立一个物理基准就很重要了。
#一个分支的思考点
和LLM不同,当一个时序预测的模型的训练,它其实和LLM的scaling law的做法有很大区别。语言的概念是天然适合分布式表征,因为概念和概念的关系是相互依存的。但是时序预测模型不一样,它更多的是压缩:一个状态背后有多少种可能性分支。也就是,我们要求的物理时序预测scaling,背后不是单纯的scaling就可以了,而是变化维度的scaling。
这个结论其实在数据工程上有很强的主导性,换句话说,我们找数据集的时候要有意识地把不同变化维度的数据集给拉出来。如果变化维度不高,那么数据集看似量大,效果也不一定会好。
怎么样才能够真正的做到整个变化维度的覆盖呢?一个可以思考的方向是,要不要围绕着特定的现实世界采集的物理真值数据为主,配合仿真环境的数据为辅(相当于做插值)来形成丰富的变化维度?
2.训练方法问题
在这一步是比较需要强制偏置的手段了。对应到人类的生理偏置的基础上。
首先我先说做法:从训练层开始,我们要加入一个强制性的约束。这个约束——名叫感受野。这是为了模拟人类感受野的特点,因为人类的所有体验,都是建立在感受野的约束上的。
我们先建立一个观测器,我们不会直接输入原始的像素输入。
我们会先默认存在一个中心点,中心点周围的一小块是高分辨率的原始像素输入,外沿的一块是低分辨率(刻意的)的输入,最外沿是Mask的部分。
#一个分支的思考点
其实这个环节,很像最近V-JEPA2.1的分支。V-JEPA2.1虽然没有像我这样提出要引入一个明确的感受野,但是其实他也做了一些类似的工作。区别于原始JEPA的预测Mask任务,它在这里做了一个显式的约束Token的事情,因为原本在V-JEPA2中,不在掩码范围的Token只是服务于上下文提供,它不对掩码Mask部分的Token负责。然后Loss基本上都发生在掩码patch上。在V-JEPA2.1里面,他就是把包括了掩码部分以外的可预测的Token也纳入了Loss训练里面,这样一来,这部分Token就会被强制要求学习为形成对掩码的Token的约束关系。
再通俗的讲,我们想象一下,一张图被切分成了9个小块,并且我们给其中一块加上了Mask。它在训练的时候,损失发生在被掩码的那块里面的Token当中。因为剩余8块是明显可见的。监督流程就说:我懒得管你们了,你们把保底任务保证了就行。反正主要也不管你们事。现在升级为V-JEPA2.1之后,监督流程就说:我要管你们了,我要一个更加稳定的结果,所以你们也要学习一个稳定的损失项。
所以再去看感受野模块,就会发现,这整个思路也是有关联的。毕竟如果我们不把可见的部分Token也拉进来,那么,当中心点移动的时候,他可能就会从可预测的Token变成了被掩码的Token。V-JEPA2.1的工作其实还是偏向于静态的。而在我这里,预训练阶段是一定要训练这种动态的,随着中心轨迹的变动而影响Token预测损失的问题。
而这种观测器,对于音频输入我们也得做一个对应的做法:
不过暂时这个观测器具体实现我还没想好(bushi
但大体的一些物理约束可以先说一下:
1.对多峰阈值/共振峰敏感
2.对音源的空间分布特征敏感
3.对瞬态转折敏感
虽然我是暂时还没梳理出来一个完整有代表性的偏置观测器,不过最终——
进入观测器后,Audio Steaming就不再是一个稠密连续的,逐帧的信号,而是一个带有自然衰减,自然增强的选择性偏置的频谱信号。
在聊了什么样的数据能够进入预训练之后,我们再顺着上述问题来走:
上面的观测器问题,其实遗漏了一个论述:观测轨迹。
实际上,观测轨迹对于JEPA学习的好坏有两个部分组成。第一个部分是低分辨率和高分辨率的偏置约束,第二个部分是观测轨迹本身。观测轨迹如何被生成,是定义JEPA任务能不能学好的关键。
所以说这里要从宏观角度看,JEPA最核心的和其他模型的区别在于,它不是在构建像素级重建/像素级生成,他是在构建一个中间的抽象表征。
而对于抽象表征来说,用回我的术语就是粗粒化,就是把无关细节给去掉,只保留抽象的核心不变量。所以:当我们假定存在一个良好的观测轨迹的时候,在训练的时候他自己就能够迭代出来:如果这个抽象表征是收敛到正确的,那么,它被粗粒化过后(从高分辨率-低分辨率-mask),整个过程,它的Loss应该是不会怎么发生变化的。
然后坦白说观测轨迹问题这里也有比较多的策略,就不细说了,先留白。总之——
假设我们已经有了一个比较明确的观测轨迹,且观测轨迹我们假设为,它必然是能够帮助JEPA收敛——而且是起到正向作用的。但即便如此,训练阶段我们还要解决的问题还是有的,其二是,关于训练的时候,音频patch和视频patch如何被压到同一个Latent里面。
而对于这个问题,前面的前置训练的数据集的流程就来上分了。因为,我们从一开始就没打算让音频去解耦。我的意思是,我们不要去做:视频一个独立的Encoder,音频一个独立的Encoder,这样子的话你是捕捉不到音频在时空patch当中的关联特征的。之前的额外训练的思路,重点要在这里解决:我们要让音频的Latent直接压到像素Token里面去。也就是说:音频在这里被解释为,是时空patch诱发出来的一种额外输出信号。所以反推:前面的Audio-Visual JEPA到底要怎么训练的问题。说白了就是让模型学会,音频信号,是来自于物理世界的因果关系的意思。
最后一个要训练的时候要考虑进去的就是悬置的保留项。
不过我们可以把刚才的训练话题收敛一下,语义上来说,他不再适合被单独的视频或者音频去描述,应该可以被一个物理因果事件Event所描述。
那么,音频和视频,其实是一个潜空间发生的事件的两种不同的投影。
所以不难想象到,对于一个推理的观测,又或者训练期间的数据获取,他都会出现一些错位现象,比如说视频特征到位了,音频特征没到位。音频特征到位了,但视频对不上。因为他们都是共享同一个Latent,但使得这个Latent被支持的证据却是不够的。
一方面,我们可以说要做数据清洗,但这从来都不是我们的目标,我们的目标就是要制造悬置的功能。
这对应的是,现实世界中,人类的观测大部分也都是一个标准的POMDP问题。更多的环境更多的还是视觉特征和音频特征均不到位,甚至连听别人说句话,音频特征自己都不到位。而这些东西也是成为体验的基石。
在影视创作中,所谓的悬念,留白,全部都是基于这种悬置创造的概念,同样的我们也可以把它称之为张力。SSM阶段我还要提一个叫做潜在推理的概念,那个环节会开始衔接LLM。不过现在先不说了。
回过头来看,悬置在这里更像是什么呢?悬置不是一个单一要收敛的目标,他是衔接了JEPA和SSM的中间层,尤其是Mamba模型,其实很重要的任务都是在处理悬置上,并且,后续Decoder层将会利用输出行动来解悬。这是默认的一个流程的构思。
所以写到这里就差不多了,悬置的训练,原则上应该要衔接上SSM层一起写。就不在这一篇展开了。
最后回过头来看训练问题,因为必须先说悬置,然后才能够把话题推回训练阶段的问题。
原则上,我这里保留很多细节不说(因为要细化的话还得花不少时间),但是严格来说这里其实loss不是一个对latent的直接衡量。而是对悬置转化为action动作的衡量。
宽泛的讲,我们其实需要的,是模型学会,表征没有充分形成的时候,和表征充分训练使得loss降低的时候,两种情况的衔接。意思是,有一部分他不是通过训练来降低loss来得到的,有一部分是通过悬置未定项,然后留给action得到的。模型需要的首先是学会区分两种表征如何处理的问题。
也就是说,一个基本的训练方法是:我们要让模型得到action的信号,这个action信号在第一阶段指向哪里并不重要,重要的是,它指的那个瞬间其实就是在做区分了,这个区分可以单独给个Loss。
然后第二阶段,我们再看针对这个区分,他具体指向哪里,是否可以解悬。而对于,细节上,无论是监督学习还是自监督学习我觉得都是可以去考虑的。自监督学习的话更依赖于数据集本身必然有解悬念的素材。如果没有的话更依赖于监督学习来跑通闭环。
在补充了这些需要解决的问题之后,剩余差不多没有提及的部分,则都是和JEPA的训练流程的思路差不多就是了。(虽然已经被魔改的七七八八了笑死)
————————
以上就是我针对整个工程落地的上半部分的想法论述了。好了摸了一天我也是时候润了。不能再拖时间了。
大概至少要等半个月之后我才会补Mamba模型如何衔接JEPA分支。再到下个月才会补Decoder的部分。主要看我能不能提前搞定手头上的工作主要是。