🚢🚢🚢AIテクノロジーソフトウェアと技術交流グループへのご参加をお待ちしております!最新のトレンドを把握し、一緒に技術的な課題を探求しましょう! 著者 | ショーン・スミス 編纂者:岳陽 ブレット・ジョーダンによるUnsplashの写真 現在、市場はLLM(大規模言語モデル)と生成AIの波に乗っています。IBMのデータによると、企業幹部の約3分の2が、生成AIの導入を加速させるよう投資家からプレッシャーを感じています。当然のことながら、このプレッシャーはデータサイエンスや機械学習チームにも及んでおり、彼らは機会を捉え、生成AIを成功裏に適用する責任を負っています。 状況が進展するにつれ、LLMエコシステムはオープンソースモデルと商用モデルへと急速に分岐し、競争上の優位性は急速に失われつつあります。この前例のない状況を受け、多くのチームが「LLMを自社のニーズにより合致したものにするにはどうすればよいか」という問いを問うようになりました。 この記事では、特定の垂直市場向けのLLMを構築する際に考慮すべき重要な要素、例えば時間的コミットメントやエンジニアリングサイクルなどを詳細に検討します。これらの要素は、私たちが常に念頭に置くべきものです。このプロセスにおいては、特に大規模言語モデルの微調整における潜在的な限界とベストプラクティスに関する最新の研究情報を常に把握しておくことが不可欠です。この記事を読めば、意思決定プロセスへの理解が深まり、トレーニングを行うべきかどうか、そしてどのようにトレーニングを行うべきかという適切な判断を企業が下せるようになるでしょう。 01 はオープンソース モデルを通じて GPT を模倣できない可能性があります。ご存知の通り、OpenAIは最新バージョンのGPTでLLM分野のリーダーです。そのため、レート制限、データプライバシー、コストなど様々な理由から、多くのステークホルダーが開発チームにGPTよりも優れたパフォーマンスを持つモデルの開発を要請する可能性があります。これは当然のことながら、開発者にとって次のような疑問を生じさせます。GPTから出力を生成し、それを用いてモデルの微調整を行うことは可能でしょうか? この質問への答えは、複数の要因に依存しているように見えるため、依然として不明確です。この特定のタスクは模倣学習と呼ばれ、GPTなどの高レベルモデルからの応答を用いて、全く新しい言語モデルを微調整・学習します。これは下流モデルから優れたパフォーマンスを引き出す良い方法のように思えますが、あまり目立たない問題もいくつかあります。 図と表は文献[1]、Gudibande et al.から引用したものです。 「プロプライエタリLLMの模倣の虚偽の約束」[1]と題された最近の論文は、この手法の使用における潜在的な落とし穴を明らかにしています。著者らは実験を通して、「模倣」データを大量に追加するとモデルの性能が低下する可能性があることを実証しています。上の図を見ると、中央のグラフから、トークン数が増えるにつれてベンチマークタスクの精度が実際に低下していることがわかります。しかし、なぜこのようなことが起こるのでしょうか? 著者らは、これは模倣モデルがモデルの出力内容を学習・理解するのではなく、模倣するモデルのコンテンツスタイルを学習するためだと主張している。左のグラフに示されているように、人間のレビュー担当者はChatGPTよりも模倣モデルの出力を好んでいる。さらに調査を進めると、レビュー担当者は模倣モデルのコンテンツスタイルを明らかに好んでいるものの、出力内容を綿密に検討していないことが明らかになった。特に、模倣モデルによって生成されたコンテンツはしばしば事実の根拠を欠いており、著者らは次のように結論付けている。 「模倣モデルは実際にはAIアシスタントの最悪の側面のいくつかを体現している。つまり、その回答は自信に満ちているように聞こえるが、ChatGPTよりもさらに事実に基づかないのだ。」 模倣モデルが特定の状況において優れたパフォーマンスを発揮できることは注目に値します。著者らは、模倣モデルが局所的なタスク、つまり教師モデルの特定の動作を模倣するタスクにおいて優れたパフォーマンスを発揮することを指摘しています。「NQ-Synthetic」と呼ばれる研究課題において、著者らは大規模な言語モデルを用いて、与えられた文脈に基づいて10個の関連する質問と回答を生成するよう指示しました。驚くべきことに、模倣モデルのスコアはGPTのスコアに近かったのです。これは、教師モデルの行動を模倣しようとする場合、特定の領域に重点を置いたモデルの方が優れたパフォーマンスを発揮する可能性があることを示唆しています。 記事で言及されている興味深い帰結として、教師モデルを用いてモデルを微調整することで、模倣モデルの毒性スコアを実際に低減できるという点が挙げられます。これは、出力データにコンテンツフィルターを構築する手間をかけずに、オープンソースのLLM(大規模言語モデル)を迅速に導入したい企業にとって特に有用です。企業は、コンテンツフィルターを手動で構築する代わりに、綿密に作成されたデータセットを使用し、教師モデルの出力データを用いて学習することで、信頼性の高い基盤を構築することができます。 Microsoft Researchが最近発表したOrcaモデルは注目に値します。このモデルはGPTの情報や信号を学習データの一部として利用しています。両モデルの違いは、学習データのサイズにあります。Orcaモデルは500万例に基づいてファインチューニングされているのに対し、完全な模倣モデルは約15万1000例に基づいてチューニングされています。ほとんどの読者は、LLMの実験に1万6000ドルも費やすことはないだろうと想定しているため、今回のプレゼンテーションではOrcaモデルではなく、模倣モデルの構築に関する論文を参照することにします。しかしながら、より包括的なタスクに対する実行可能なアプローチとして模倣学習に必要な最小限の例数を明確に判断するには、さらなる研究結果が必要です。 要約すると、タスクの複雑さが異なるため、GPT または他の高レベル モデルの出力をより弱いモデルで模倣しようとすると、モデルのパフォーマンスが低下する可能性があります。 02文脈からの学習だけで十分ですか?インコンテキスト学習(Few-shot Learningとも呼ばれる)は、プロンプトに特定のタスク例を追加するプロセスです。このアプローチは、主に複雑で大規模な言語モデルに適しています。なぜなら、多くの小規模なオープンソースモデルはコンテキスト学習を行う柔軟性に欠けているからです。通常、この手法は優れた結果をもたらしますが、なぜそうなるのか疑問に思ったことはありませんか? Daiら[3]の論文は、この問いへの答えを探り、プロンプトに例を読み込むことと、同じ例を用いて大規模モデルを微調整することとの間の数学的な関連性を調査しています。著者らは、プロンプトの例がメタ勾配を生成し、それが推論中の順方向伝播プロセスに反映されることを実証しています。微調整においては、これらの例は重みの更新に使用される実勾配を生成します。したがって、コンテキスト学習は微調整と同様の効果を達成できると考えられます。これらの概念をより深く理解するために、これらの数学的な関連性の詳細を詳述しているこの論文を読むことをお勧めします。 コンテキスト学習は優れたアプローチですが、ファインチューニングにはない限界があります。大量のトレーニングデータがある場合、ファインチューニングされたモデルはトレーニング中に真の勾配を用いて自己更新するため、すべてのデータを活用します。しかし、コンテキスト学習では、提供できる観測可能なデータは限られています。これは新たな問題を引き起こします。大量のトレーニングデータが与えられた場合、入力に最も関連性の高い例をどのように活用して、より優れたモデル応答を得ることができるでしょうか? この問題に対する効果的なアプローチの一つは、ヒューリスティックアルゴリズムを用いて例文を選択することです。LangChainは現在、このアルゴリズムをサポートしています。LangChainは、言語モデルの作業を簡素化できる、基本的に事前構築されたプロンプトを含むPythonモジュールです。ここで注目すべきLangChainツールは、ExampleSelector(https://python.langchain.com/docs/modules/model_io/prompts/example_selectors/)です。 def get_similarity(seq_a: str, seq_b: str) -> Union[float, int]:
「」
類似性ヒューリスティックを作成する
ここではジャカード類似度またはIOUを使用します
seq_a: 比較する最初のシーケンス
seq_b: 比較する2番目のシーケンス
戻り値:
類似度スコア(float または int)
「」
# トークン化
set_a = set(seq_a.split(' '))
set_b = set(seq_b.split(' '))
# IOU/Jaccard類似度を計算する
len(set_a.intersection(set_b)) / len(set_a.union(set_b)) を返します
def example_selector(examples: List[str], input: str, examples2use: int) -> List[str]:
「」
セレクタの例の擬似コード
例: トレーニングコーパスのリスト
入力: 翻訳するターゲット配列
examples2use: 使用する例の数
戻り値:
選択された例のリスト
「」
scores = [get_similarity(example, input) 例の場合]
sorted_idx = [i for i, _ in sorted(enumerate(scores), key=lambda x: x[1], reverse=True)]
例を返す[sorted_idx[:examples2use]]ExampleSelectorsは、推論中に使用される例を動的に変更できるプロンプト演算子の一種です。多くのヒューリスティックが利用可能です。上記の擬似コードは、LangChainのセレクタが本質的にどのように動作するかを示しています。入力シーケンスと例シーケンス間のJaccard類似度を使用しました。(翻訳者注:Jaccard類似度は、2つのセット間の類似度を測定する指標で、基本的にはセットの共通部分と和集合の比率です。) このアプローチには主に2つの利点があります。まず、与えられた入力に基づいて最も関連性の高い例を厳選できるため、LLMはデータをより効率的に活用できます。これは、すべての観測に対して少数の例を静的にロードする方法とは異なります。2つ目の利点は、マネージドサービスを介してチューニングした場合のコスト削減です。現在、細かくチューニングされたDavinciモデルを使用する場合、1000トークンあたり0.12ドルのコストがかかります。一方、instruct Davinciを使用すると0.02ドルかかるため、前者は500%も高価になります。これにはモデルのトレーニングコストは含まれていません。 削除されたブログ記事[5]で明らかにされているように、OpenAIはまだLoRaやアダプターを採用していないため、これらの価格は後日変更される可能性があることに留意してください。しかしながら、各ユーザーごとにカスタム重みを維持する必要があるため、モデルのファインチューニングの価格は依然として高くなる可能性があります。さらに、これはコンテキスト内のサンプルのコストを考慮していません。チームは、コストと精度の観点から、目標タスクの達成においてコンテキスト学習(ICL)とファインチューニングのどちらがより有意義であるかを評価する必要があります。 要点: 動的に読み込まれた例を使用したコンテキスト学習は、いくつかのシナリオでは微調整と同じ効果をより低いコストで実現できます。 03最終推論ステップに進む前に、対象タスクを実行するために 1 つ以上の中間ステップが必要ですか?例えば、モデルに長い文書に関する複雑な質問に答えるよう指示してみましょう。このようなタスクでは通常、大規模な言語モデルに高度な言語能力と理解能力が求められます。ここで新たな疑問が生じます。人間が文書を分析し、タスクを順番に実行するのと同様に、言語モデルが推論プロセスを複数のサブタスクに分解できるようにしたらどうなるでしょうか? この画像はSunらによる論文[4]から引用したものです。 これはまさにマイクロソフトの研究者が実現したかったことであり、この課題に対する彼らの解決策がPEARL[4]です。PEARLとは、「長い文書に対する推論のための計画と実行アクション(Planning and Executing Actions for Reasoning over Long documents)」の略称です。この一般的なフレームワークは、主に3つのステップに分かれています。
Sunらによる論文[4]から引用した行動の例 上記の様々な段階の間には、対象タスクの実行品質を確保するための中間ステップが複数存在します。著者らは、計画が要求された形式に準拠していることを確認するための自己修正ステップを組み込んでいます。また、このワークフロー計画が後続の「計画生成」プロセスの小規模なサンプルとして使用できるかどうかを判断するための自己改良ステップも含まれています。 Sunらの論文[4]から引用した表 評価の結果、PEARLは他のGPTモデルと比較して大幅な性能向上を示すことが確認されました。したがって、場合によっては、対象タスクの解を複数のステップに分割することで、モデル性能を大幅に向上させることができると結論付けることができます。 もう一つの状況として、コンテキスト内の文書数が言語モデルでサポートされる数を超える場合、いくつかの中間ステップを設定することが有利であることが証明されています。現在、OpenAIが使用しているアテンションメカニズムの計算量はO(n²)であり、この問題に対する具体的な解決策はまだありません[5]。そのため、コンテキストを可能な限り最小限の形式に縮小する方法に誰もが大きな関心を寄せています。 対象タスクごとに異なる処理方法が存在する。例えば、対象タスクがエンティティを中心に展開される場合、関連するエンティティとその関連属性を抽出する機会がある。(訳者注:テキストを処理する際に、テキスト内の特定のエンティティ(名前、場所、組織など)を識別し、これらのエンティティの関連属性(年齢、住所、職業など)を抽出できる。このようにして、テキスト内の情報を構造化された形式に変換することができ、エンティティと属性の理解がより明確かつ体系的になる。これにより、後続のタスクにより正確で有用な情報を提供できる。)この方法は、ユーザーがLLMにさらに多くのコンテキストを入力できるようにする非可逆圧縮方法と見なすことができる。この中間ステップのもう1つの利点は、非構造化データを構造化形式に変換できることであり、これによりユーザーはLLMを使用せずに情報に基づいた意思決定を行うことができる。以下は、Feiらの論文[6]に示されているタスク図の例である。 この図はフェイらが発表した論文[6]から引用したものです。 要点: 対象タスクをより小さなサブタスクに分解すると、より複雑な問題をより管理しやすい部分に簡素化できます。また、これらの小さなタスクは、モデルの制限に関連するパフォーマンスのボトルネックの解決にも使用できます。 04結論上記は、LLMの性能と効率という新興分野において研究者が探求している一般的な考え方を概説したものです。モデルの微調整におけるすべての考慮事項を網羅しているわけではありませんが、良い出発点となり、ある程度の指針となるでしょう。 さらに詳しい情報については、Hugging Face [7]が発表したLLMトレーニングに関する記事は非常に興味深く、特定のドメインの問題に対する模倣モデルを探索するための良い出発点となります。 この記事の要点をもう一度まとめると次のようになります。
終わり 🚢🚢🚢AIテクノロジーソフトウェアと技術交流グループへのご参加をお待ちしております!最新のトレンドを把握し、一緒に技術的な課題を探求しましょう! |