AI Navigate

Karpathy の Autoresearch の評価ツールを作った方法

Dev.to / 2026/3/18

💬 オピニオンTools & Practical UsageModels & Research

要点

  • 著者は autoresearch の結果を定量化し、実際に重要な実験を特定するために、autojudge、autosteer、autoevolve の3つの CLI を構築した。
  • autojudge は results.tsv と run.log を読み込み、ローリングノイズフロアを推定し、val_bpb と memory のパレート効率に基づく信頼度スコアを含む判定を報告する。
  • autosteer は保持された実験と破棄された実験の履歴を分析し、それらをカテゴリ(アーキテクチャ、ハイパーパラメータ、オプティマイザ、正則化)で分類し、exploit モードまたは explore モードで次に試すべきことを提案します。
  • この記事は、何千もの実験が行われる一方で信号が信頼できなかった当初の問題を説明し、これらのツールがより頑健な評価フレームワークを提供することを示します。
  • 終了コードはスクリプト実行に適しており(0: keep、1: discard、2: retest)、実験ループへのシームレスなパイプ処理を可能にします。

TL;DR: Karpathyの自動研究は一晩で数百のGPT事前学習実験を実行します。どれが重要だったかは教えてくれません。私はそれを可能にする3つのCLIを作成しました: autojudge(ノイズフロア+パレート分析)、autosteer(次に試すべきこと)、autoevolve(競合エージェント、勝者を交配させる)。

問題

1週間にわたって自動研究を実行した後、何を信頼すべきか分からない、何千行にも及ぶ TSV を手にしていました。

内蔵の維持/破棄ロジックは: val_bpb が下がったかどうか?それだけ。ノイズフロア推定なし。0.02% の改善が実際の信号なのか、実行ごとの揺らぎなのかを知る方法はありません。700件の実験の後、6件の「改善」がありましたが、それらのいずれにも自信はゼロでした。

評価レイヤはありません。Karpathyはそれを演習として残しました。

What I built

autojudge

results.tsvrun.log を読み取り、最近の実験からノイズフロアを推定し、改善がパレート前線上にあるかを確認します(val_bpb 対 メモリ)、そして信頼度スコア付きの判定を返します。

pip install autojudge
autojudge --results results.tsv --run run.log

出力は以下のとおりです:

experiment_042: STRONG_KEEP (confidence: 0.91)
  val_bpb delta: -0.0041 | noise floor: ±0.0008
  pareto status: EFFICIENT

experiment_043: RETEST (confidence: 0.44)
  val_bpb delta: -0.0009 | noise floor: ±0.0011
  delta within noise -> not enough signal

終了コードはスクリプト向きです: 0 = keep, 1 = discard, 2 = retest。これを直接あなたのループにパイプして使用できます。

最初に機能しなかったこと: 単一の基準ランからノイズフロアを推定してみましたが、それ自体がノイズが多すぎました。安定した推定を得るには最近の実験のローリングウィンドウが必要で、私は最後の5件に落ち着きました。

autosteer

保持・破棄された実験の履歴を見て、それらをカテゴリ(アーキテクチャ、ハイパーパラメータ、オプティマイザ、正則化など)ごとにグループ化し、次に試すべきことを提案します。

pip install autosteer
autosteer --results results.tsv --mode exploit

Two modes:

  • exploit: カテゴリで勝っている場合は、そこのバリエーションをさらに提案します
  • explore: 行き詰まっている場合、まだ探索されていないカテゴリを提案します
Category analysis (last 50 experiments):
  architecture:    12 tried | 8 kept (67%) | EXPLOIT
  hyperparams:     18 tried | 6 kept (33%) | NEUTRAL
  optimizer:        8 tried | 1 kept (12%) | AVOID
  regularization:   4 tried | 0 kept (0%)  | EXPLORE

Suggested next: architecture variations (high success rate)
Specific angles: attention head count, layer depth, skip connections

Caveat: 提案はカテゴリレベルのもので、因果関係ではありません。設定に対してどのアーキテクチャ変更がうまくいく傾向があるかを教えることはできますが、なぜそうなるかは教えてくれません。

autoevolve

実験的なものです。複数のエージェントを異なる戦略で別々の git ワークツリーに配置します。彼らは同じ問題で競います。勝利したアイデアは次の世代へと交配されます。

pip install autoevolve
autoevolve --strategies conservative aggressive random --rounds 3

各エージェントはそれぞれの作業ツリーを取得し、それぞれの戦略で標準の autoresearch ループを実行します。各ラウンド後、最もパフォーマンスの高い設定が全エージェントに統合され、新しいベースラインとなります。

これは3つの中で最も未完成です。動作します。Git worktree の管理はクリーンです。交差受粉のヒューリスティックは簡素で、ラウンドごとに最良の1つの設定を選ぶだけで、アンサンブルでの賢い工夫はしていません。次はそれをやります。

Installation

pip install autojudge autosteer autoevolve

Python 3.10+, MITライセンス。標準の autoresearch ループに組み込み、results.tsvrun.log を読み取り、autoresearch の内部構造への他の依存関係はありません。

リポジトリ: github.com/dean0x/autolab

What I'd do differently

最初に機能しなかったこと: autojudge のノイズフロア推定は3回の書換を要しました。最初のアプローチ(単一ベースライン)はノイズが大きすぎました。次のアプローチ(固定長ウィンドウ10)はラン開始時の適応が遅すぎました。ローリングウィンドウ5が適切なトレードオフでした。

autoresearchを本格的に使うなら、評価レイヤが最大限の効果を発揮する場所です。一晩にわたるループは簡単な部分です。