第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 つです。

  1. 数字の取り下げ。 31.9 系の数字は公表に使いません(この記事でも「誤プロトコル値」としてのみ言及します)。
  2. 検証器の修理。 プロトコル要素(開始分散・sticky)を 1 つの関数に集約し、判定出力にプロトコル名を明記。「シード別スコアがすべて同じ」場合に警告するチェックも追加しました。
  3. 正しい条件で進化をやり直し。 no-op 分散を入れた状態で run を積み直し、最終判定で 31.2 に到達しました。

「超えた」と言うのは、比較先の論文の評価条件と自分の設定を 1 行ずつ突き合わせてからでなければならない——この教訓は、この仕組みの恒久ルールになりました。

結果 — すべてのバーを併記して

Atari Freeway — 公表スコアとの対比(高いほど良い・事実上 34 付近で飽和)
人間基準
29.6
DQN(2015・2億フレーム学習)
30.3
TANREN(読める約60行・数ドル)
31.2
Agent57(2020)
32.59
MuZero(2020)
33.03
R2D2(2020・公表最強)
34.00
TANREN は最終判定(進化に使っていないシード 10 本)で平均 31.2(確認走 31.55・シード別 31〜32)。ランダムは 0.0。人間と DQN は超え、Agent57 比 96%——上にいる 3 つの値も隠さず併記します。

人間と、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.7R2D2・人間・DQN 超え、最強の 74% で撤退
Freeway(本話)31.2人間・DQN 超え、Agent57 の 96%

全勝の物語ではありません。しかし、勝った種目・負けた種目・参入しなかった種目のすべてが、同じ検証器の規律と原典との突き合わせの上に載っています。数字そのものより、どの条件で測ったか。それがこの連載の結論のひとつです。


Atari 編はここでひと区切りです。プロジェクト全体像に戻る。Pong とキャッシュのチャンピオンコード・検証器は GitHub で公開しています。

この記事をシェア

関連記事