_あなたがメンバーではないが、この記事を読みたい場合は、この友達リンクを確認してください。 _
チェーン思考(COT)はしばらく前から存在しており、技術的には高度なチップエンジニアリングですが、最初の導入から数年後でも、今日でも重要な重要性を持っています。すべての形式のCOTは、多くの場合、大きな言語モデルに推論を強制することを目的としています。
今年9月にOpenaiがモデルO1プレビューバージョンをリリースした後、COTに関する人気が高まっていることがわかりました。
O1の仕組み(Openaiを除く)、組み合わせシステムであるかどうか、微調整に使用するデータ、補強学習が使用されるかどうか、または複数のモデルが一緒に動作するかどうかは、正確に正確にわかりません。
おそらく、1つのモデルが計画の責任を負い、もう1つのモデルは思考の責任があり、3番目は評価の責任があります。しかし、彼らは何らかの段階的な推論アプローチを取っていることを知っています。
この問題については多くの公的研究が行われており、それを掘り下げる必要があるかもしれません。そのため、この投稿では、既存の方法をカバーして、使用できる方法がわかります。もちろん、さまざまなテクノロジーをテストして、実際の改善ができるかどうかを確認します。
それから、あなたがいくつかの技術的な仕事をすることに熱心であるならば、私はあなたがモデルの内部信頼レベルを調べて回答を生成するシステムを構築するのを助けます。
過去2年間で、多くの論文が公開されており、私がここで見つけた多くの論文を収集しました。
以下の写真で彼らが議論する推論のテクニックを見るでしょう。
作業のほとんどは、DeepmindまたはPrinceton Universityから直接来ています。たくさんの仕事を開いてくれたことに感謝します。
単語のベッドコットは、ディープマインドの2022年の論文からのもので、プロンプトでのみ使用して、最新の論文では、モンテカルロ検索とコットをプロンプトなしで2回探索します。
また、これらの推論手法を使用する際にできる改善を理解するために、独自のデータセットを使用します。
大規模な言語モデルのベーススコア大規模な言語モデルの結果を改善する方法を理解するには、まず何らかのベンチマークスコアを確立する必要があります。
ただし、これらのデータセットの一部は時代遅れであり、少し汚染されている可能性があることを知っておく必要があります。
Facing Faceは12月に新しいLLMランキングを開始しました。これは、新しいデータセットに基づいて評価され、ほとんどのモデルが元のデータセットよりもはるかに低いスコアを持っていることが明確にわかります。
ここでは、モデル評価をどのように検討すべきか、そしてあなたと組織が評価すべき理由を理解するために、ここで調査を行う価値があります。テスト用の内部プライベートデータセットを持つことは最悪のアイデアではないかもしれません。
しかし、とにかく、私はさまざまなデータセットから約350の質問を抽出し、最大11の異なるモデルを評価するためにオンラインで見つけたいくつかの一般的な質問を抽出しました。
また、これらのデータセットと大規模な言語モデルによって生成された答えがどのように見えるかを理解する必要があります。したがって、これらの質問をループするために独自のスクリプトを作成し、各質問の0または1を使用して大きな言語モデルを評価しました。
あなたは私を完璧主義者と呼ぶことができます。あなたは私が以下に見つけたものを見ることができます。
これは私たちに何を教えてくれますか?まあ、それほどではありません。
ただし、より大きなモデルのパフォーマンスが向上していることがはっきりとわかります。
興味深いことに、モデルの理由を作成し、答えの前に「考える」方法を適用することで、これらのスコアを改善できますか。
チェーン思考(COT)
COTのアイデアはかなり長い間存在しています。
ただし、この最初の論文は、キュー戦略を使用してモデルの固有の推論能力をアクティブにすることにより、モデルを問題について推論する方法に関する研究です。
当時、人々はモデルに「徹底的に考える」ように依頼することで正しい方法を促していました。これは、サンプル(例を提供しない)または少数のサンプル(いくつかの例を提供する)で達成できます。
今日、プロンプトの最後に「段階的に考えよう」を追加するだけで、Claude、ChatGpt、またはその他のモデルなどのさまざまなモデルに対してこれを行うことができます。より少ないサンプル学習を試みたい場合は、プロンプトにいくつかの例を提供できます。
DeepMindは、プロンプトを正しく行うことでCOTテクノロジーの使用における大幅な改善が改善されることを確認できると報告しています。
推論チェーンを構築します
エンジニアリングコミュニティの多くの人々がCOTスタイルのテクノロジーを使用して実験します。ここで見つけたリポジトリのほとんどを収集したので、簡単に見つけることができます。
少し前に、ベンジャミン・クリーガーは、GROQとLlama 3.1 70bを使用して、思考プロセスをさらに分解することでチェーン思考を誘導するプロンプトスタイルのアプリケーションを構築したものを強調しました。
ここで彼のアプリを見つけることができます。
アイデアは、大きな言語モデルにその考え方をチェーンに分解するように依頼することであり、答えに自信に満ちているまで考え続けるでしょう。
システムは、1つの応答で思考プロセス全体を持つのではなく、チェーンの各部分に対して大規模な言語モデル呼び出しを生成し続けます。
これをGrok-betaに適用する例を参照してください。質問は、「イチゴにはいくつありますか?」 モデル自体は、各セクションを設定し、名前を付けて、別の「アイデア」が必要かどうかを決定します。
これは、線形関係があるため、COTスタイルのテクニックですが、モデルに「段階的に考える」ように依頼するよりもわずかに高度です。
以下の割合の改善が表示されます。
llama 3.1 70bは、最初の3つのカテゴリで最高の改善を達成しました。グロックはパンデミック(俳句と同様)で悪化しています。
Putnam Datasetは高度な数学であり、この点でうまくいくことができる大きな言語モデルはほとんどないので、Claude Sonnet 3.5がこれらのCOTチェーンで68.75%でO1-Preview(O1-Preview)を上回ることができたとき、私はそれが驚きました。 63%でした)。
全体として、SONNETのCOTの使用により、高度な数学が81%改善されました。
ここでは非常に小さなデータセットを使用していることを忘れないでください。それは、それらが何をしているのか、スコアを改善できるかどうかを理解するためだけです。より大きなデータセットでテストせずに具体的なものは教えてくれません。
しかし、小さなモデルが単純な問題を過度に分析し始めた場合、より悪い結果が生じる可能性があることも観察しました。これは、Grok-BetaとHaikuの人気のある「簡単な」問題で明らかです。また、モデルを能力の範囲内で動作させるようにプッシュできるが、能力を超えることはめったにないことを覚えておく必要があります。答えがわからない場合、それは知りません。非出生型の問題が簡単な問題は、COTと同じ利点を得ることができない場合があります。
推論のための微調整
続行する前に微調整について言及したいと思います。
非常に興味深い領域は、COTデータセットの小さなモデルを微調整して精度を向上させ、モデルの1〜2倍の精度に達することです。
複数のリソースを見つけましたが、残念ながら、適切な分析に値すると思われるベンチマークモデルの大幅な改善は見つかりませんでした。
以下に私が見つけたオープンソースモデルが表示されます。
以下に私も見つけたオープンソースのコットデータセットが表示されます。
これは、COTの微調整が機能しないということではなく、より良い、文書化されたモデルを構築する必要があるだけです。
自分で微調整してみたい場合は、これらのリソースをチェックしてください。より多くのリソースがあると思います。
これまでのところ、スレッド(またはチェーン)で出力を生成するモデルの線形手法を研究してきました。
しかし、最初のCOTペーパーの公開直後、Deepmindは、自己矛盾したチェーン思考(COT-SC)と呼ばれるより高度な技術を提案しました。
この手法は複数の推論パスを作成し、何らかの方法を使用して、最後に最も一貫した回答(またはパス)を選択します。
この方法を使用して、算術推論が約1〜8%の改善が得られたと報告しています。
前のセクションで説明した貪欲なデコードのアイデアを覚えていますか?
このアプローチは類似していますが、最も可能性の高いマーカーを強制するだけでなく、応答全体の信頼スコアも調べます。
これを行うには、システムは最初に一定数のK初期トップレベルマーカーを起動し、次に各マーカーからパスを生成します。回答が生成されると、異なるパスの各マーカーの確率(ロジット)を分析することにより、信頼スコアを計算します。
この方法はデコードCOTと呼ばれ、DeepMindによって提案されています。このアプローチのアイデアは、戻り回答に対するモデルの内部自信を確認することです。
しかし、質問に答えるための固有の知識がない場合はどうなりますか? COT-SCと同様に、このアプローチは、そもそもモデルが正しい答えを持っているかどうかに大きく依存します。
しかし、これはそれをテストすべきではないという意味ではありません。
これらすべてのテクノロジーについては、オープンソースにはさまざまな実用的な実装があり、これも例外ではありません。
したがって、これらの方法をテストするシステムを構築し、より小さなオープンソースモデルLlama 3 8bを使用して、どれが優れているかを比較するのは簡単です。
オープンソースの彼の実装をしてくれたCodelionに感謝します。これにより、複製が簡単になります。
上記の結果を見ると、デコードコットを使用して、エントロピーやその特定のモデルのみの貪欲なデコードなどの他の方法と比較して、明らかに最良の結果を生成することがわかります。
このデコードコットシステムを使用して、その仕組みを理解できるようにする技術セクションにAPIを作成します。
追いつくのは難しいですが、研究はより高いリスク分野での推論のために単純なベッドを使用することをはるかに超えています。
これは別のトピックだから、これらの戦略のすべてをカバーするわけではありませんが、特にモンテカルロ検索と併用している場合は、2回(TOT)を考えたいと思います。
TOTはプリンストン大学と2023年の終わりにディープマインドによって提案されましたが、通常、以前の樹木ベースの推論方法に基づいています。
(TOT)を行う前によく考えてください。複数のパスを生成して生成した後に評価する代わりに、TOTが進行するにつれて出現したアイデアを動的に評価します。
問題を解決するために協力して4人の異なる人々と考えてください。各ステップで、彼らは自分のアイデアを提示し、どのアイデアが最も有望なかを共同で評価します。推論が欠陥があるように見える場合、彼らは去るので、他の人は彼らの問題に取り組み続けるでしょう。
最後に、正しく推論できる人は答えを提供できるでしょう。
これにより、モデルは、より有望なスレッドに焦点を当て、リソースを節約できる可能性があるため、モデルが悪く見えるパスを動的にトリミングできます。しかし、システムがどのスレッドが正しいか、どのスレッドが間違っているかをどのように決定するかを疑問視するかもしれません。これは、モデル自体によって決定されます。
これが、モンテカルロツリー検索(MCTS)のような拡張が、より公平な評価メカニズムを提供する理由です。 MCTSを使用すると、Back -Propagationが可能になります。つまり、新しい情報に基づいて初期ステップを再検討および改善できますが、単純なTOTは前進するだけです。
4人の問題解決症例では、MCTは人々が理想的なアイデアよりも少ないアイデアを持つことができ、それでもゲームに長く留まることができます。評価方法は異なります。
MCTは、複数の将来のパスをシミュレートし、その可能性を評価し、早期の意思決定を改善するためにバックトラックを行うことができます。モデルに完全に依存するのではなく、外部メトリック(報酬)を導入します。
UCB(上部信頼境界)などの統計これらの報酬を使用して、さらに探索または再訪するアイデアを決定します。MCTSは、単純なTOTよりも少し複雑で、個別に書かれている場合があります。
cot
の経済
それで、これまでのところ、いくつかの改善があると思うかもしれません。より高度な形のチェーン思考を常に使用しないのはなぜですか?さまざまなモデルに適用したチェーンの場合、推論手順の平均数を計算しました。
これを見て、平均して質問ごとに8倍以上支払うことができます。高度な数学の問題で最適なSonnetの場合、500の質問ごとに最大15ドルを支払います。
これはそれほど多くないように思えるかもしれませんが、このシステムを使用してカスタマーサービスやチームの回答を毎日生成すると、月に数百または数千ドルを費やすことになります。
場合によっては、常にではありませんが、常にではありません。
COTのために微調整が行われ、基本的に複数のコールを生成する必要性を排除するというケースがあるかもしれませんが、これまでによくやったオープンソースモデルは見ていません。
ここにはいくつかのトレードオフがあります。モデルに効果的に推論するのに十分な時間があるように思考時間を増やしたいと考えていますが、そうすることでユーザーのフラストレーションとコストも増加します。
今年の9月、「COTにかかっているか、COTにないか」というタイトルの論文は、COTの適用の改善のほとんどが主に数学と複雑な推論に反映されていると主張しました。
ここでも、簡単な質問に対する改善が限られています。
これらのチェーンを適用するとき、応答を得るために長く待たなければなりません。それだけの価値はありますか?ただし、これらの戦略はすべて、単純なタスクには複雑すぎる可能性があることに注意してください。
これが、ほとんどの質問でOpenaiのO1を使用するときにイライラするかもしれない理由であり、通常は単純な答えで十分です。しかし、答えが正しいことを確認する必要があるシステムを構築している場合は、何らかの形のベッドまたはデコードを取得することをお勧めします。
質問の難易度に基づいて最初のステップを設定し、最初に回答できると確信しているかどうかを分析する価値があるかもしれません。次に、モデルに(チェーンを介して)推測させ、最後に別のモデルに応答をスコア付けさせます。
note
ほとんどのAIエンジニアはこれらのフレームワークに精通していますが、残念ながら、この研究は一般の人々に予想されるほど迅速に広がっていませんでした。
COTの実装方法を学ぶことは、使用しないことを決定したとしても、LLMアプリケーションの構築の基本の一部である必要があります。
技術的な仕事
オープンソースモデルllama 3.1 8bを使用して、デコードCOTシステムを実装します。
コットを解読する方法は、今年リリースされた論文「チップなしのチェーン思考の推論」に由来し、実装はここで見つかったCodelionから取得されました。システムが難易度レベルをチェックしてパスの数(k)を決定するようにいくつかの機能を追加しました。
前回モーダルを使用したため、今回はビームを使用できます。これはサーバーレスLLMサービスプラットフォームでもあります。彼らは15時間の無料層を提供しているので、無料です。使用するスクリプトはここにあります。
テストにcolabを使用する場合は、こちらでこのスクリプトを実行できます。
結果は、難易度を評価し、質問でデコードされたCOTを実行し、次の回答を返すことができる質問をすることができるAPIエンドポイントである必要があります。
大規模な言語モデルのリクエストの数と、システムが問題を分類する方法が表示されます。また、評価のために複数の回答を生成しているため、システムが非常に遅いことに気付くでしょう。
正解は27.3であり、追加の燃料のために余分なポイントを取得できます。
このシステムをセットアップするには、5分間の時間をかけます。以下の指示に従うことができます。
顔を抱き締める
既に抱きしめているフェイスアカウントを持っている場合、このプロセスは通常非常に高速です。アカウントをお持ちでない場合は、アカウントを無料で作成してモデルカードに移動できます。
モデルカードを入力したら、モデルをテストし、この新しいシステムをテストするために使用できる質問を確認することもできます。
アクセスしたら、設定に移動してアクセストークンを取得します。
beam.cloud
ビームを使用することにした場合は、ダッシュボードからAPIキーを取得します。
###環境のセットアップ
さあ、始めることができます。新しい端末を開き、新しいディレクトリを作成し、そのディレクトリにCDを作成します。
<code>mkdir my-testing-dir cd my-testing-dir</code>
設定したリポジトリをクローンします。
<code>git clone https://github.com/ilsilfverskiold/decoding-cot-beam.git </code>
仮想環境を作成します(このためにPythonをインストールする必要があります)。
<code>python3 -m venv .venv && source .venv/bin/activate</code>
ビームをインストールして認証します。
<code>pip install beam-client beam configure default --token "your_token_here"</code>
以前に顔を抱きしめたhf_tokenを設定してください。
<code>beam secret create HF_TOKEN</code>
ここから直接サービスを提供できますが、コードを簡単に紹介しましょう。
興味がない場合は、次のセクションをスキップできます。
ルートフォルダーに3つのPythonファイルがあります。
<code>│ ├── app.py ├── question_classifier.py └── cot_decoder.py </code>
app.pyには、ビームからコードがあり、モデルの重量を顔(スタートアップ)からダウンロードし、ボリュームでキャッシュできます。これは、初めて実行すると、不器用で遅くなる可能性があることを意味します。
また、ビームを使用すると、スクリプトがビームでリモートで実行されたときにパッケージを読み込むこともできます。
以下は私のコメントを伴うapp.pyの始まりです:
<code>[...] # 这确保了这些包仅在脚本在 Beam 上远程运行时加载 if env.is_remote(): import torch from transformers import AutoModelForCausalLM, AutoTokenizer from cot_decoder import cot_decode from question_classifier import get_k_value # 模型参数和在卷中缓存的位置 MODEL_NAME = "meta-llama/Meta-Llama-3-8B-Instruct" CACHE_PATH = "./cached_models2" # 加载模型和标记器 def load_models(): tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=CACHE_PATH) tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained( MODEL_NAME, device_map="auto", torch_dtype=torch.float16, cache_dir=CACHE_PATH ) return model, tokenizer # 定义端点 # 您可以指定 CPU/内存/GPU + 图像 @endpoint( secrets=["HF_TOKEN"], on_start=load_models, # 启动时加载模型以进行缓存 name="meta-llama-3-8b-instruct", cpu=2, memory="32Gi", gpu="A100-40", image=Image( python_version="python3.9", python_packages=["torch", "transformers", "accelerate"], ), volumes=[Volume(name="cached_models2", mount_path=CACHE_PATH)], ) [...]</code>
使用するリソース(A100 GPUおよび2 CPUコア)を使用して@EndPointを定義します。また、スタートアップでモデルをロードすることもわかります。
API呼び出しを受信した後、Generate_Text()関数を実行します。
<code>[...] def generate_text(context: Dict[str, Any], **inputs: Dict[str, Any]) -> Dict[str, Any]: # 从 on_start 检索模型和标记器 model, tokenizer = context.on_start_value # 根据问题的复杂性获取自适应 k 值 classification_type = None if k is None: k, classification_type = get_k_value(messages, context) try: output_text, confidence, llm_calls = cot_decode( model=model, tokenizer=tokenizer, messages=messages, k=k, # 使用自适应 k 值 **inputs # 将任何其他参数直接传递给 cot_decode ) # 返回输出 return { "output": output_text, "confidence": confidence, "complexity_info": { "k": k, "total_calls": llm_calls + 1, # + 分类调用 "classification": classification_type } } except Exception as e: return {"error": f"Error during generation: {str(e)}"}</code>
最初にget_k_value()を使用して複雑さに基づいてkを計算する関数があります。しかし、ここでの重要な機能はCOT_DECODE()です。これにより、問題に関するデコードチェーン思考が実行されます。
この関数は、メッセージ、モデル、トークナイザーを受信し、最高のロジットを使用してKの可能性のあるタグを予測するための最初の最初の呼び出しを行います。
ロジットは、可能な各次のマーカーのモデルによって割り当てられた元のスコアであり、各オプションのモデルの信頼性スコアを知らせます。
これらは、複数の回答を生成するための潜在的な出発点として機能します。これらの出発点または開始マークのそれぞれについて、完全な回答を生成し、全体として評価します。
私たちが議論した貪欲なデコードを覚えていますか?次のタグの確率が高い場合、生成するだけですか?これにより、モデルが1つずつマークするのではなく、モデルが完全な答えを決定する程度を反映する信頼スコアを計算することにより、文全体を調べます。
最高の信頼性スコアでパスを取得した後、k値で返されます。
モデルが複数の高い信頼の回答を返したときのaggregate_answersブールの追加など、他にもいくつかのオプションがありますが、ここでは使用していません。
コードを簡単に説明したので、それがどのように機能するかを確認するためにそれを実行します。
すべてが正しくセットアップされている場合は、単純にサーブを呼び出すことができるはずです。
<code>beam serve app.py:generate_text</code>
タイミングを出した場合、再びサーブを実行すると、モデルをキャッシュします。
モデルが格納されている場所を確認するには、Beam.CloudプラットフォームのVolumeに移動できます。
それが実行されると、次のことが表示されます。
これは、テストの準備ができていることを意味します。
郵便配達員を起動するか、カールを使用できます(端末ウィンドウでエンドポイントへの呼び出しを実行することを意味します)
<code>mkdir my-testing-dir cd my-testing-dir</code>
応答は次のものと同様でなければなりません。
ご覧のとおり、パフォーマンスがわずかに優れています。
モデルを展開する場合は、単に展開を実行できます。
<code>git clone https://github.com/ilsilfverskiold/decoding-cot-beam.git </code>
私はそれをテストするためにそれを使用したので、今それをオフにすることができます。
この記事が教育的で興味深いものであり、何かを手に入れることを願っています。
大規模な言語モデルとCOTテクノロジーの結果を表示する場合は、このテーブルとこのリポジトリにある他のすべてのリソースを表示できます。
それがあなたに役立つなら、コメントを残して私を称賛してください。
❤
以上が高度なプロンプトエンジニアリング:思考チェーン(COT)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。