はじめに
前回は「Transformer が観測履歴をまとめて記憶する DQN」で、記憶を頼りに「次の一手」を決める話でした。今回はその進化版として、World Model + Model Predictive Control (MPC) を重ねて「記憶+先読み」にします。
ざっくりしたイメージ:
- Transformer 記憶 … 過去の景色や曲がり角を覚えておく「記憶ノート」
- World Model … 「この曲がり角はT字路っぽい」「この細い路地は行き止まりが多い」みたいな ぼんやり地図 を頭の中に描く力
- MPC … そのぼんやり地図を使って 6手先まで を 最大8通り シミュレーションし、評価して「いちばん良さそうなルートの最初の一歩」だけ踏み出す
人間で言えば、「あの店に行きたいとき、長年の勘で『この分岐は行き止まり多い』『こっちは明るい商店街で店ありそう』『この路地は暗くて店はなさそう』」と感じながら、数歩先まで頭の中で歩いてみてから実際に歩き出す感じです。
ソースコード(GitHub)
実装全体はこちらで公開しています。
👉 GitHub
https://github.com/daiki3027/app-ai-grid-world/tree/grid-world-dl-wm-mpc
デモ動画(YouTube)
実際の動作や学習の進み方はこちらの動画で確認できます。
🎥 YouTube
何が増えたか(進化ポイント)
- 共通の Transformer 記憶
DQN もWorld Modelも同じ HistoryEncoder を使い、過去の観測・行動・報酬をまとめた「記憶ベクトル」を共有します。
→ 「さっき曲がった」「ここは細い路地だった」を覚えておく。 - World Model(ぼんやり地図)
「記憶 + ある行動」から、次の 5×5 観測パッチ / 報酬 / 終了確率を予測。
→ 「ここはT字路っぽいから右は行き止まり多そう」「この先は罠かも」という直感を内部で学習。 - MPC で先読み(6手先・8サンプル)
World Modelで 6手先 を 8通り シミュレーションし、累積報酬が最大のルートの「最初の1歩」を実行(planner_mode=”mpc”)。
→ 「この店に行くなら、ここを曲がって…」と数歩先まで考えてから1歩踏み出す。 - Transformer 記憶ベースの行動生成
MPC が試す各ステップの行動候補は、Transformer 記憶から得た Q 値を softmax でサンプリング(ランダム一様の枝は使わない)。
→ 勘に基づいた「それっぽい道」を優先しつつ、少しゆらぎを残す。 - 自動フォールバック
World Modelのデータが足りない間は DQN に自動フォールバックし、十分学習されたら MPC が発動。
→ 直感(WM)が育つまでは手堅く、育ったら先読みを活用。
どんなデモか
planner_mode(要求)とplanner_used(実際に使われたプランナー)が見える
→ 今「記憶だけで動いている」のか、「記憶+先読み(MPC)」なのかが分かるwm_last_loss/wm_avg_recent_loss/wm_samples_needed/wm_buffer_size
→ World Modelがどれくらい温まったか、あと何サンプル必要かが見えるepsilon,episode,step,success_rate,avg_episode_reward
→ 従来指標もそのまま確認できる
迷路モードは WebSocket メッセージで切り替え可能:
{"type": "maze_mode", "value": "memory"}: 記憶がないと迷いやすいループ/T 字路{"type": "maze_mode", "value": true}: ランダム迷路(デフォルト){"type": "maze_mode", "value": false}: 固定迷路
仕組みのざっくり解説
1) 観測履歴を記憶化(Transformer)
直近 16 ステップの「5×5観測パッチ + 行動 + 報酬」をトークン化し、Transformer で統合。
→ 「さっき曲がった」「ここで罠に近づいた」を覚えておく。
2) DQN(記憶付き)
記憶から 4 行動の Q 値を出し、ε-greedyで行動。
→ 記憶を頼りに「次の一手」を決める。
3) World Model学習(ぼんやり地図を育てる)
記憶と「候補行動」から、次のパッチ/報酬/終了を予測するネットをオンライン学習(min_train_size=200 から学習開始)。
→ 「この先は行き止まりっぽい」「ここは危険ゾーンかも」という直感を作る。
4) MPC(先読み計画)
- World Modelが温まったら実行。温まっていなければ DQN。
- 6手先・8サンプル の行動列をWorld Modelでシミュレートし、累積報酬が最大のルートの「最初の1歩」を採用。
- 各ステップの候補行動は、Transformer 記憶からの Q 値を softmax でサンプリング。
→ 数歩先まで頭の中で歩いてみて、一番マシなルートの最初の一歩を踏む。
おわりに
前回は「記憶だけで次の一手を選ぶ」段階でしたが、今回は 記憶+ぼんやり地図+先読み を組み合わせて、「あの店へ行くならこのルートが良さそう」と考えながら歩くスタイルにしています。
- 記憶共有: Transformer 記憶を DQN とWorld Modelが共用
- 先読み設定: horizon=6, num_samples=8(軽量に先読み)
- 自動切替: World Modelが育つまでは DQN、育ったら MPC
人間が勘と経験で「この道は危ない」「あっちにお店がありそう」と感じるのに近い形で、迷路を「覚えて」「先読み」しながら進む様子をブラウザで眺めてみてください。

コメント