doomformerプロジェクトは、ニューラルネットワークの数学的操作をDOOMのゲームメカニクスにマッピングすることで、ネットワークを実行する斬新な方法を探索しています。このシステムでは、マリーン(兵士)の「脳」がゲームレベルに直接コンパイルされます。核心となる概念は、プレイヤーキャラクターのコピーである「ヴードゥー人形」を使用して活性化値を表現することです。数値はベルトコンベア上のこれらの人形の群れで表され、活性化関数は人形が登らなければならない階段としてモデル化されます。行列の乗算は、人形が溶岩のラインを横切ることで達成され、ラインを横切るたびに部屋の光のレベルが上昇します。最終的な出力はこれらの光のレベルから読み取られ、正確な精度を確保するために標準的な整数のリファレンスとビット単位で比較されます。

ベルトコンベア上のヴードゥー人形と溶岩のラインを示すDOOMゲームエンジンのスクリーンショット。
doomformerプロジェクトは、人形と溶岩を使用して値を計算し、ニューラルネットワークの操作をDOOMの内部メカニクスにマッピングします。github.com

この画像は、ベルトコンベアや溶岩のラインなどのゲームメカニクスを使用して、ニューラルネットワークの活性化や行列の乗算を表現する核心的な概念を説明しています。

これを実現するために、開発者はDOOMエンジンの特定の癖を考慮する必要がありました。例えば、同じゲームティック内で一つのセクターで2つの床の移動が行われるとエンジンによって静かに失われる可能性があることや、テレポートラインが以前のラインの横断を相殺する可能性があることなどをシステムで処理しています。これらの制約をマッピングすることで、隠れ層、スコアの比較、ワンホット回答を含むすべての値がビット単位で正確に保たれるように設計されています。このプロジェクトは、Multi-Layer Perceptrons (MLP)、Transformers、Spiking Networksを含む様々なアーキテクチャをサポートしています。例えば、Transformerモデルは単一のマップにコンパイルでき、人形が天井のゲートを通り抜ける(アテンションの重みを表す)ことで、層の間に外部のPythonコードを実行することなく結果を計算できます。

ニューラルネットワークの計算におけるビット単位の正確な許容範囲を示すグラフ。
システムのロジックによって達成されたビット単位の正確性の視覚化。github.com

この図は、エンジンの癖があるにもかかわらず、システムがすべての値をビット単位で正確に保つことを保証するという主張を裏付けています。

技術的には印象的ですが、この手法は従来のコンピューティングよりも大幅に低速です。手書きの数字認識ネットワークのデモンストレーションでは、「READ」操作に約163秒の実際のDOOMゲームプレイ時間がかかり、これは標準的なNumPyの計算よりも約70,000倍遅いことになります。このパフォーマンスのトレードオフにもかかわらず、このプロジェクトは、新しいDOOMレベルの名前を挙げたりチートコードに関する質問に答えたりできる2層のTransformerのような複雑なロジックが、ゲーム環境内で完全に実行できることを成功裏に実証しました。このシステムはさらに「ロボトミー」も可能にしており、マップ上の特定の「ニューロン」に対して一度ショットガンを放つだけで、人形の経路を物理的に遮断することで、マリーンの行動を攻撃的から平和主義へと変化させることができます。

doomformerとNumPyの実行速度を比較するチャート。
doomformerが標準的なNumPyの計算よりも大幅に遅いことを示すパフォーマンス比較。github.com

このチャートは、70,000倍の速度差を示す大規模なパフォーマンスのトレードオフを視覚的に表現しています。