今天看到一则新闻,说 Google DeepMind 发布了一个叫做 GameNGen (英文读音 “game engine”,游戏引擎)的扩散模型,它可以仅用神经网络的生成结果,模拟经典射击游戏 DOOM。
项目网站:https://gamengen.github.io/
视频链接:https://gamengen.github.io/static/videos/e1m1_t.mp4
作为一名未来的游戏设计师,每次看到这类「今天 AI 又取代了创作者」的新闻,我的第一反应总会是愤怒:创作是人类智慧的最高结晶,能做到这种程度的 AI 必然是强人工智能。但显然现在 AI 的水平没有那么高,那么这类宣传完全是无稽之谈。我带着不满看完了论文,果然这个工作并没有在技术上有革命性的突破。不过,这篇论文还是提出了一个比较新颖的科研任务并漂亮地将其解决了的,算是一篇优秀的工作。除了不要脸地将自己的模型称为「游戏引擎」外,这篇工作在宣传时还算克制,对模型的能力没有太多言过其实的描述。
如果不懂相关技术的话,外行人很容易对这篇工作的应用前景产生一些不切实际的幻想。在这篇文章中,我将完整而清晰地介绍这篇工作的内容,再给出我从游戏开发方面和科研方面对这篇工作的评价。
问题定义
看完了这篇工作的展示视频,大家第一个想问的问题一定是:这个模型的输入是什么?是只能随机生成游戏视频,还是能够根据用户的输入来生成后续内容?
答案是,模型可以根据之前的游戏进度及当前的用户输入,输出下一帧的游戏图片。我们来详细看一下该工作对于「游戏」的定义。
论文的第二章详细定义了该工作要完成的任务。作者认为,一个游戏可以由游戏状态、游戏画面、玩家操作集这三类信息组成。游戏状态包括角色血量、装备、地图、敌人等所有影响游戏进程的信息;游戏画面就是游戏屏幕上显示的二维图片;玩家操作集就是移动、射击等玩家所有可能进行的操作。此外,为了让游戏运行,还需要两类游戏机制:如何根据游戏状态生成当前游戏画面的渲染机制;如何根据游戏状态和当前玩家操作更新下一时刻游戏状态的逻辑机制。
而用一个生成模型来模拟游戏时,我们不需要让模型学会游戏机制、状态,只需要让模型根据之前所有的画面和玩家操作,以及当前时刻的玩家操作,输出当前时刻的画面。这样,我们给第一个初始帧和操作,模型就能输出第二帧;给前两帧和之前及现在的操作,模型就能输出第三帧……。也就是说,模型以自回归的方式模拟游戏画面。
给想读这篇论文的读者一点阅读上的提示。论文以「交互环境」$\mathcal{E}$来指代我上文中的「游戏」,以 「交互世界模拟」$q$ 来指代生成模型。在定义 $\mathcal{E}$ 用到的几个字母对应我前文的粗体名词。
在我看来,这篇工作的主要贡献,就是把游戏模拟任务以如此简明的形式清楚定义了出来。怎么把任务做好,纯粹只是工程实现问题。明确了任务后,相关领域的科研人员基本上能猜出这篇工作是怎么实现的了。下面,我们就来看一下论文中分享的实现过程。
GameNGen
用强化学习造数据
本工作的任务是根据某些信息生成下一帧的画面,这种生成某类图像的任务用日益成熟的图像扩散模型技术就能解决了。但是,为了训练扩散模型,本工作有一道跨不过的坎——缺乏游戏画面数据。
为了生成足够多的图片,作者利用强化学习训练了一个玩游戏的 AI。在这一块,作者用了一个非常巧妙的设计:和其他强化学习任务不同,这个玩游戏的 AI 并不是为了将游戏漂亮地通关,而是造出尽可能多样的数据。因此,该强化学习的奖励函数包括了击中敌人、使用武器、探索地图等丰富内容,鼓励 AI 制造出不同的游戏画面。
带约束图像扩散模型
有了数据后,问题进一步缩小:现在该怎么用 Stable Diffussion 这个比较成熟的图像生成模型来根据之前的图片和之前及当前的操作来生成图片。
「之前的图片」和「之前及现在的操作」是输入给图像生成模型的两类额外信息。用专业术语来说,它们是给一个随机生成图像的模型的约束条件,用于让模型的输出不那么随机。而带约束图像生成也是一个被研究得比较透的任务了。
以下内容是写给相关科研者看的,看不懂可以跳过。
先谈怎么让模型约束于之前的图片。本文参考了经典的 Cascaded Diffusion 实现图像约束:将之前的图片过 VAE 编码器,与扩散模型原来的噪声输入拼接。然而,这种约束方式存在分布不匹配的问题:训练时,图像约束来自训练集;推理时,图像约束来自于模型之前自回归的生成结果。为了填平两类图像在分布上的差异,我们需要给所有约束图像加噪,并把加噪程度当成额外约束输入进模型。这种图像约束方法和图生视频的 Stable Video Diffusion 是一样的。
再看模型怎么约束于操作。每个操作都有独特的含义,它和语言中的单词是类似的。因此,我们可以把离散的操作变成嵌入向量,用 Stable Diffusion 处理单词的机制来处理操作。所以,在 GameNGen 的扩散模型中,文本约束没有了,被操作约束取代了。顺带一提,我们要输入之前及当前的操作,它们构成了一个操作序列。我们只要把这个操作序列当成由单词构成的文本,还是用原来 Stable Diffusion 那套处理文本的机制就行了。
此外,该工作还微调了 Stable Diffusion 的 VAE 的解码器,用以提升其在特定数据上的重建效果。这种操作也是比较常见的,比如 Stable Video Diffusion 将图像解码器微调成了视频解码器。
实验及结果
本工作仅对图像约束用了强度为 1.5 的 Classifier-Free Guidance (CFG),没有对操作约束加 CFG。采样用的是 DDIM 采样器,实验表明 4 步采样的结果就足够好了。在单个 TPU-v5 上,模拟模型每秒能渲染 20 帧画面。
扩散模型基于 Stable Diffusion V1.4 训练。输入图像分辨率为 $320 \times 256$。之前图像和操作的上下文窗口长度为 $64$。训练集包含 900M 张图片,要用 128 块 TPU-v5e 训练 700,000 步。
论文还评价了模型的生成质量。由于训练集能够提供当前要预测的帧的真值,因此我们可以用重建误差来反映模型的质量。具体来说,论文展示了表示图像相似度的 PSNR 和图像感知误差的 LPIPS。 重建质量通过两个任务来反映:
- 图像质量:输入之前图像、操作均为数据集(按理说是测试集而不是训练集)里的真值,仅评测当前帧。此时重建质量较好,平均 PSNR 为 29.43,和一般图像经 JPEG 压缩产生的损耗相近。
- 视频质量:给定初始图像和数据集里的之前操作,让模型自回归地生成一段视频。这种情况下每一帧的质量会逐渐降低,如下所示。
除此之外,论文还展示了人类的评估结果:给出两段长度为 1.6 秒或 3.2 秒的游戏视频,分别来自真实游戏和 AI 生成,请人类分辨哪段视频是 AI 生成的。对于 1.6 秒的视频,正确率为 58%
;对于 3.2 秒的视频,正确率为 60%
。
此类评测的最低(最优)正确率是
50%
,因为我们总是可以随便猜一个。
论文总结与评价
信息整理
到目前为止,我已经客观介绍了论文中展示的内容。让我用外行人也能看懂的语言总结一下:
本工作提出的 GameNGen 模型可以根据之前的游戏画面、用户的历史操作、当前操作,在完全不了解游戏机制的前提下,生成包含游戏逻辑(血量、弹药)的当前帧画面。生成画面的模型是一个深度学习模型。因此,需要一个包含了过往操作、真实游戏画面的大型数据集来训练该模型。本工作利用强化学习制造了大量数据。训练用了 128 张 TPU-v5e 计算卡。该生成模型能在单张 TPU-v5 (专门用来做深度学习的计算「显卡」,只租不卖,比价值 25000 美元的 H100 显卡要好) 上能以 20 帧每秒的速度生成画面。模型最多能记住 64 帧,即 3.2 秒内的游戏信息。若将 3.2 秒的生成视频与真实游戏视频比较,人类仅有 60% 的概率分辨出 AI 生成的视频。当然,利用自回归技术反复输入之前生成的画面,模型也能够生成更长的视频,正如本文开头所展示的那个视频。
论文中提及的缺陷
哪怕不懂深度学习,大家也可以根据上述信息,提出自己的看法。当然,在那之前,我们先看一下作者在论文里是怎么描述模型的缺陷的。
作者讲到,GameNGen 受制于有限的记忆。模型仅能获取三秒之短的历史信息,却能在极其长的时间里保持游戏逻辑稳定,这很了不起(怎么讲着讲着又开始夸起自己了?)。但由于模型学到了太多东西,模型会创造短期记忆处理不了的场景,比如角色在某处打倒了敌人,数分钟后又返回打倒了敌人的地方(文章讲了半天讲不出个东西,我替他们总结了一下)。对于这些问题,以当前的模型架构,再怎么加大记忆窗口也无济于事。
面向交互视频游戏的新范式
基于这篇工作的成果,作者还展望了未来:(以下是我对原文的精心翻译,欢迎对比)
如今,视频游戏是靠人类编程实现的。而 GameNGen 表明了以神经网络的权重来描述游戏这种新范式的部分可行性。GameNGen 展示了,在现有硬件上用神经网络模型来高效地交互运行一个复杂的游戏 (DOOM)不是奢望,这样的模型架构与模型权重是存在的。尽管还有很多重要问题要解决,我们希望这种范式能够造福众生。比如说,用这种新范式开发视频游戏的代价可能更小,门槛更低,借此,我们或许能仅通过编辑文本描述或示例图片来开发游戏。这个愿景的一小部分,即在现有游戏上略作调整或创造新行为,也许会在不久的将来就能实现。比如即使拿不到作者的源代码,我们也可能可以把几段游戏截图变成一个可玩的游戏关卡或者基于现有图像创建新角色。这个范式还能带来其他好处,比如严格控制帧率、内存占用不变。路漫漫其修远兮,尽管我们目前还没有探究这些方向,我们还是乐于尝试!希望我们这一小步,会在未来的某天,化为人们享受视频游戏的美好瞬间;甚至更进一步,化为人们使用交互软件系统的点点日常。
作为一个对这段抒情深有共鸣的人,在看论文前,我有千言万语想喷,却找不到切入点。看了这段话,我总算知道该怎么针对性地发表意见了。
锐评
总有人说,AI 要取代人类了。
之前是说 AI 可以代替画师,又是说 AI 能代替人写小说。现在,来说 AI 能够完全模拟游戏了。
我真的很不解:人类的作品怎么会沦落到和现有 AI 的对比了?
我想了很久,为什么我无法容忍「现有 AI 技术能代替人类创作」这种观点。我的核心论点是:1)现有基于深度学习的 AI 无法达到和人同等的智力水平;2)达到人类同等的智力水平,意味着能够理解人类的行为,进而在创作、编程、教学、心理咨询等所有现在看来比较困难的领域看齐甚至超越人类。
详细对深度学习了解了一段时间后,绝大多数人都能推理出深度学习的上限。通过对深度学习应用的种种观察,我们能够用我们脑中的那个「神经网络」,那种基于数据推理现实的能力,预知深度学习的能力上限。深度学习适用于一些数据定义良好,目标定义良好的任务。只要给了数据,给了目标,网络就能学习,甚至涌现出一些意想不到的强大理解、生成能力。
但是,数据不是全部,永远有从大量数据学不到的东西。
那就是人心。
就和无数探讨机器人的作品所展示的一样。
正因为我们是人,所以我们能感知我们生活在这个世界上。我们感受痛苦,所以我们思考,并追逐美好。
无论是穷尽多少数据,复读多少经书也体会不到的;无论是洞察多少规律,拟合多少逻辑也推理不出的,就是人心。
和人心等价的一切任务,是现在的深度学习 AI 做不到的。
有关深度学习是否能达到人类水平,那是技术讨论,我们在别处再谈。如果最终能认同目前深度学习无法达到人类水平,但目前认为「现有 AI 技术能代替人类创作」的话,简单来看有两种可能:
不懂深度学习
不懂创作的难度
而对于一个相关专业人士来说,只能是第二种可能了。所以听到懂深度学习的人讲出「AI 要代替人类」时,我都会下意识地认为他在贬低人类创作的含金量,自然是怒火中烧。不懂创作,就不要妄加评论。
除此之外,还有人明明知道当前 AI 的实力,还要违心地宣传 AI 如何如何,宣传自己的垃圾工作多么有价值。这种人只会为自己的利益考虑,纯纯的坏而已。这种无可救药的坏连讨论的价值也没有。
最后还有一种可能,很多人做研究时,并不会像我这样想这么多。在他们看来,科研就是从现有知识出发,朝外迈一小步。不管这一步是否方向正确,不管这一步有多么小,只要是拓宽人类的知识边界,那就是好的。他们的研究是纯洁的、无私的,不在意有生之年能否看到自己的成果被用上,甚至不在意自己的研究是否真的会被用到,只是为了科研增砖添瓦而已。我不得不承认,这是真正的、高尚的科研。
他们是幸福的,可以不在意眼前的得失。所以,他们可以望着远处高峰,轻松而豪放地说出:「希望我的研究,能化为人们享受视频游戏的美好瞬间」。
然而,这句话,对我而言,是沉重的。如果这种话是我说出来的,那么它不会是期盼,而是矢志不渝的誓言。不是拿着望远镜向远处眺望,不是用手指着地图挥斥方遒,而是用我的脚,一步,一步,踏出来的。
我是各种作品的鼓舞下走过来的,优秀的作品对我而言是神圣的。所以,我希望立刻,亲眼见到更多的好作品。没有对好作品急功近利的渴望,也就说明他们生活中有更加便捷的能量来源。所以我说,真正能以纯洁的心做科研的人,是幸福的人。
把我这些话总结一下,能认为深度学习能代替人类创作游戏,要么是深度学习的信徒,要么是不懂深度学习,要么是不懂创作,要么是坏,要么就是没想那么多觉得有新科研工作就是好事。
有人可能还会说:「我也同意深度学习代替不了人类,但也不能说这些技术就完全没用」。这我非常同意,我就认为大家应该把现在的 AI 当成一种全新的工具。基于这些新工具,我们把创新的重点放在如何适配这些工具上,辅助以前的应用,或者开发一些新的应用,而不是非得一步到位直接妄想着把人类取代了。比如,根据简笔画生成图片就是一个很好的新应用啊。
回到这篇文章的锐评上来。一上来,标题就写着《扩散模型是实时游戏引擎》。其实这是一个在顶级计算卡上每秒生成 20 张低分辨率图片的模型,这真的是我们认为的实时吗?作为一个游戏引擎,你能修改游戏机制吗?哦,我对引擎的理解有误,这不是游戏开发引擎,而是一个运行游戏的引擎。那踏踏实实叫做「游戏模拟器」不好吗?标题取得夸张一点,想吸引大家注意,能够理解,不多讲了。
文章主体部分都是客观陈述,写得非常清晰,我读起来也很舒服。本来都准备把「锐评」改成「简述」的,看完作者最后那段对未来的畅想后,一阵无名火在我心中燃起。通过「我们或许能仅通过编辑文本描述或示例图片来开发游戏」这段话,我感觉这是作者是几个对游戏制作质量没有那么高要求的人。可是,就是这样的人,却能写出「路漫漫其修远兮,尽管我们目前还没有探究这些方向,我们还是乐于尝试!」这说明他们可能是真心热爱游戏的玩家。那为什么,为什么只做出了这种程度的工作呢?900M 张图片,128 块卡,别说爱好者,就是一般的大学实验室,都难以跟进这篇工作,这是想要给设计师、爱好者开发新工具的态度吗?没有其他更加贴近用户的项目了吗?好,你说你们以长期的科研为主,这只是这个方向的初步尝试,你们重心在科研上而不是提供游戏开发工具上。那你们是抱着多大的觉悟说出「希望我们这一小步,会在未来的某天,化为人们享受视频游戏的美好瞬间」的?给人的感觉就是一群深居象牙塔的人,一辈子也不去了解业界真的需要什么,只是「正确地」做着科研而已。
非常抱歉,以上都是我的主观评价,请恕我对作者的想法妄加猜测。看完文章最后那段话后,我就有了这样一种矛盾的愤怒感。我喷了这么多,其实也不是想喷这篇工作的作者,更想批判的,是我长年以来在生活中的见闻。把气撒到这篇工作上,可能只是我嫉妒他们,没有 128 块卡去做想做的事情而已。
但我毫不怀疑地相信,我要有的资源最后都会有的。「游戏开发的新范式」、「造福众生」、「今天的一小步」……,如果有一天我说出了这些话,那必然不是在论文里,而是在我的产品得到了用户的充分肯定后,向世界吹嘘的胜利宣言吧。
新科研方向的讨论
先谈一下这篇工作在科研上给我们的启发。我认为有三点:
- 对于深度学习应用来说,不要去在意功能有多么异想天开,只要把问题定义好,数据准备好,问题就可解。
- 可以以用户操作为约束,用生成模型建模一个可交互世界。这个「用户操作」不一定局限于游戏玩家的操作。
- 强化学习可以用来造大批数据。并且,我们需要精心设计模型的学习目标,使其造出多样的数据。
再来看顺着这篇文章的结果,我们能有怎样的新思考。拿图像生成模型这种结果极不稳定的东西做要求输入输出可控的游戏是不可能的。但是,我们应该把思路逆转过来:哪些任务可以以不确定的图像为输入?最容易想到的是缺数据的自动驾驶任务。也就是说,这篇工作实际上是提出了一种带交互的图像数据生成器。
这篇工作用图像模型学习了 3D 场景在移动后的变化。也就是说,模型「理解」了 3D 场景。那么,有没有办法从模型中抽取出相关的知识呢?按理说,能理解 3D,就能理解物体是有远近的。那么,深度估计、语义分割这种任务是不是可以直接用这种模型来做呢?以交互为约束的图像生成模型可能蕴含了比文生图模型更加丰富的图像知识。很可惜,不知道这篇工作最后会不会开源。
如果一个模型能够建模一个简单的世界,我们下一步要思考的是怎么编辑这个世界。就像有了图像生成模型,我们要给它加上文本约束一样。最容易想到的是以二维图片为约束,生成一个世界里的三维物体。但目前这个模型要的训练量太大了,做这种新实验的代价根本不敢想。
当前这个模型的结果还是比较弱的。别看这里用了扩散模型,模型的训练目标实际上是一个重建任务而非生成任务,最后的评测指标也是重建误差而没有考虑 FID 等图像生成质量指标。有没有办法让模型设法输出有多样性的新内容?还有,这个模型在设计上应该是一个自回归模型,只不过下一张图片是用扩散模型隐式建立了概率分布。但由于用户操作是在线而不是离线一次性给出,这种任务在时序上没办法用视频扩散模型建模。所以,从本质上看,要设计带用户操作的生成模型,其实是要一种时序信息在线输入的生成模型。除了自回归模型外,能不能用一种全新的生成范式呢?一旦有了这样一种新式模型,训练交互世界神经网络的代价将大幅降低。
除了时序信息不好输入外,这个任务还面临另一个问题:随着时间不断推移,模型会忘记以前的内容。NLP 领域通过 Transformer 全局信息交互暴力地解决了这类问题,但在长视频生成中,这种问题还是没能很好解决。或许需要其他领域为长时序建模提供了更好的工具后,才能考虑长时间的世界交互。但我们也可以从另一个角度思考:把要模拟的世界简化,不要去做模拟游戏那么难的任务,做一个时序依赖少的模拟任务。
结束科研新方向的思考前,我再对这个模型的训练量喷两句。搞大批数据,搞大模型,一堆 GPU 狂训,强行拟合一个任务,在我看来是非常不优雅的做法。得不到学术界广泛跟进的工作,是发展不下去的。在思考这种世界模拟模型的种种应用前,最重要的还是把训练量降下去。我认为优化在线时序约束生成模型是最有价值的方向。
最后我再从游戏开发的角度讲一下这篇工作的启发。我们只讨论如何用生成模型减少美术工作量,不去探究怎么让模型学习设计复杂的游戏机制。
真的想要为游戏开发提供工具的话,应该从 2D 游戏而不是 3D 游戏入手。拟合 2D 游戏画面的训练代价较小,且 2D 游戏对开发者来说更容易做。仅基于现在的 AI 技术,我们就已经能够做出一些简单的美术生成应用了。比如前段比较火的植物大战僵尸杂交版,我们完全可以想办法定义一个科研任务,训练一个融合两种植物的生成模型。明明有更切实际的 2D 不做去做 3D,这也是我为什么觉得这篇工作在为游戏开发提供工具这个层面上显得非常没有诚意。这篇文章建模的 3D 世界模拟器其实更适合前面提到的自动驾驶等真实场景,反而不是很适合游戏开发。
从这篇工作出发,或许可以联想出非常多游戏开发应用。这里我随便举一个 2D 网格地图生成任务。用同一种地板拼接地形时,根据地板的连通情况,游戏开发引擎会自动生成完整地形。但是,这种生成是基于写死的规则的,且最终每种地形还是以正方形网格为单位呈现。能不能用生成模型让这种地形生成更加多样呢?
从本文的启发 2 出发,我们或许可以有一些新想法:可以以操作为约束,用生成模型建模一个可交互世界。那么,我们将「操作」定义为设计师向地图上铺上一块地板,而不是定义为玩家的操作。这样,模型就能站在设计师的角度的学习生成地图了。
如果数据足够的话,这种定义方式一定能让神经网络学会地形生成的。问题的关键就在于如何获取数据。根据玩家的操作,我们能够自然生成大量游戏数据。而根据设计师的每一步想法,每一步都绘制合理且高质量的图片,可能要花费大量资源。因此,如果是从这个角度出发,需要大量美术、游戏设计、深度学习的相关人员参与进来。
总结
GameNGen 将模拟 3D 可交互场景的任务定义为根据历史画面、历史及当前操作生成当前画面的带约束图像生成任务。该工作用强化学习巧妙造出大量数据,用扩散模型实现带约束图像生成。结果表明,该模型不仅能自回归地生成连贯的游戏画面,还能学会子弹、血量等复杂交互信息。然而,受制于硬件及模型架构限制,模型要求的训练资源极大,且一次只能看到 3.2 秒内的信息。这种大量数据驱动的做法难以在学校级实验室里复刻,也不能够归纳至更一般的 3D 世界模拟任务上。
我个人认为,从科研的角度来看,这篇工作最大的贡献是提出了一种用带约束图像生成来描述 3D 世界模拟任务的问题建模方式。其次的贡献是确确实实通过长期的工程努力把这个想法做成功了,非常不容易。但从游戏开发的角度来看,这个工作现阶段没什么用处。
从科研启发的角度思考,这篇工作告诉我们,定义好交互世界里的操作,我们就能部分地用图像生成模型建模一个交互世界。从本质上来看,这是一个每一个时刻的约束都在线给出的视频生成任务。针对这个任务,我们既可以去思考能否用自回归以外的更高效的方式来实现它,也可以去思考是否可以修改对于「操作」的定义来实现模拟玩家操作以外的世界模拟任务。