第8話. TANREN — 「超えた」と言いかけた数字を、自分で取り下げた話 — Atari Freeway と測定の誠実さ
Freeway は「高速道路をニワトリが渡るゲーム」で、制限時間 2 分 16 秒で何回渡り切れるかを競います。左は人間プロレベル(同型コードに「渡り切った後のためらい」を較正して入れたもの。実測 29.2 ≈ 公表の人間基準 29.6)。右の TANREN は車 10 台の速度を追跡し、2 レーン先の車の到達時刻を予測して、ためらわずに渡り続けます(実測 31〜32 回)。中身は読める Python 約 60 行です。
本記事は TANREN 連載の第8話です。プロジェクト全体像は こちら、前話(Bowling — 参入ゲートが生まれた負け戦)は こちら。今回の主題はスコアではなく、測定の誠実さです。
TANREN を 30 秒で
TANREN は、LLM の「重み」を莫大なコストをかけて学習させる代わりに、追加学習なしの安価な LLM に候補コードを書かせ、そのプログラムを自動採点しながら「進化」させていく仕組みです。大規模計算が数億フレームの学習の末に到達した水準に、手元の PC 1台・数日間の探索・数ドルの API 代で迫ることを目指しています。
この連載では「大規模RLに数日・数ドルで並んだ」という種類の数字を繰り返し出してきました。だからこそ、その数字が正しい評価条件で測られているかは、この仕組みの生命線です。今回はその条件を一度間違え、自分で見つけて、取り下げた話です。
経緯: 31.9 は、条件の違う測定の数字だった
進化はあっさり 31.9 を出しました。DQN の 30.3 超え・人間の 29.6 超え。ブログに書ける数字——に見えました。
公表前の突き合わせで見つかったのは、評価プロトコルの不一致です。検証器の開始条件の既定値が、直前の Breakout 実験用の設定(sticky actions)のまま流用されていました。公表値(DQN / MuZero / Agent57)の評価条件は「no-op 開始分散」です。同じ条件で測り直すと、31.9 は 28.6 に下がり、DQN にも人間にも届いていませんでした。さらに調べると、検証器の内部にエピソード実行の二重実装があり、片方に開始分散が入っていない(つまり選抜が実質的に分散なしで行われていた)ことも分かりました。
やったことは 3 つです。
- 数字の取り下げ。 31.9 系の数字は公表に使いません(この記事でも「誤プロトコル値」としてのみ言及します)。
- 検証器の修理。 プロトコル要素(開始分散・sticky)を 1 つの関数に集約し、判定出力にプロトコル名を明記。「シード別スコアがすべて同じ」場合に警告するチェックも追加しました。
- 正しい条件で進化をやり直し。 no-op 分散を入れた状態で run を積み直し、最終判定で 31.2 に到達しました。
「超えた」と言うのは、比較先の論文の評価条件と自分の設定を 1 行ずつ突き合わせてからでなければならない——この教訓は、この仕組みの恒久ルールになりました。
結果 — すべてのバーを併記して
人間と、2 億フレーム学習の DQN は、数ドルと読める約 60 行のコードで超えました。R2D2 34.0・MuZero 33.03・Agent57 32.59 が上にいます——届いていない事実も含めて公開します。Freeway はスコアが事実上 34 付近で飽和するゲームです(R2D2 のばらつきは ±0.00)。残り約 3 回ぶんの差は「1 台も待たずに渡り続ける完全なリズム」の領域にあり、読める反応型コードの限界近くまで来た数字だと考えています。
コードの中身
最終コード(有効部分 約 60 行)がやっていることは 3 つです。
- 車 10 台の速度追跡: RAM 上の車の座標を毎ステップ差分で追う(画面端のラップは循環差分で処理)。
- 2 レーン先読み: 進む前に、1〜2 レーン先の車が自機に到達するまでの残り時間を予測し、渡るタイミングを選ぶ。
- 停滞からの脱出: 一定時間渡れていなければ、一歩下がってリズムを作り直す。
どの RAM バイトが車で、どのレーンが速いか——それもこの仕組みが実測で特定したものです。
正直な注記
- 入力は RAM(128 バイトの内部状態)であり、ピクセルではありません。ゲームごとの専用コードです。
- 比較プロトコルは公表側と同一です(no-op 開始分散・決定論・27,000 ステップ上限)。比較値は arXiv:2003.13350 Table H.4 を原典確認済みです。
- 31.9 / 32.0 などの過去の値は誤プロトコル(sticky 設定の流用)によるもので、公表には使いません。
- 汎用エージェントではありません。このゲーム専用の読めるアルゴリズムです。
Atari 編のまとめ — 対比の全体像
この連載の Atari 編は、これで全 5 種目です。大規模計算のRL(DQN は 2 億フレーム、Agent57 は約 780 億フレームの学習)に対し、TANREN はいずれも机上の 1 台・数日以内・API 数ドルで臨みました。
| 種目 | 結果 | 大規模RLとの位置関係 |
|---|---|---|
| Pong(第1話) | 21–0 × 40 試合 | 理論上限=MuZero と同点 |
| Breakout(第5話) | 人間の約 6.1 倍 | DQN の 47%——届かない理由も計測で確定 |
| Skiing(第6話) | −3310.7 | 公表全RLと人間基準に全勝 |
| Bowling(第7話) | 185.7 | R2D2・人間・DQN 超え、最強の 74% で撤退 |
| Freeway(本話) | 31.2 | 人間・DQN 超え、Agent57 の 96% |
全勝の物語ではありません。しかし、勝った種目・負けた種目・参入しなかった種目のすべてが、同じ検証器の規律と原典との突き合わせの上に載っています。数字そのものより、どの条件で測ったか。それがこの連載の結論のひとつです。
Atari 編はここでひと区切りです。プロジェクト全体像に戻る。Pong とキャッシュのチャンピオンコード・検証器は GitHub で公開しています。