Preferred Networks

Vol.67 AIが自らAIを育てる「自動研究AI」

◆話題の自動研究AIとAndrej Karpathyの取り組み

今世界的に話題になっていて、実際自分も見て「これすごいな」って思うのが、Andrej Karpathy(アンドレイ・カーパシー)が公開しているautoresearchです。

この方は今までもいろんなもの作ってきているのですが(最近だとLLMの最小構成で色々実験するnanocahtとか)、それを教育に使ったりしてる中で、Claude Codeとか、Codexとかそういったものが出てきて、どんどん自動化が進んでいます。その中で、研究自体を自動的に行って、それをものすごい最小構成でできるものを作って公開しています。

実際、夜寝ている間に勝手にLLMを初期状態からずっと改善し続けていくっていうことができてる。

それを実現しているのが説明文だけで、プログラムはちょっとは書いていますけど、ほとんど書いてなくて、私も色々見てきた中では「いよいよ時代が変わったな」と、びっくりした例です。

◆最小構成「nanochat」と実験環境のセットアップ

順番に説明します。まずnanochat(ナノチャット)という最小構成のLLMの学習フレームワークがあります。

この中にLLMをフルスクラッチで学習できる600行ぐらいのコード「train.py」というのがあります。

例えばデータをロードして、それを読んで、データから勾配を計算してアップデートする。勾配を計算する最適化もTransformerのコードもここに全部入っている。GPTのコードが全部書かれていて、見たら誰でも分かるようなレベルで書いてあります。

train.pyがベースラインとして、これを使ったらどれぐらいの性能が検証データで出るかを測って、「これぐらいの性能ですよ」っていうのを出力するようになっているんですが、それを改善するような命令が言語で書かれています。

◆自然言語で書かれた「AIへの指示書」の詳細

ちょっと面白いので丁寧に説明すると、このautoresearch、自動的に研究をするために書かれているのはこのMarkdownだけです。

このMarkdownは、人間でも分かるように書かれています。「これはLLMの実験をするためのもので、こんな感じでセットアップします」というように書かれています。

Experimentationのところでどうやってその実験をするのかは自然言語で書いてあります。この中で例えばポイントだけ言うと、「実験をする際には、時間を測って5分過ぎたら、止めてプログラムをやり直せ」というのが下の方に書いてあります。

そして、「あなたができることとできないこと」というのが自然言語で書いてあります。train.pyを改造して良し。この中であなたはアーキテクチャ、オプティマイザ、パラメータ、トレーニングループ、バッチサイズ、モデルサイズを変えてください」と。

逆にできないこととしては、例えば「データを設定するprepare.pyは手を出すな」と書いてあったり、自動的に改善するAIの場合は絶対ズルするので、ズルさせないように「エバリュエーション(評価)のところはいじらない」と。

これを指示しておかないと、おそらく最適戦略は「実験を適当にして、評価結果の数値を変える」みたいなことが最適戦略になるので、「そういったことはするな」という風に説明しています。そして「あなたのゴールは、検証データでの性能が一番いい学習コードを選ぶことです」と。

「学習時間は気にしなくていいけれど、実験が失敗して何らかの理由で10分ぐらいかかったら、自分で止めて再起動してください。アウトプットはこういうフォーマットにしてください」という風に書いてあります。

さらに、「ログはどういう形式で、カラムはそれぞれ何を出せというのをgitのブランチから抜き出して書いてください」と。これは後でグラフを出す時にここのディスクリプションが使われています。

重要なのがここで、「LOOP FOREVER」つまり、人間にフィードバックを求めずひたすら回せっていう風に書かれています。

「NEVER STOP」1回始まったら、もう止めるな、人間に続けるかどうかは聞くなと。

そして(ここまで丁寧に説明した方が、多分AIさんにとっていいんですが)、「人間はおそらく寝ている。寝てる間にあなたは実験して、自律的に動く。もしアイデアが尽きたら、もっと深く考えろと。必要であればペーパーを読んだり、対象のファイルをもう1回違う視点から見たり、前にやってみたけれどもあんまり性能が上がらなかったものを組み合わせる」とか、そういったことを言っています。

最後に、「ユーザーはきっとあなたがやってる間に寝ていて、実験が終わって起きた時に実験結果を見るでしょう」みたいなことが書いてあります。

◆一晩の自動実験がもたらした驚異的な成果と未来像

これを使って、実際に改善することができています。最小構成なんですが、一応ちゃんとしたLLM実験です。人間が大学生にいきなりやれって言ってもできないし、大学院生だったとしても大変だと思うんですけれど。

先ほどのベースラインに対して、ステップ数10件の4回目ぐらいで「バッチサイズをまず半分にすると性能が上がる」っていうのが分かって、「学習の初期のウォームダウンの係数を変える」「ウォームアップを5%上げる」。

だんだん下がってきて、「アーキテクチャのアスペクト比を変える」というのを見つけて、「埋め込みじゃないところの学習率をちょっといじって」、「スライディングウィンドウパターンを変えて」、「もっとスライディングウィンドウを短くする」ということをしています。

ちなみに、このグラフも全部自動で出てきます。さっきのprogram.mdで、ディスクリプションって説明しましたが、あんな感じでgitから説明を作って、TSVを作って、こういうのができるようになっています。

ここも後で見せるノートブックで最小限の手作業はあるんですが、こういうデータを抜き出すみたいなことも自動でやっています。

一晩寝ている間に16個ぐらい改善する方法が見つかります。ちなみに薄く白い点が入ってる箇所があるんですが、これは失敗した実験ということです。70回ぐらいの実験をして改善できています。

個人的に一番衝撃的なのは、これはたまたまLLMですけども、別の問題に変えて、データを適切に置いて、それこそこれをちょっとコピペだけ変えてやったら同じ枠組みでできて、寝てる間にせっせと実験回して動かしてくれる。

ここにはエージェントみたいな概念は入ってなくて、(Claude Codeの中でサブエージェントを勝手に作っているだとかはありますが)特別な仕組みなしにこのコードだけでできているのがすごいと思います。

PFNは新しい仲間を
募集しています

未掲載事例、プロダクト・ソリューション、研究開発についてお気軽にお問い合わせください