- DIAMOND は、Atari 環境を離散潜在トークンに圧縮せず、拡散世界モデルでシミュレーションしたうえで、その中で強化学習エージェントを学習させるアプローチ
- 次のフレームはエージェントの 行動 と過去のフレームを条件として生成され、この過程を繰り返すことでプレイ可能な世界モデルを構成する
- デノイジング段階が少ない場合、DDPM は不安定だったが、EDM は1段階でも安定した軌跡を作れた。DIAMOND は一貫性のために n=3 を使用
- Atari 100k で平均人間正規化スコア 1.46 を達成し、100k フレーム条件で世界モデル内学習エージェントの新たな最高性能を記録
- CS:GO への適用には 87時間の人間プレイデータ、2段階の低解像度予測+アップサンプリングパイプライン、381M パラメータモデルが使われ、RTX 3090 で約 10 FPS でプレイ可能
DIAMOND が解こうとしている世界モデリング問題
- 世界モデル は、強化学習エージェントをより安全かつサンプル効率よく学習させるためのアプローチ
- 最近の世界モデルは主に、環境ダイナミクスを 離散潜在変数 のシーケンスとしてモデル化する
- このような圧縮表現は、強化学習に重要な 視覚的ディテール を取りこぼす可能性がある
- DIAMOND は、画像生成で強力な成果を上げた拡散モデルを世界モデルに適用する
- DIAMOND の正式名称は DIffusion As a Model Of eNvironment Dreams
拡散世界モデルの仕組み
- 拡散モデルはゲームの 次のフレーム を予測するよう学習される
- 入力にはエージェントの行動と過去のフレームが含まれる
- エージェントが新しい行動を繰り返し与えると、拡散モデルがゲーム状態を更新する
- この自己回帰的な生成過程により、拡散モデルはエージェントが学習しプレイできる 世界モデル として機能する
高速実行のためのデノイジング設計
- 世界モデルを高速化するには デノイジング段階数 を減らす必要がある
- DDPM は、デノイジング段階数が少ないと自己回帰誤差が蓄積して不安定になる
- EDM は、1段階のデノイジングでも安定した軌跡を生成する
- Boxing 環境では、1段階のデノイジングが可能な結果同士を補間し、予測が難しい黒いプレイヤーがぼやけて生成される
- デノイジング段階を増やすと、複数の可能な遷移モードの中から特定のモードをよりうまく選択でき、時間方向の一貫性が高まる
- DIAMOND の拡散世界モデルは n=3 のデノイジング段階を使用する
- 白いプレイヤーの動きはポリシーが制御し、その行動が世界モデルに与えられるため、デノイジング段階数に関係なく正しく予測される
Atari 100k の性能
- DIAMOND は、離散トークンベースの IRIS よりも重要な 視覚的ディテール をうまくモデル化する
- 拡散世界モデル内で強化学習エージェントを学習した結果、Atari 100k で平均人間正規化スコア 1.46 を達成
- このスコアは人間を46%上回る水準
- 100k フレーム条件で、世界モデル内のみで学習したエージェントとして新たな最高性能
CS:GO へ拡張した方法
- DIAMOND の拡散世界モデルは、Counter-Strike: Global Offensive のような3D環境シミュレーションにも適用される
- CS:GO 版は、強化学習エージェントが収集したデータの代わりに、87時間の人間プレイ からなる固定データセットを使用する
- 学習コストを下げるために2段階パイプラインを適用
- まず低解像度でダイナミクスを予測する
- その後、2つ目のモデルでアップサンプリングする
- モデルサイズは Atari 用の 4.4M パラメータから、CS:GO 用の 381M パラメータ に拡大
- このうち 51M パラメータは追加アップサンプラーに相当する
- アップサンプラーには、視覚生成品質を高めるために 確率的サンプリング を使用する
- ダイナミクスモデルには確率的サンプリングは不要
- CS:GO モデルは RTX 4090 で12日間学習され、RTX 3090 で約 10 FPS でプレイ可能
直接実行と公開資料
- コード、エージェント、プレイ可能な世界モデルは GitHub リポジトリ で公開されている
- インストール例では次のコマンドを使用する
git clone https://github.com/eloialonso/diamond.git
cd diamond
conda create -n diamond python=3.10
conda activate diamond
pip install -r requirements.txt
python src/play.py --pretrained
git checkout csgo
python src/play.py
残る失敗モードとスケーリングの限界
- DIAMOND の拡散世界モデルには複数の失敗モードが残っている
- データと計算資源をさらにスケールさせれば、多くの面で改善が期待される
- しかし、限られたモデルメモリに起因する問題のように、スケーリングだけでは解決できない限界 もある
- 興味深い限界の一つは、モデルが連続ジャンプを許してしまう点
- モデルはジャンプがシーンの幾何に与える効果を一般化する
- 学習データに連続ジャンプが十分な頻度で現れないため、連続ジャンプは不可能であるべきだという事実を学習できない
1件のコメント
Hacker News の意見
この動画 https://x.com/Sentdex/status/1845146540555243615 は、自分の夢にすごく似て見える。
ときどき夢の中で高く跳ぼうとすると、まさにあんなふうに別の場所へ切り替わって、物体もずっとあんな感じで変化し続ける。
実際の夢体験にどれほど近いかを見るのは驚きだ。
拡散モデルが注目され始めたとき、生成画像内の崩れたテキストも似ているというつながりが思い浮かんだ。
人間の無意識の一部が、拡散モデルの原理とかなり似た形で動いている手がかりなのかもしれない。
視界ではそれほど目立たないが、注意と思考そのものではよりはっきり現れる。
自分の夢は視覚的にはかなり一貫しているので、夢の中で Google Maps を使ったこともあるし、地理は間違っていたが内部的には一貫していた。
ただし夢の中で明晰夢を見たことはないので、その違いが影響している可能性もある。
夢の状態では何かの接続が切れているが、ここにもそれに似た断絶が明らかにある。
このモデルには、動物が持つ強い空間推論や連続性への期待のような世界モデルが欠けているように見える。
もちろんそれも、おそらく学習されるものなのだろうが。
これは3億パラメータのモデルで、大きな llama-3 の 1/1300 の規模であり、500万フレームを使って GTX4090 で12日間学習したもの。
2015年なら大手テック企業がやっていたレベルの作業だった。
大規模言語モデルのように産業規模で同じことをやれば、本当にすごいことになりそうだ。
Counter Strike はすでにこれよりずっと滑らかに動くし、膨大な計算資源も無駄にしない。
進歩の速さは本当に驚くほどだ。
実に興味深い時代に生きている。
かなりわくわくする結果だ。
すでにゲームエンジンでリアルな物理近似を生成するのに使えそうに見える。
より重くリアルな物理エンジン、あるいは CGI でゲームプレイの断片を大量に作り、モデルに物理を近似するよう学習させれば、軽量な物理エンジンができる。
煙のダイナミクス用、爆発用のように、特化したモデルを複数置くこともできる。
幻覚があっても、ゲームでよくある物理バグより悪くはなさそうだ。
物理バグはよくあるが、最も深刻な進行不能バグから優先順位を付けて直せる。
ブラックボックスモデルだと、それをやるのはずっと難しくなる。
ニュートン物理学はすでに非常によく知られていて、計算もかなり効率的だ。
数十億パラメータの関数近似でニュートン物理を計算することが、どうしてより安くなり得るのか?
まともな物理シミュレーションより高くつき、精度も低いように見える。
機械学習モデルにはそうした保証がない。
こういう方式は、わざと雑に作ったゲームの文脈でなら何とかなる可能性が高い。
視覚効果だけならよいが、ゲームプレイに影響するならプレイヤーごとに違う結果が出るのでは?
実際に試した人に聞きたい。
処理の中で何らかのゲームマップを尊重したり作ったりしているのか、それとも同じ場所に二度戻れず、空間の次元もおかしいサイケデリックな夢の中の散歩のようなものなのか?
ゲームマップは有限なのか?
どんなマップも作っておらず、ゲーム状態らしきものに対する意味のある認識もなさそうだ。
LLM ベースの RPG に似ている。
剣を拾って空のバッグに入れた後、突然パン一斤を取り出して食べられる、という感じだ。
無限マップに近いように見える。
どんな種類のマップ認識もない。
訓練データセットにあるものはかなり正確に思い出す想起/再生型 AIに近く、壁に向かって歩いていくようなデータにない行動をすると完全に崩壊して、でたらめを吐く。
もっともらしいでたらめだが、それでもでたらめだ。
これは 2018年に Schmidhuber のグループがやっていた仕事だ。
https://worldmodels.github.io/
この点は指摘しておきたい。
ここでは夢という表現が的確で、運転シーンも夢の中で運転している感覚に似ている。
Stable Diffusionの基本前提、つまりノイズ除去のプロセスを逆にたどってリアルな画像を生成するということは、おおよそ理解できた気がする
ただ、私の理解ではこれは常にピクセルレベルで行われる
これを3Dアセットレベルで試みる研究はあるのだろうか?
位置と向きを持つゲームエンジンのアセットを差し込み、もっともらしいシーンが再構成されるまで合わせ込むような形だ
可能なら実際の地図と実際の物理を「夢見る」ことができ、こうしたデモに出てくるやや汚い出力を避けられるのではないか?
これまでは複数の角度から撮った写真で1つのシーンを学習し、点群の密度を調整してボリュームとして再構成する用途に使われてきた
だが、複数の異なるシーンでモデルを学習し、ランダムな点群に拡散を行って新しいシーンを生成することも可能かもしれない
点群のリアルタイムレンダリングも非常に効率的なので、ポリゴンジオメトリの代わりに、ものすごくリアルなゲーム世界を作るのに使える
すでに誰かがそれを考えているようだ: https://ar5iv.labs.arxiv.org/html/2311.11221
拡散は潜在空間で起こり、これがすべてをうまく機能させた大きなブレークスルーの一つだった
ピクセルと潜在空間の間をエンコード/デコードするモデルがある
潜在空間は必要な概念を必要な次元にエンコードでき、通常はピクセル空間より次元が低い
そのため、ノイズの混じった潜在空間を得て、拡散モデルでノイズを除去し、その後、別のモデルである変分オートエンコーダーでピクセル空間へデコードする
こうした車両はかなり頻繁に衝突する
例: https://github.com/NVlabs/CTG
説明されているリバースエンジニアリング的な方法は理解しやすいので魅力的に見えるかもしれない
それでも、ピクセルレベル生成に集中するのが正しいアプローチだと思う
やや汚い出力は、おそらく短期間で改善されるだろう
Doom(https://gamengen.github.io/)とこの取り組みで可能だと証明されたので、HDかつ幻覚を最小限に抑えてスケールさせる正しい構造を探す研究は、すでにもっと進んでいる可能性が高い
動画でもすでに同じことが起きているので、近いうちに似たレベルのブレークスルーが見られそうだ
画像生成は最終画像のピクセルより出力数が少ないこの空間で行われ、その後VAEを通じてピクセルに変換される
ニューラルネットワークの画像や動画にある地獄のようなノイズに、人々が気づかないのがずっと理解できない
私には最初から常に見分けられ、恐ろしく感じられた
画像がほぼ常に何らかの形で奇怪だというのは自分も感じるが、同じことを言っているとは限らない
どんな体験なのか、もう少し説明してくれる?
さっきざっと確認してみたが、AMDカードとROCM PyTorchで非常によく動作する
短時間動かす分にはかなり良さそうに見える
時間が経つとディテールがかなり速く失われ、武器がカラフルなゴミのようになりがちだ
動画の中に、壁に向かって歩いて入っていくとどうなるかを示しているものがない点も指摘しておきたい
その状況はあまり優雅には処理できない
本当に面白くなるのは、最新のGTAと関連する実写映像まで学習させたうえで、Vice Cityのような古いゲームのビジュアルをリアルタイムでアップグレードする用途に使う場合だ
時間的一貫性の不足のせいで、まだ夢のように感じられるだろうが、土台が一貫しているので大きな問題にはならなさそうだし、見た目はすごいことになるはずだ
指摘の通り、時間的一貫性は良くない
遠くにある山の低解像度の緑のピクセルを、あるフレームでは果樹として、次のフレームでは松の木として解釈することもあり得る
2021年に似たことをしたデモがある:
https://www.youtube.com/watch?v=3rYosbwXm1w
街を目的なく運転する程度なら可能で、それだけでも非常に格好いいだろうが
重要なのはビデオゲーム世界を再生成できることではなく、現実世界をシミュレーションできることだ
必要なデータを安価かつ容易に合成できるため、ゲーム映像を学習に使っているだけだ
このシステムは自分がゲームをシミュレートしているとは知らない
現実世界の映像を数千〜数百万時間分とエージェント入力を与えれば、現実世界のシミュレーションが得られる
https://www.reddit.com/r/aivideo/comments/1fx6zdr/gta_iv_wit...
だんだん信じられないレベルになっている
古いフレームと入力 → 新しいフレームという強いループなら、Counter-Strikeではない画像から始めるとどうなるのか気になる
あるいは、モデルが見たことのないマップを入れたら追従してくれるのか、それとも既知のCounter-Strikeマップに戻ってしまうのか?
こういうものを見るとDust 2の夢を見ている感じがするので、「夢」と呼びたくなる