もしある日、AIプログラミングツールが書いた純粋なプログラムコードが、ニューラルネットワークも、勾配降下法も、いかなる「訓練」もなしに、クラシックゲームで理論上の最高得点を叩き出し、ロボット制御でDeep RLに匹敵する成績を収めたとしたら、あなたはこれをどう説明するだろうか?
これはSFの設定ではない。OpenAIのリサーチエンジニアである翁家翌(Jiayi Weng)が最近のブログ記事で記録した実際の実験だ。彼はもともとゲームテスト用に安価な小ルールをいくつか書くつもりだったが、結果として、彼自身をも震撼させる仕組みを作り上げてしまった。彼はこれにより、長らく過小評価されてきた手法、すなわち「ヒューリスティクス」を再評価し、それが独自の時代を迎えつつあるかもしれないと考えている。
手書きルールそのものは新しいものではない。エキスパートシステムは数十年前から存在しており、問題も昔から変わらない。今日、Aを修正するためにルールを一つ追加すれば、明日にはBが壊れていることに気づき、明後日にはさらにパッチを当て、最終的には誰も手を付けられなくなる。規模が大きくなれば、メンテナンスコストが人を押し潰す。翁家翌の核心的な観察は、コーディングエージェントがまさにこのコスト曲線を変えるという点にある。エージェントが自動的にログを読み、リプレイを見て、コードを修正し、テストを走らせ、実験を記録できるようになれば、一連の手書きルールシステムは初めて、継続的に成長する可能性を手にする。これまでただのパッチとしてしか使えなかったものが、長期にわたって保有する価値のあるものへと変わり始めるのだ。
これはまた、継続学習(Continual Learning)における古くからの問題にも直接触れるものだ。ニューラルネットワークの破滅的忘却の根源は、過去の能力がパラメータに暗黙的に保存されるしかなく、新しいデータが来ると容易に上書きされてしまうことにある。一方、彼が提唱する「ヒューリスティック学習(Heuristic Learning)」のフレームワークでは、過去の能力は回帰テスト、固定シードのリプレイ、明示的な失敗記録へと直接書き込むことができる。履歴は明示的で、可読性があり、再構築可能なのだ。これは忘却の問題を解決したのではなく、「忘却防止」をより工学的な問題として扱うように変えたのである。
もちろん、翁家翌はこの手法の限界も指摘している。コードの表現力には限りがあり、複雑な知覚や長距離の汎化は依然としてニューラルネットワークの主戦場である。彼がより有望だと考える方向性は、両者の組み合わせだ。すなわち、ヒューリスティックシステムを用いてオンラインデータを高速処理し、回帰可能な経験を蓄積し、それらの経験を定期的にニューラルネットワークへと内面化させるというものだ。
彼はこのビジョンを一文にまとめている。「継続的に反復可能なものはすべて、解決され始める」。これは、これまでのパラダイムシフトのロジックと一脈通じるものがある。事前学習からRLHF、大規模RLに至るまで、各ステップは「検証可能」な領域の境界を外側へと押し広げてきた。ヒューリスティック学習は、おそらくその次のステップなのだろう。
翁家翌は、OpenAIのポストトレーニング(Post-training)RL基盤における中核エンジニアの一人である。2022年にOpenAIに入社した際の面接官は、まさにJohn Schulmanであった。その後、彼はOpenAIのポストトレーニング段階における中核的なRL基盤の構築を主導し、このシステムはGPTシリーズのRLHF、アライメント、推論最適化段階における訓練イテレーションを支えている。
以下は、翁家翌のブログ記事「Learning Beyond Gradients」の原文である。当編集部が許諾を得て転載する。
原文リンク:https://trinkle23897.github.io/learning-beyond-gradients/
継続学習(Continual Learning)の解決が困難だった主因は、ニューラルネットワークの「破滅的忘却」にある。新しいことを学ぶと、古い能力が容易に損なわれてしまうのだ。では、ニューラルネットワークの重みだけに注目するのをやめれば、他の解決策はあるのだろうか?
大規模言語モデル(LLM)エージェントが強力になるにつれて、コーディングの速度と品質は向上している。しかし、私が最近さらに注目しているのは別の現象だ。コーディングエージェントが、新しいネットワークを訓練することも、重みを更新することもなく、ただひたすらに失敗を観察し、コードを修正し、テストを追加し、リプレイを見ることで、一連のプログラムシステムをますます強く育てていけるという点だ。
このことが、私に「ヒューリスティック」、すなわち手書きのルールやプログラム戦略を再評価させた。これまで多くのヒューリスティックは、役に立たなかったのではなく、育てる人手が足りなかったのだ。コーディングエージェントは、このメンテナンスコスト曲線を変える。こうして、以前は使い捨てのパッチでしかなかったルールが、長期保有に値するコードへと変わり始めるのである。
継続的に反復可能なものはすべて、解決され始める。これこそが、継続学習が常に解決したいと望んできた問題だ。これは、事前学習、RLHF、大規模RL/RLVRに続く、次のパラダイムとなるのだろうか?
異常現象
余暇にEnvPoolのメンテナンスを行っていた際、私はゲーム環境の正当性をテストするために、より安価な戦略を使いたいと考えた。さもなければ、CIのたびにニューラルネットワークを実行するのは、テストリソースを非常に消費するからだ。
最初の問題はシンプルだった。
安価で再現性があり、ランダムよりもはるかに優れたヒューリスティックを書いて、
特に有意な情報を持つ状態まで環境を効率的に実行させることは可能か?私はCodex(gpt-5.4)を使ってルールベースのバージョンを作成してみたが、NNには全く依存しなかった。何度か試したところ、結果は私の予想をはるかに超えて驚くべきものとなった。
ブロック崩しゲーム「Atari Breakout」では、戦略が387 -> 507 -> 839 -> 864と推移し、最終的に理論上の最高得点に到達した。
シミュレーションされた四足歩行ロボットの関節制御タスク「MuJoCo Ant」では、純粋なPythonプログラム戦略がまずリズム歩行を学習し、さらに短期予測モデル計画を接続することで、最終的に6000点以上に到達し、一般的なDeep RLの結果と同程度の水準に達した。
シミュレーションされたロボットの走行タスク「MuJoCo HalfCheetah」では、解釈可能な歩行・姿勢ルールとオンライン計画に頼り、5試合の平均スコアが11836.7に達し、これも一般的なDeep RLの結果と同程度の水準に入った。
「Atari 57」ゲーム全セットでは、57ゲーム x 2種類の入力 x 3回の実行 = 合計342のコーディングエージェントの探索軌跡が得られ、結果にはばらつきがあった。しかし、固定された環境とのインタラクション回数の下では、HNS(人間正規化スコア)の中央値は、100万環境ステップ付近ですでにPPOのようなDeep RLアルゴリズムの曲線を大きく上回っていた。
これらの結果を初めて見たときは非常に衝撃的であり、さらに私が注目したのは、Codexがニューラルネットワークを一切訓練していないという点だ。それは、さらに成長を続けられるソフトウェアシステムをメンテナンスしているのだ。
Breakoutの戦略は、最終的には「ボールが左にあれば左に動く」という単純なものをはるかに超えていた。この戦略から成長したものは、動作検出、状態読み取り、ボールとパドルの検出、落下地点予測、スタックループ検出、回帰テスト、ビデオリプレイ、実験記録である。Antの戦略も、歩行の公式一つにとどまらず、その中にはリズム制御、姿勢フィードバック、接触情報、短期モデルの展開が含まれていた。
そこで私は、ここに新しい概念を創造する必要性を認識した。ここで更新対象となっているのは、もはや単なる方策関数ではなく、記憶、フィードバック入口、回帰機構を備えたソフトウェアシステムなのだ。
ヒューリスティック学習 (Heuristic Learning)
Codexとしばらくやり取りを続けた後、私はこのプロセスを「ヒューリスティック学習(Heuristic Learning: HL)」と定義したいと思う。
HLの主体はプログラムコードによって構成される。
これは今日一般的なDeep RLの実践と同様に、状態、行動、フィードバック、更新という閉ループを共有しているが、更新の対象がニューラルネットワークのパラメータからソフトウェア構造へと置き換わっている。
そのフィードバックはコーディングエージェントによって消化され、環境の報酬、テストケース、ログ、ビデオ、リプレイ、人間のフィードバックなどから得られる。
その更新は誤差逆伝播を経由しない。コーディングエージェントが方針、状態検出器、テスト、設定、あるいはメモリを直接修正する。
HLは学習と更新のプロセスであり、HLによって長期メンテナンスされる対象は「ヒューリスティックシステム(Heuristic System: HS)」と呼ばれる。
HSは孤立したpolicy.py以上の存在である。少なくとも、プログラム戦略、状態表現、フィードバック入口、実験記録、リプレイまたはテスト、メモリ、そしてコーディングエージェントによって実行される更新メカニズムを含む。単一のルールでは不十分であり、ルール、フィードバック、履歴、次の更新がすべて接続されて初めてHSと呼べるのである。
表にまとめると以下の通りだ。
ヒューリスティック学習はDeep RLと比較して、多くの優れた特性を持つ。
説明可能性(Explainability):ニューラルネットワークの説明は難しいが、HLのコード戦略は人間の言葉に翻訳できる。
サンプル効率(Sample Efficiency):一度の効果的なコード更新で、学習率を調整しながらゆっくりと這うことなく、直接新しい戦略へとジャンプできる。
回帰可能性/検証可能性(Regression-testable):過去の能力はテスト、リプレイ、ゴールデンケースに変換できる。
過学習の抑制可能性:コードのヒューリスティックもシードや環境の詳細、テストの抜け穴に過学習しうるが、簡素化、回帰、マルチシードチェックが工学的な正則化として機能しうる。
破滅的忘却(Catastrophic Forgetting)の部分的回避:過去の能力は、モデル自身がすべて覚えておく必要はなく、ルールセットやテストに書き込むことができる。
重要なのは、これまでメンテナンスコストが高すぎて書く価値がなかった一部のヒューリスティックが、突如として長期保有する価値を持つようになる可能性があるという点だ。
なぜヒューリスティック学習はこれまで発展しなかったのか
HLの前身がエキスパートシステムやルールシステムだとすれば、コーディングエージェントが発展する以前は、この類のもののメンテナンスコストは非常に高かった。
人間が手動でヒューリスティックを維持しようとすると、容易に次のような状況に陥る。
今日、ルールを一つ追加してケースAを修正する。
明日、ケースBが壊れていることに気づく。
明後日、さらにもう一つifを追加する。
明明後日、誰も削除できなくなる。問題は、ヒューリスティックが役に立たないのではなく、維持できるだけの人材がいないことにある。かつて人間がエキスパートシステムを維持していたのは、産業革命以前の手紡ぎのようなものだった。規模が大きくなると、安定性とメンテナンスコストが人を押し潰す。紡績機が変えたのは生産能力の曲線であり、コーディングエージェントが変えるのはヒューリスティックのメンテナンス曲線だ。それは知的栄養を送り届けるパイプラインのように、HSに継続的に栄養を注ぎ込み、自ら反復進化させることができるのだ。
現在、一般的なエージェントによるフィードバックの閉ループは、主に以下の通りである。
機能リクエスト -> エージェントがコードを書く -> テストに合格 -> 人間が少しフィードバック -> 次のパッチしかし、大規模モデルの能力が向上するにつれて、人間の介入回数は徐々に減少する。このフィードバックループは、特定の境界が明確なシステムにおいて、自動的に閉じる機会を得る。これにより、HLを用いたHSの量産を自動化できるようになるのだ。
環境フィードバック / テスト失敗 / ログ異常
-> コーディングエージェントがコンテクストを読む
-> 方策/テスト/メモリを修正
-> 再実行
-> 結果をトライアルとサマリに書き戻す
-> 次のラウンドへ続くヒューリスティック学習は継続学習をどう実現するか
ニューラルネットワークにおける破滅的忘却は、新しいデータがパラメータを新しいタスクへと押しやり、古い能力が上書きされてしまうことだ。HLも忘却する。例えば以下のようなケースだ。
新しいルールが一つの失敗モードを修正したが、同時に古いシナリオを破壊する。
新しいメモリがエージェントを繰り返し誤った方向へ導く。
新しいテストが狭すぎて、戦略が抜け穴を突くことを学習する。
新しいパッチが共通インターフェースを変更し、古い呼び出し元が静かに壊れる。
ルールが積み重なりすぎて、最終的にエージェント自身もメンテナンス不能になる。
したがって、HLは自動的に継続学習を解決するわけではない。それは「忘却防止」をより工学的なものへと変貌させるのである。
HLにおいて、古い能力は以下のように固定化できる。
回帰テスト
固定シードのリプレイ
ゴールデントレース
失敗ビデオ
バージョン差分
明確に記述された失敗の方向性
ニューラルネットワークが経験を重みへと押し込めるのとは全く異なり、HLの歴史は明示的で、可読性があり、削除可能で、再構築可能だ。それは「記憶する」ことを担当し、また局所的なパッチの山をよりシンプルな表現へと圧縮する責任も負う。
(ただ肥大化するだけで圧縮されないHSは、最終的には必ずスパゲッティコードと化す。それは多くのことを「記憶」しているが、記憶の仕方があまりに劣悪なため、誰も手を付けられなくなり、腐敗していくのである。)
したがって、健全なHSを維持するには最低でも二つの操作が必要だ。
フィードバックの吸収:新しい失敗、新しいログ、新しい報酬をシステムに書き戻す。
履歴の圧縮:局所的なパッチの山を、よりシンプルでメンテナンス性の高い表現へと折りたたむ。
これにより、継続学習は「パラメータをどう更新するか」から、「フィードバックを継続的に吸収するソフトウェアシステムをどうメンテナンスするか」という問題へと変わるのである。
複製エントリポイント:heuristic_pong.py。
python heuristic_pong.py \
--policy ram \
--episodes 1 \
--seed 0
期待される出力には、episode=0 score=21.0 および mean=21.000 が含まれるはずです。
Breakout 864
複製エントリポイント:heuristic_breakout.py。
rm -f /tmp/repro_breakout_864.jsonl /tmp/repro_breakout_864.csv
python heuristic_breakout.py \
--policy ram \
--episodes 1 \
--seed 0 \
--max-steps 108000 \
--deadband 3 \
--chase-lead-steps 6 \
--tunnel-offset 0 \
--launch-offset 24 \
--fast-ball-min-vy 3 \
--fast-low-ball-lead-steps 3 \
--stuck-trigger-steps 1024 \
--stuck-switch-steps 256 \
--stuck-offset 12 \
--stuck-release-horizon-steps 8 \
--brick-balance-deadzone 0.01 \
--brick-balance-bias-min-score 432 \
--late-game-paddle-lag-px 2 \
--late-game-lag-ball-y 170 \
--trial-name repro_breakout_864 \
--log-path /tmp/repro_breakout_864.jsonl \
--summary-path /tmp/repro_breakout_864.csv
期待される出力には、score=864.0 および mean=864.000 が含まれるはずです。
Ant デフォルト MPC 戦略
複製エントリポイント:heuristic_ant.py、ant_envpool.xml。
rm -f /tmp/repro_ant_6146_eval5.jsonl /tmp/repro_ant_6146_eval5.csv
python heuristic_ant.py \
--policy mpc \
--episodes 5 \
--seed 0 \
--max-steps 1000 \
--mujoco-xml-path ant_envpool.xml \
--trial-name repro_ant_6146_eval5 \
--log-path /tmp/repro_ant_6146_eval5.jsonl \
--summary-path /tmp/repro_ant_6146_eval5.csv
私のローカル環境で再実行したところ、mean=6005.521、min=5776.805、max=6146.208 でした。
HalfCheetah 段階的ツリー MPC
複製エントリポイント:heuristic_halfcheetah_v5.py。
python heuristic_halfcheetah_v5.py \
--policy mpc-staged-tree-asym-pd-cpg \
--eval-episodes 5 \
--eval-seed 100
私のローカル環境で再実行した5エピソードの平均は 11836.693 でした。
Montezuma 400点 リプレイ
複製エントリポイント:heuristic_montezuma_400_policy.py。
python heuristic_montezuma_400_policy.py \
--metadata-out /tmp/repro_montezuma_400.json
期待される出力には、「score」: 400.0 および「env_steps」: 1769 が含まれるはずです。これは境界ケースであり、汎用的なMontezuma戦略として解釈しないでください。