g1 - GroqでLlama-3.1 70Bを使い、o1のような推論チェーンを生成
(github.com/bklieger-groq)- g1は、Groq上でLlama-3.1 70Bとプロンプト戦略を使い、LLMが段階的に「考える」o1風の推論チェーンを生成する初期プロトタイプ
- OpenAI o1とは異なり、すべての推論トークンをユーザーに見せ、オープンソースモデルを使用するが、o1の完全な複製や直接比較ではなく、プロンプトベースの推論実験である
- 各ステップでモデルは、次の推論ステップへ進むか最終回答を出すかを選択し、ステップごとにタイトルと内容をJSONで返すよう設計されている
- プロンプトは最低3ステップ以上、代替案の探索、自身の誤りの可能性の点検、最低3つの方法の使用を要求し、Strawberry問題ではLlama-3.1-70B単体の0%、ChatGPT-4oの30%に対し、約70%の正答率(n=10)を示した
- 初期テストでは単純な論理問題で60〜80%の正答率を示したが、正答率はまだ公式評価されておらず、g1も完全ではない
g1が解決しようとしている問題
- g1は、プロンプト戦略だけでLLMの推論能力を改善しようとする初期プロトタイプ
- 目的は、LLMが通常苦手とする論理問題をo1風の推論チェーンで解かせること
- OpenAI o1との違いが明示されている
- g1はすべての推論トークンをユーザーに見せる
- g1はオープンソースモデルを使用する
- g1はo1の完全な複製でも性能比較でもない
- OpenAI o1は、大規模な強化学習によってChain of Thought推論を学習し、複雑な博士レベルの問題で最先端の性能を達成する方式である
動作方式
- g1はLlama3.1-70bを基盤に、動的なChain of Thoughtに近い推論チェーンを生成する
- 各推論ステップはユーザーに表示され、ステップごとにタイトルが付く
- モデルは各ステップで2つのうちどちらかを選択する
- 次の推論ステップへ進み続ける
- 最終回答を提供する
- システムプロンプトには、モデルにより良い推論をさせるための指示が含まれる
- 代替回答の探索
- 最低3つの方法で答えを導く
- 以前の草案解法に疑問を投げかける
- LLMの限界を考慮する
プロンプト戦略
- プロンプトはモデルに、段階的なreasoningを説明する専門家AI assistantの役割を与える
- 各ステップは、
title、content、next_actionキーを持つJSON形式で応答しなければならないnext_actionの値はcontinueまたはfinal_answer
- 大文字で強調された指示によって、プロンプト遵守を高めようとしている
- 可能な限り多くの推論ステップを使うが、最低3ステップを使う
- LLMとして可能なことと不可能なことを認識する
- 代替回答を探索し、自分の推論が誤り得る箇所を考慮する
- 再検討すると言うときは、実際に別のアプローチで再検討する
- 最低3つの方法で答えを導く
- ベストプラクティスを使う
- 問題をユーザーメッセージとして追加した後、assistantメッセージとして標準の開始文を入れ、生成が始まるようにする
例と初期結果
- g1は「strawberryにはRがいくつあるか?」のようなStrawberry問題で、プロンプトなしでは解きにくい単純な論理問題を扱う
- この問題の初期数値が示されている
- g1: 約70%の正答率、n=10
- Llama-3.1-70B プロンプトなし: 正答率0%
- ChatGPT-4o: 正答率30%
- 初期テストでg1は、LLMが通常苦手とする単純な論理問題を60〜80%の正答率で解決した
- 正答率はまだ公式には評価されていない
- 例題として
How many Rs are in strawberry?とWhich is larger, .9 or .11?が含まれる
実行方法と関連フォーク
- Streamlit UIの実行手順
python3 -m venv venvsource venv/bin/activatepip3 install -r requirements.txtexport GROQ_API_KEY=gsk...streamlit run app.py
- Gradio UIの実行手順
cd gradiopip3 install -r requirements.txtpython3 app.py
- 関連フォークとデモ
- Hugging Face Spaces Demo
- Mult1: 複数のAIプロバイダーを使ってo1風の推論チェーンを生成
- thinkR: RでローカルLLMによるo1風のChain of Thoughtを実装
1件のコメント
Hacker News のコメント
これはまったく正しくないし、かなり的外れです。ループの中で思考の連鎖を回している程度です。
Tree of Thoughts はもっと洗練された手法で、論文は https://arxiv.org/pdf/2305.10601 を参照してください。
OpenAI が以前から木探索をしているという手がかりはあり、Noam Brown を採用したことや彼の過去の研究もすべてその方向を示していました。Q は A* のような木探索であることは明らかに見えます。CoT のようなもので木を作り、その中で最適解を探す探索こそがシステム2推論です。
モデルに段階的に考えるよう指示したからといって、o1 のような推論が開放されるわけではありません。これは 2020 年に GPT-3 にも使われていた古い小技で、そんなに単純なら OpenAI がリリースまでこれほど時間をかけることはなかったでしょう。
さらに、プロンプトの一部は逆効果になる可能性があります。「LLM としての限界と、できること/できないことを認識せよ」のような指示は、LLM が自分の限界をよく理解しているわけでもないため、モデルが過度に慎重になり、誤った拒否を生む可能性が高いです。
DeepMind は研究と論文公開により重点を置いていますが、OpenAI と Anthropic が論文の成果を利用しながら研究コミュニティには何も還元しない可能性がある競争環境では不利です。
学習中により堅牢な推論を学ぶために木へ拡張した可能性はありますが、推論時には結局、通常のTransformer モデルに帰着します。
「指示の重要性を強調してプロンプト遵守率を上げるために全部大文字で書く」という発想が、今でもあまりに面白いです。
AGI を初めて動かす人が「私のペットの命が答えにかかっている」と大文字で言えば、LLM の信頼性がしきい値を超えると気づくような感じなのかもしれない、とも思います。
o1 の革新は思考の連鎖そのものではありません。単にそのふりをするのではなく、モデルが CoT をうまく行えるように大規模な人間のフィードバックで教えた点にあります。
プロンプトエンジニアリングだけでは o1 の性能には到達できません。
ただし STEM の話題を語る人たちは概して知能が高めかもしれませんし、宿題を質問する成績の低い学生も多く混ざっています。より高い知能の出力を得るには、より多くの低知能な回答の欠陥を批判して排除し、高知能な回答を好むようにする必要があるかもしれません。あるいは教科書などでより強く学習させる方法もあります。誤りをどう拒否するか、誤った推論なしに生成された合成データで学習するかも重要です。
私たちの知らないところで、モデルルーティングとプロンプトエンジニアリングで o1 を動かしている最中かもしれません。
もし単にプロンプトエンジニアリングと複数回の推論を使っているだけなら、それを競争上の秘密として維持しつつ、オープンソース開発者を見当違いの方向へ向かわせたり、Q-Star を再現する方法をいつまでも推測させたりしたいでしょう。
これはしばらく使われてきた一般的なCoTのように見えます。o1 は未知の方針で強化学習をしたため、思考の連鎖をはるかにうまく活用できるのです。
良さそうです。私も optillm で似たようなことをしました: https://github.com/codelion/optillm
どんな LLM でも可能で、cot_reflection を含め、モンテカルロ木探索、plansearch、moa のような複数の最適化手法を使えます。
いつも「推論」の定義を探しています。良い定義が見つかれば、ぼんやりした LLM 的思考と古典的アルゴリズムを組み合わせて「推論」を解くシステムを作れる、というのが私の考えです。
計画、文字数カウント、演繹推論のように、LLM が推論できない問題は古典的アルゴリズムには簡単です。思考過程を 2 つの部分に分け、それぞれの部分を適したモデルで実行する方法が必要です。
2 世紀前にはコンピュータがなかったので、すべてを人間がやる必要がありました。コードを持ち出す前に、まずそのレベルに到達しなければなりません。
ollama:8b で100% ローカル実行されるように変えました: https://github.com/punnerud/g1
Readme はまだ更新していません。
ちなみにこれはシステムプロンプトにすぎず、微調整されたモデルではありません。
「プロンプト: .9 と .11 ではどちらが大きいか?」
「結果: .9 は .11 より大きい」
ついにセマンティックバージョニングの壁を突破しました。
面白半分でプロジェクトをフォークし、Ollama で Llama-3.1 7B や他のモデルをローカルで動かせるようにしました。
strawberry 問題は解けませんが、0.9 のほうが大きいことは分かります。
https://github.com/esoltys/o1lama