ラズベリーの紹介 – ストロベリーを再現するオープンソースの試み

AIに仕事を奪われたい
この記事は約14分で読めます。

7,780 文字

Introducing Raspberry, an Open Source attempt to recreate Strawberry
All my links:

おおきに、みなさん。ちょっと前ですけど、ストロベリーっていうんをリリースしたんです。ベンチマークとか評価では、かなりええ感じに見えるんちゃうかなぁ。
でもな、技術的な観点から言うたら、ワイはこの分野で長いこと経験積んできて、モデルのファインチューニングもようけやってきたさかい、どないしてこないなもん作ったんか、だいたい分かるんです。
そやさかい、昔のチームを集めたんですわ。うちのチャンネル見てはる人やったら知ってるかもしれんけど、最初はGPT-3のプロンプトエンジニアリングとファインチューニングのチュートリアルからはじめて、その後、ACEフレームワークチームで認知アーキテクチャも作ったんですわ。
今日はちょっと懐かしい感じで、昔みたいにコーディング実験をやってみようと思うんです。今回はこのプロジェクトの一部分だけ取り上げるさかい。
小さなオープンソースチームで、OpenAIに勝てるかどうか分からんけど、理論的推論ができるモデルを作ってみようと思うんです。OpenAIは文字通り何十億ドルもの資金があるさかい、SOTAのベンチマークに達するのは無理やと思うんやけど、小さなオープンソースチームでも大企業に近づけるんやったら、それはそれですごいことやと思うんです。
ワイ個人的には、AI Explainedのフィリップが作ったSimple Benchでの推論タスクで、Claude 3.5を超えたいんです。現行モデルは27%しか正解できてへんさかい、30%まで行けたら、現行モデルを超えられるわけです。
現行モデルを使って学習させるんやから、それが出発点になるわけですな。Simple Benchでできるだけ高い成績を目指すのが目標です。
アプローチの仕方を説明しましょか。これから何回かに分けて動画を作っていくつもりやさかい、今日は全部終わらせられへんと思います。数週間くらいかかるかもしれません。
まず最初は、全部合成データから始めます。これは今までのモデルでもそうやったんです。
ワイが最初にアクセスできたGPTはGPT-2やったんですけど、基本的にはちょっと賢くなった自動補完エンジンみたいなもんでした。パターン認識エンジンって言うてもええかもしれません。
そやから、バニラの未調整モデルやったらGPT-2、GPT-3、GPT-4とか、全部自動補完エンジンなんです。特定の動作をさせたかったら、ファインチューニングせなあかんのです。
OpenAIが最初にリリースしたファインチューンモデルは、インストラクト・アラインシリーズでした。これは単一の指示に従えるようになってたんです。
バニラモデルを使って、ユーザーデータと合成データを組み合わせて、インストラクトモデルを作ったんです。そこからチャットボットを作れるようになったんです。
ワイのYouTubeの過去の動画で「David Shapiro chatbot」とか検索したら、ようけチャットボットの動画が出てくると思います。
インストラクトモデルを使ってチャットボットを作れるようになって、それがChat GPTのローンチにつながったわけです。
ワイらは、GPT-3.5とChat GPTが出る何ヶ月も前から、GPT-3を使ってチャットボットを訓練してたんです。
で、チャットボットは物事を繰り返し考えられるようになったんです。その動作の例をちょっと後で見せますわ。
つまり、バニラモデルからインストラクトモデルができて、そこからチャットボットができて、そこから推論ができるようになったってわけです。
推論の例を見せましょか。OpenAIがどないしてこれを作ったか、示してくれてるんです。どんなデータを生成せなあかんか、基本的に見せてくれてるわけです。
「ここに問題があります」っていうプロンプトを与えて、「思考の連鎖を示してください」って言うてるんです。問題について考えていく過程を見せてるわけですな。
オープンAIのGomez Brownさんが確認してくれたんですけど、これは複数のエージェントシステムじゃなくて、一発で考え抜くように訓練された単一のモデルなんです。
一つの意識の流れというか、一つの思考の流れがあって、それが問題を考えていくわけです。
単純な論理を使ってるだけで、AI ExplainedのPhillipの動画見たら分かるんですけど、本当の意味で一から推論してるわけやないんです。
ようけの問題を見てきたから、どないして問題を考えていけばええか分かってるだけなんです。つまり、推論の練習をようけしてきたから、意識の流れを使って推論するのがモデルに組み込まれてるってことです。
ワイがTwitterで書いたら、みんな心配したんですけど、これは思考連鎖推論を整理してモデルに組み込んだだけなんです。
例えば、誰かがワイにチャレンジをくれたんです。Claudeにこのデータを生成させるプロンプトを見つけたんです。
まず、プライミングせなあかんのです。モデルのプライミングは、ワイが長いこと使ってきたテクニックです。潜在空間活性化って呼んでるんですけど、一部の人はこの用語に文句言うてきます。でも、代わりの言葉を提案してくれへんのです。
キーワードでモデルを準備するってことです。「難しい問題を出すから、思考連鎖推論かシステム2思考のテキスト形式で解いてな」って言うてるんです。
そしたら、Twitterで誰かがくれた問題を与えたんです。Claude、一発で正解したんです。
ワイ、株価の計算方法知らんのやけど、適切なプロンプトを与えたら、Claudeはもうこういう基本的なことができるんです。
問題の解き方をサラッと出してくれたんです。Claudeがもうこういうの計算できるってことは、問題解決に関するデータを合成できるってことです。
これを見て、これは実現可能なアプローチやと確信したんです。チャットボットを使って、十分な問題があれば、推論器をブートストラップするのに十分なデータを合成できるんです。
「難しい問題を出すで」って言うて、ほぼ同じ出力が得られたんです。会話の舞台を整えて、「出力は平均3000語くらいやから、余裕あるで」って言うたんです。
「10語の意味の通る文章を作ってくれ。ただし、各単語は前の単語より1文字多くなるようにしてくれ。最初の単語は1文字で、10番目の単語は10文字になるようにな」って言うたんです。
Claudeに「思考連鎖推論とシステム2思考を使え」って言うただけで、OpenAIが苦労して訓練したって言うてるのと同じような動きをしたんです。
これをどう解釈するかはいくつかあるんです。一つの可能性は、Anthropicも同じようなことに取り組んでたってことです。実際、元の思考連鎖の論文は2年半以上前に出てるし、Anthropicも2年前に設立されてるさかい、同じ技術や理論に基づいてる可能性はあります。
ここで証明したかったこと、まぁ証明っていうか証拠を示したかったことは、OpenAIは本当の意味での研究をしてるわけやなくて、他の人が見つけた研究を商業製品に組み込んでるだけってことです。
確かに、それにも経済的価値はあるんです。ワイがOpenAIを批判するときは、基本的に「他の誰かが作り方を見つけたソーセージを、ただ作ってるだけやで」って言うてるんです。
まぁ、とにかく。AnthropicのClaudeから正しい動作を引き出せることが分かったんですけど、最初のショットでは正解にならんかったんです。
最終確認で、「I to the only child always craving attention from everybody」って出てきたんですけど、これは意味の通る文章やないし、ルールにも従ってへんのです。
そこで、「惜しいけど、もう少しや」ってフィードバックを与えただけです。つまり、検証器が必要ってことです。
Claudeに問題を与えて、ちょっと励ますだけで、自分で修正できるんです。
間違いを認めて、もう一度やり直してます。自分で何回かキャッチしてるのが分かります。
「ちゃんとできてへんわ、別の方法でやってみよう」って言うてるんです。
「A2 the four fives happily always happily creating wonderful situations」って出てきたんで、ちょっと押してみたんです。「ほぼ意味通ってるで、難しいな」って言うたんです。
そしたら、構造を再確認して、もっと言葉を考えて、一般的で使いやすい選択肢に焦点を当ててみたんです。
方法を考え出したんです。LLMsが計画を立てられへんって言う人がおるんですけど、ワイには何年も前からさっぱり分からん話なんです。
GPT-2の頃から、正しく使えば計画を立てる能力があるのを見てきたんです。
2回失敗したにもかかわらず、「I am the most Adept person quickly becoming unusually perceptive」って出してきて、自分で確認もしたんです。
これをコピーして、実際の作業を始めるところです。
このデータをファインチューニングして、実際に訓練する方法を見つけなあかんのです。
普通やったら、全過程を一緒に歩んでいくんですけど、ちょっと退屈かもしれへんので、このデータを整理して、すぐに戻ってきます。
ワイがやったことをお見せしますわ。ほな、ちょっと待っててな。
はい、戻ってきました。最初のサンプルを整理したんで、どんなデータが必要かの例をお見せしますわ。
基本的に、これの多くを難読化せなあかんのです。ここまでは基本的に削除せなあかんのです。
将来的に、Claudeはシステムプロンプトとか、そういうのは必要なくなるはずです。これは、一部の人が感心してたことなんですけど、システム指示が必要ないってことに。
システム指示がないかどうかは分からんのやけど、システム指示をデータセットに組み込むことはできるんです。
基本的に、ここから始める必要があります。「10語の意味の通る文章を書いてください。各単語は…」って指示を出すところからです。
ここまでの、どう振る舞うかとか、何をしようとしてるかについての指示は全部省けるんです。
次に捉えたいのは、まずユーザーの入力で、それから処理過程です。
でも、このデータを整理するためにいくつかやらなあかんことがあります。
まず、正しい解決策を出せたかどうか確認せなあかんのです。
Claudeに戻って、手動でどうアプローチするかをお見せしてるんです。
「このプロセスが正しかったか確認できる?基本的に、訓練データを採点してるんやけど、サンプルの質を自動でチェックできるかどうか確認したいんや」って聞いてみました。
他の文脈は与えずに、Claudeにこのサンプルを読んで、どう思うか教えてもらおうと思うたんです。
「解決策を一歩ずつ見ていきましょう」って言うてきました。「まず、文章は確かに意味が通ってます」って。
ちなみに、arXivにはこれに関連する研究がようけあります。
perplexityを使って、「LLMsがお互いの出力の質を、ルーブリックとかを使って採点できるかどうかの科学論文をarXivで検索して」って聞いてみました。
そういう研究があるのは知ってたんですけど, どんなんがあるか見てみたかったんです。
「最近の論文をいくつか見つけました。大規模言語モデルを使って、自分自身の出力も含めて採点や評価をする研究があります」って。
つまり、もう自分で自分を採点できるってことです。これは、少なくとも出力サンプルを自動で採点するのに使えるってことですな。
せやから、次にせなあかんのは、これを整形し直すことです。Claudeがこれを整形し直せるかどうか見てみましょう。採点して整形し直すのを2ステップでできたら最高なんです。
「よっしゃ、このデータサンプルをJSON形式にきれいにせなあかんのや。最終的には2つのフィールドだけにせなあかん。つまり、各ポイントには2つの要素があるってことや」
JSONLフォーマットがどないなってたか忘れてもうたんですけど、基本的には「prompt」と「response」やったはずです。
「promptはユーザーの実際のクエリで、前置きの部分は含めへんでええ。responseは、Claudeの推論と解決策だけで、他の会話の部分は削除してな」って指示しました。
「サンプルからの推論を整形し直して、ユーザーが励ます必要がないようにせなあかんのや。分かるか?チャットボットが自分自身を励まし、自分の推論を修正したり向き直したりしてるように見せなあかんのや。
間違った論理を使うてもええで。それも推論のプロセスの一部やからな」
ファインチューニングするときは、正しく動作する例と、自分の間違いを見つける例の両方が必要なんです。
各サイクルで、間違えたら立ち止まって振り返って、「あかん、これ正しくないわ」みたいなことを言わせるんです。これ、訓練データのサンプルの質にめっちゃ重要なんです。
全部分かったか?
Claudeが「はい、完全に理解しました」って言うてくれたんで、アーティファクトを生成してくれました。
これ、かなりうまくいきそうですな。自分で修正してるし。
これをクリップボードにコピーして、どないなってるか見てみましょう。
ステップバイステップでアプローチしていきますわ。ワイの大きな人間の脳を使って、エクサフロップくらいで動かしてるんですけどね。
まぁ、新しいスーパーコンピューターができるたびに、人間の脳の推定能力が何桁も上がるんですけどね。ワイの頭の中にエクサスケールのコンピューターがあるって言うたら、何桁も間違ってる可能性は十分あります。
逆方向に間違ってるとは言わんといてな。ペタフロップはないけど、それ以上はあるはずや。少なくとも、ほとんどの日はな。
さて、10語の文章、構造を作って…10文字…問題を考えてるな。
「まだ間違えてるわ。単語の長さにもっと注意せなあかん」
おっ、いいぞ。3回目の試み。「a to the four」…
この文はすべての基準を満たしてるけど、もっと意味を通じるようにできると思う、って。
これ、ええ自己対話やな。これを「リフレクション」って呼ぶんです。基本的に、思考連鎖推論とリフレクションを組み合わせて、OpenAIが共有してたようなデータポイントを作ってるんです。
このプロセスは比較的単純ですな。もっとようけせなあかんけど。
最後の試み。「I am the most Adept」…
単語の長さを保ちながら、意味をもっと通じるようにできるって。
この文は全ての基準を満たしてる、と。
ただ、これが正しいかどうか分からんのです。元に戻ると、「ほぼ意味が通ってる」って言うてたんです。
実際、かなり短くなってるんです。
これ、8,500文字くらいありますな。8,500文字やと、平均して1トークンあたり3~4文字くらいやから、2,000から3,000トークンくらいですかね。まぁ、予想通りの長さやな。
でも、この実際のサンプルの長さを見てみると…元の半分以下やん。
これはあかんけど、まぁ最初の試みやしな。
「ええけど、元の推論の半分以下の長さになってもうたな。元の推論を削りすぎたみたいや。もう一回やってくれへんか?元の推論は全部残して、変えなあかんのは、ユーザーの励ましの部分だけや。チャットボットが一発で全部の推論をしたように見せなあかんのや。分かるか?」
ここでやってるのは、プロンプトの技術を磨いてるんです。
Claudeが処理してる間に、プロンプトの理論、哲学について話しますわ。
最初は「これがほしいんや」って言うて、フォーマットを与えて、「これがデータを整理するのに必要な出力や」って言うたんです。そしたら、データサンプルを生成してくれたんです。
でも、何を残したいかを明確に説明できてなかったんです。推論の全部を残す必要があるって指定せなあかったんです。
これも同じくらい短いように見えるなぁ。何か抜けてる気がするわ。
間違いを特定できてるのはええんやけど、ワイが何か間違えてるんちゃうかって気がするな。
7,000文字か…3,000文字に比べたらマシやな。
ああ、ちょっと早く見すぎたみたいやな。
7,000文字なら大丈夫です。
この動画、ちょっと長くなってきましたな。25分経ってるし、みなさんの注意力も落ちてきてると思います。
でも、始めるには十分すぎるくらいです。何をしようとしてるか、どないしてこの合成データセットプロジェクトにアプローチしようとしてるか、理論的には分かってもらえたと思います。
Claudeはコードや数学を使って自分自身を検証できるから、それを使ってサンプルを検証できるんです。
今日カバーしたステップを簡単にまとめると:

たくさんの質問が必要です。今日は質問を合成しようと思ってたんですけど、まずアプローチを証明せなあかったんです。
質問を与えて、データを整理します。
ユーザーの代わりになるものが必要です。

元の会話に戻ると、体系的な問題解決ってことですな。
データを合成するとき、これが必要になります:
まず、こういう推論を必要とする質問をたくさん用意せなあかんのです。
PhDを持った人に何万もの質問を書いてもらうのは現実的やないから、質問を合成する方法を見つけなあかんのです。
次に、これらの会話を合成する方法を見つけなあかんのです。
それから、解決策の妥当性を確認する方法を見つけなあかんのです。
さっき示したように、ファインチューニングのためにデータを整理できるんです。
基本的に4つのステップがあります:

ようけのええ質問を合成する
それらの質問に対する会話や解決策をようけ合成する
解決策の完全性と質を検証する
ファインチューニングのためにデータを整理する

これが、ワイらがやろうとしてることのざっくりした説明です。
4つの基本的なステップに分解したんです。ここにも書いてあるんですけどね。
多分、議論のセクションにノートを追加すると思います。参加したい人はどうぞ。
プライベートチームはもうあるんで、プルリクエストは送らんでくださいね。でも、会話に参加するのは大歓迎です。
多分、研究セクションにこれを追加すると思います。
見てくれてありがとうございます。このプロジェクトは時間がかかりますけど、推論に関して最先端のレベルに少しでも近づけるかどうか、見てみましょう。
少なくとも、訓練に使った元のモデルは超えられるはずです。
個人的に、研究の世界にずっといた者として、OpenAIがやったことで魔法みたいなものは何もなかったと思うんです。
ベースモデルを作って、それをファインチューニングするだけです。
多くの人が強化学習について混乱してるんですけど、これが強化学習のやり方なんです。
どんどんサンプルを増やして、良いサンプルと悪いサンプルを選別していく。これが強化学習なんです。
まぁ、もう長々と喋ってもうたな。見てくれてありがとう。じゃあな!

コメント

タイトルとURLをコピーしました