KarpathyのAutoresearchは寝てる間にAIがML実験を100回回してくれるシステム
Andrej Karpathy(元Tesla AI責任者、OpenAI共同創業者)が Autoresearch を公開した。一言でいうと「寝てる間にAIが勝手にML実験を100回回してくれる」システムで、公開直後から大きな反響を呼んでいる。
この記事ではML(機械学習)を知らない人でも分かるように、何をしているのか・なぜ嬉しいのかを噛み砕いて書いた。
そもそもML実験とは何か
ML(Machine Learning、機械学習)とは、大量のデータからパターンを学習させてAIモデルを作る技術のこと。ChatGPTやClaudeのようなLLM(大規模言語モデル)も、大量のテキストデータを読み込ませて「次にどんな単語が来そうか」を予測する訓練を繰り返して作られている。
この訓練プロセスには無数の調整項目がある。
| 調整項目 | 内容 |
|---|---|
| 学習率 | モデルが1回のデータ処理でどれだけ大きく自分を更新するか。大きすぎると暴走し、小さすぎると学習が遅い |
| バッチサイズ | 一度に何件のデータをまとめて処理するか。大きいほど安定するが、メモリを食う |
| モデルの構造 | ニューラルネットワークの層の数、各層のサイズ、注意機構(アテンション)のヘッド数など |
| オプティマイザー | 「学習の進め方」を決めるアルゴリズム。後述するAdamWやMuonがこれにあたる |
これらの組み合わせを変えて訓練し、「どの設定が一番いい結果を出すか」を探すのがML実験だ。1回の実験には数分から数時間かかるため、研究者が手作業で回すと1日に試せるパターンは限られる。
Autoresearchはこの「設定を変えて→訓練して→結果を比較する」サイクルをAIエージェントに丸投げする。
Autoresearchの仕組み
全体の流れ
flowchart TD
A["研究者が program.md に<br/>探索方針を書く"] --> B["AIエージェントが<br/>train.py を編集"]
B --> C["GPUで5分間<br/>訓練を実行"]
C --> D["結果を評価<br/>val_bpbスコアを計測"]
D --> E{スコアが<br/>改善した?}
E -- Yes --> F["変更を採用して<br/>次の実験へ"]
E -- No --> G["変更を破棄して<br/>別のアプローチを試す"]
F --> B
G --> B
1回の実験が5分に固定されているので、1時間で約12回、8時間寝ている間に約100回の実験が自動で回る。研究者は朝起きたら実験ログを見て「どの設定が一番よかったか」を確認するだけ。
評価指標: val_bpb
実験の良し悪しを測る指標として、Autoresearchはval_bpb(validation bits per byte)を使う。
これは「モデルがテキストをどれだけ効率よく予測できるか」を測る数値で、値が低いほど優秀。たとえば英語のテキストで「Thank y」の次に来る文字を予測するとき、高確率で「o」と当てられるモデルはbpbが低くなる。
bpbの利点は、モデルの語彙サイズ(テキストをどう分割するか)に影響されないこと。モデルAが8000語彙、モデルBが4000語彙で訓練されていても、bpbなら公平に比較できる。これにより、構造がまったく異なる実験同士を横並びで評価できる。
ベースとなる nanochat / nanoGPT
Autoresearchが訓練するのはゼロから作った巨大モデルではなく、nanochatという軽量なGPT実装だ。
| プロジェクト | 内容 |
|---|---|
| nanoGPT | Karpathyが以前公開した「最小限のコードでGPTを訓練する」プロジェクト。2019年にOpenAIが約43,000ドルかけて訓練したGPT-2相当のモデルを、たった48ドル程度のGPU代で再現できることを示した |
| nanochat | nanoGPTの後継。訓練だけでなく、会話用の調整やチャットUIまで含めた一気通貫の実装 |
Autoresearchはnanochatの訓練コードを単一GPU・単一ファイルに簡略化して、AIエージェントが編集しやすい形にしたもの。「小さいけど本物のLLM訓練環境」の上でエージェントが自由に実験できる構成になっている。
3ファイルだけのシンプルな構成
リポジトリのコア構成はファイル3つだけ。
| ファイル | 役割 | 誰が触る |
|---|---|---|
prepare.py | データのダウンロードと前処理 | 触らない(固定) |
train.py | モデルの構造・訓練ロジックのすべて | AIエージェントが編集 |
program.md | エージェントへの研究方針 | 人間が書く |
train.py だけが変更対象になっているのは意図的な設計だ。変更が1ファイルに閉じていれば、差分(diff)を人間がレビューしやすい。「エージェントが何を変えたか」が一目で追える。
program.md は自然言語でエージェントに「何を試してほしいか」を書く場所。たとえば以下のような指示を書く。
- 「アテンションのヘッド数を4, 8, 16と変えてbpbの変化を調べろ」
- 「学習率を倍にしたときと半分にしたときを比較しろ」
- 「ドロップアウト(訓練中にランダムにニューロンを無効化する正則化手法)の有無で比較しろ」
この program.md だけが研究者の判断を要する部分で、残りはすべてエージェント任せ。Karpathyはこれを「研究組織のコードを書いているようなもの」と表現している。
エージェントが変更できる範囲
エージェントが train.py 内で自由に触れるのは以下の要素だ。
| 要素 | 内容 |
|---|---|
| オプティマイザーの選択 | 学習の進め方を決めるアルゴリズム。後述 |
| バッチサイズ | 一度にまとめて処理するデータ量 |
| 学習率とスケジュール | 学習の速さと、訓練の段階ごとにどう変化させるか |
| モデルの構造 | 層の深さ、各層のサイズ、アテンションヘッドの数 |
| 活性化関数 | ニューロン間の信号の変換方法(ReLU、GELUなど) |
| 正規化の方式 | 層ごとの出力を安定させる手法の種類 |
オプティマイザーとは
ニューラルネットワークの訓練は、大量のパラメータ(GPT-2で約1.5億個)を少しずつ調整して正解に近づけていく作業だ。このとき「パラメータをどの方向にどれだけ動かすか」を決めるのがオプティマイザー。
| オプティマイザー | 特徴 |
|---|---|
| AdamW | 現在最も広く使われている標準的なオプティマイザー。大半のLLM訓練で採用されている |
| Muon | 2025年頃に登場した新しいオプティマイザー。AdamWより収束が速い(同じ精度に到達するまでの訓練時間が短い)とされる |
Autoresearchのデフォルト構成では、モデル内部の重み行列にMuon、埋め込み層やバイアスなど残りのパラメータにAdamWを使う「ハイブリッド方式」を採用している。パラメータの種類に応じて最適なアルゴリズムを使い分ける戦略だ。
設計思想: 1GPU・1ファイル・1指標
Karpathyがこのシステムで徹底しているのは「シンプルさ」だ。
複数のGPUを使う分散学習なら、もっと大きなモデルを短時間で訓練できる。しかしGPU間の通信やデータの分割が絡むと、「エージェントが何を変えて何が起きたか」の因果関係が追いにくくなる。
Autoresearchは単一GPUに限定することで:
- エージェントの変更と結果の対応が明確(原因と結果が追える)
- 実験環境が単純なのでバグが入り込みにくい
- 5分という固定時間内で終わるから、実験同士を公平に比較できる
制約を設けることで、逆に実用的なシステムに仕上がっている。
READMEの冒頭には、Karpathyらしい未来予測が書かれている。
研究はかつて肉体コンピューター(人間)がご飯を食べたり寝たりしながら行い、たまに「グループミーティング」と呼ばれる音波通信の儀式で同期していた。その時代はとうに過ぎ去った。研究は今やコンピュート・クラスタで自律的に動くAIエージェントの群れが担っている。
半分冗談、半分本気のビジョンで、Autoresearchはその「始まりの一歩」という位置づけだ。
セットアップと動かし方
必要なもの。
- NVIDIA GPU(H100での動作が確認済み。それ以外のGPUでも動くが、5分間で処理できるデータ量が変わるため結果は環境依存になる)
- Python 3.10以上
uv(Pythonのパッケージマネージャー)
# 依存パッケージをインストール
uv sync
# データダウンロードとトークナイザーの学習(初回のみ、約2分)
uv run prepare.py
# 手動で1回訓練を実行して動作確認(約5分)
uv run train.py
動作確認ができたら、Claude CodeやCodexなどのAIエージェントをリポジトリで起動して「program.md を読んで実験を始めて」と指示すれば、自律実験モードに入る。
小規模なGPU(MacBookなど)で試したい場合は、コミュニティのフォーク版がmacOSやWindows向けに用意されている。その場合は訓練データをGPT-4生成の短編小説集(TinyStories)に切り替えたり、モデルの複雑度を下げる調整が推奨されている。
ライセンスはMIT。訓練済みモデルの配布ではなくコードのリリースなので、自分のGPUで自由に実験できる。
「自分の文章を学習させたい」場合は別の手段
学習データを差し替えれば自分の文章で訓練できるのでは、と思うかもしれない。理屈上はそうだが、Autoresearchはモデルをゼロから訓練する仕組みなので、最低でも数十MB〜数百MBのテキストが必要になる。個人のブログ記事や原稿程度では全然足りない。TinyStoriesが少量で機能するのは、文法的に単純な英語の短文だからパターンが少量でも学べるという特殊事情による。
「自分に似た文章を書くモデルが欲しい」なら、既に大量のテキストで訓練済みのモデルに自分の文章を追加学習させるファインチューニングのほうが現実的だ。LoRAやQLoRAといった手法を使えば、少量のデータと1枚のGPUでも文体を寄せることができる。
Autoresearchの本質は文体の学習ではなく、モデルの構造やハイパーパラメータの最適な組み合わせを自動探索することにある。用途が違うので混同しないように。