doomformer 项目探索了一种新颖的方法,通过将神经网络的数学运算映射到 DOOM 的游戏机制中来执行神经网络。在这个系统中,海军士兵的“大脑”被直接编译到游戏关卡中。核心概念依赖于“巫毒娃娃”——即玩家角色的副本——来代表激活值。一个数字由传送带上的一群娃娃来表示,而激活函数则被建模为娃娃必须攀爬的楼梯。矩阵乘法通过娃娃横跨熔岩线来实现,每跨过一条线,房间的光照水平就会增加。最终的输出从这些光照水平中读取,并与标准整数参考值进行逐位对比,以确保精确度。
这张图片展示了使用传送带和熔岩线等游戏机制来表示神经网络激活值和矩阵乘法的核心概念。
为了实现这一目标,开发者必须考虑到 DOOM 引擎的特定特性。例如,系统处理了同一个游戏刻中在一个区域内两次地板移动可能会被引擎静默丢失的情况,或者传送线可能会抵消之前的跨线操作。这些约束被映射到系统中,以确保每一个值——包括隐藏层、分数比较和 one-hot 答案——都保持位精确(bit-exact)。该项目支持多种架构,包括多层感知机(MLP)、Transformer 和脉冲网络。例如,一个 Transformer 模型可以被编译成一个单一地图,其中娃娃挤过天花板门(代表注意力权重)来计算结果,而无需在层与层之间运行任何外部 Python 代码。
该图表支持了尽管引擎存在特性,系统仍确保每个值保持位精确的说法。
虽然在技术上令人印象深刻,但这种方法的速度明显慢于传统计算。一个手写数字识别网络的演示显示,“READ”操作需要大约 163 秒的真实 DOOM 游戏时间,这比标准的 NumPy 计算慢了约 70,000 倍。尽管存在这种性能权衡,该项目仍成功证明了复杂的逻辑(例如一个能够命名新 DOOM 关卡或回答作弊码问题的 2 层 Transformer)可以在游戏环境内完全执行。该系统甚至允许进行“脑叶切除术”,即对地图中特定的“神经元”开一枪,可以通过物理阻断娃娃的路径,将海军士兵的行为从侵略性转变为和平主义。
该图表提供了巨大的性能权衡的视觉表示,显示了 70,000 倍的速度差异。