見出し画像

LLMのカスタマイズ手法

Slalomでは大規模言語モデル(Large Language Model: LLM)の企業活用を支援しています。その中で、LLMのカスタマイズ、評価、応用事例について社内でサーベイを行う機会があり、その内容を社外にも公開しようという話になりました。本記事ではまず初めにLLMのカスタマイズ手法について紹介します。


カスタマイズはなぜ必要?

大規模言語モデル (LLM) は、多くのタスクで驚異的な能力を示しており、その汎用性の高さには目を見張るものがあります。しかしながら、LLMを実際のシステムやサービスに組み込もうとすると、さまざまな壁に直面します。現実世界のビジネスシーンでは、専門用語が飛び交い、独特の業界習慣に従う必要があるため、事前学習された既存のLLMだけではこのような状況や要求に応えれきない場合があります。LLMのカスタマイズは、これらの問題の解決に役立ちます。カスタマイズされたLLMは、特定の業界や組織的な文脈内で、より効率的かつ正確なテキスト生成と理解を可能にし、ビジネスニーズに柔軟に対応する手段を提供します。なお文書を検索したうえでテキスト生成を行うRetrieval-Augmented Generation (RAG) によっても同様の課題を解決できる可能性がありますが、本記事ではモデル自体に近い話を中心に扱い、RAGのテクニックに関する話題は扱いません。

カスタマイズ手法の大別

まず初めに、LLMのカスタマイズ手法の大別を紹介します。この大別はNVIDIAのTechblog記事であるMastering LLM Techniques: Customizationを参考にしています。

カスタマイズ手法の大別

プロンプトエンジニアリング

プロンプトエンジニアリングは、LLMが適切な出力を行うためのプロンプトを作成するプロセスを指します。プロンプトは、数語の部分的な文や完全な文章、単純なものや複雑なものまで様々考えられます。プロンプトエンジニアリングの目標は、LLMのパラメーターを何らかの形で変更することなく、LLMが求められていることを理解しやすいように明確で簡潔で効果的なプロンプトを作成することです。プロンプトエンジニアリングは、データの処理量が少なく、計算コストも小さいです。

プロンプト学習

プロンプト学習は、仮想的なプロンプトに対する埋め込みを学習する、パラメータ効率の良い手法です。これにより、全パラメータの調整を必要とせずに、一つの事前に訓練されたLLMを複数の下流タスクに使用することが可能となります。また、新たな学習のさいに過去の学習結果を忘却してしまう破滅的忘却と呼ばれる問題を回避します。このプロセスは、プロンプトエンジニアリングよりも多くのデータと計算を必要としますが、より良い精度を提供します。

Parameter-efficient fine-tuning (PEFT)

PEFTは、元のLLMに対して選択的にパラメーターやレイヤーを追加し、更新を行う手法です。PEFTを使用すると、モデルのパラメーターを特定のユースケースのために訓練できます。これにより、LLMは訓練されたタスクに対する高い精度を達成することが可能となります。

ファインチューニング

ファインチューニングは、事前に訓練されたLLMのパラメータを固定する前述の3つのカスタマイズ手法とは異なり、パラメータ自体の更新を行う手法です。これは、ファインチューニングが他の手法と比較して多くの訓練データと計算を必要とすることを意味します。しかし、特定のユースケースに対して高い精度を実現する可能性があります。

カスタマイズ手法の詳細

次に、カスタマイズ手法を個別に紹介します。

プロンプトエンジニアリング

  • Few-shot prompting: プロンプトの内部で、入力と出力のペアをいくつか例示することで、出力のフォーマットや出力内容を所望のものに近づける手法のことです。

プロンプト例:

入力1:新年のおみくじで大吉を引いて嬉しかった。 
出力1:ポジティブ 

入力2:風邪を引いて運動会に出れず悲しい思いをした。 
出力2:

出力:ネガティブ

  • Chain-of-thought (CoT) 推論: CoT推論は、中間的な推論ステップを通じて、複雑な推論を可能にする手法です。これをfew-shot promptingと組み合わせることで、推論が必要なタスクに対してより良い結果を得ることができます。

プロンプト例:

入力1:リンゴが3個あります。12個リンゴの入った段ボール箱を2箱買いました。リンゴは合計何個? 
出力1:12個リンゴの入った段ボール箱を2箱買うと、新たに12*2=24個のリンゴが増えます。
もともとリンゴは3個あったので答えは3+24=27です。 

入力2:柿が3個あります。12個柿の入った段ボール箱を3箱買いました。柿は合計何個? 
出力2:

出力:12個柿の入った段ボール箱を3箱買うと、新たに12*3=36個の柿が増えます。もともと柿は3個あったので、合計で3+36=39個の柿があります。

その他のプロンプトエンジニアリングの手法に興味がある方はこちらをご参照ください。

プロンプト学習

  • Prompt tuning: total_virtual_tokens 個のトークンと各トークンhidden_size次元の埋め込みを持つ仮想的なプロンプトを total_virtual_tokens * hidden_sizeの2次元埋め込み行列で初期化します。そして各タスクにおいて、この埋め込み行列の学習を個別に行う手法です。

    • 補足1: ここでは”Prompt tuning”を手法の一つという文脈で紹介していますが、プロンプトのパラメータを動的に学習する手法のクラスを意味する広範な意味で”Prompt tuning”が使われるケースもあります。

  • P-tuning: 仮想プロンプトの埋め込みをprompt_encoder と呼ばれる変換器 (LSTMやMLPなどを活用する) を通して予測する手法です。Prompt tuningと同様にLLMのパラメータは凍結します。

    • 補足2:Prompt tuningとP-tuningの手法は、PEFTの手法の一つとしても考えられます。ここでは仮想的なプロンプトの埋め込みの学習を行うプロンプト学習の手法は、学習対象となるパラメータがPEFTの中でも比較的少なくて済むことを強調するため、分離して紹介しています。

Parameter efficient fine-tuning (PEFT)

  • Prefix-tuning: Prefix Tuningは、Transformerの各層の先頭に追加パラメータを追加して学習を行う手法です。タスクごとにこの追加パラメータを用意し、一つの事前学習済みモデルに対して追加パラメータを入れ替えることで、異なるタスクに一つの事前学習済みモデルで対応することができます。プロンプト学習の手法に比べると、修正するパラメータの数が増える分、精度も良くなります。

  • Adapters: Adaptersは、LLMの内部の層に新たな層を追加して学習を行う手法です。各Adapterのブロックの最初の全結合層は、入力を低次元の表現に落とし込み、2番目の全結合層は入力を入力次元に戻します。このようなボトルネック構造によって、関連する情報を学習するために必要なパラメータの数を減らすことができます。

  • LoRA: Low-Rank Adaptation of Large Language Models (LoRA) は、LLMの内部の層に訓練可能なランク分解行列を注入する手法です。Adaptersと異なり、学習された重みを推論中にメインの重みと並列的に統合処理できるため、追加で推論の遅延が発生しません。LoRAと、計算に使用するビット列を短縮する量子化技術を組み合わせたQLoRAは、メモリ使用量を大幅に削減します。

  • IA3: Infused Adapter by Inhibiting and Amplifying Inner Activations (IA3) はrescaling vectorsと呼ばれるベクトルを導入し、アテンション機構のキーと値、またPosition-wise Feed-Forwardネットワークのアクティベーションを再度スケールさせる手法です。IA3はAdaptersに比べると追加するパラメータが少なくて済みます。

  • HINT: 従来のLLMの手法では、タスクの説明を示す自然言語の指示(instruction) を入力として、モデルを学習させます。この方法では、指示が長い場合など、タスクの種類によってはモデルの学習に多くの計算リソースが必要になります。Hypernetwork Instruction Tuning for Efficient Zero- & Few-Shot Generalisation (HINT) は、タスクの指示と例を、事前に訓練されたエンコーダーを使用して変換することで、指示を効率的に与える手法です。これによって学習のさいに、指示や少数の例を加えて学習するさいの計算コストを軽減します。

ファインチューニング

  • SFT: Supervised Fine-Tuning (SFT)はLLMをファインチューニングする王道の手法で、新しいタスクにおけるラベル付けされた事例を用いて学習を行います。ファインチューニングをメモリ効率的に行う研究も活発に行われており、LOw-Memory Optimization (LOMO)などの手法が知られています。

  • RLHF: Reinforcement Learning from Human Feedback (RLHF)はLLMをファインチューニングする手法で、 人によるフィードバックを介してモデルのパフォーマンスを向上させる強化学習の手法です。OpenAIでは、Proximal Policy Optimization (PPO) が用いられ、大規模なデータに対して安定かつ効率的なチューニングを実現しています。

  • DPO: Direct Preference Optimization (DPO)は、強化学習における報酬関数の設計と報酬モデルの作成を不要にする、モデル最適化手法です。従来の強化学習では、報酬関数に基づいて報酬モデルを作成し、そのモデルを使ってエージェントの行動を学習させていました。しかし、報酬関数の設計は難しく、報酬モデルの作成も手間がかかります。DPOは、これらの問題を解決するために、直接嗜好データ(例:2つの回答の中でどちらが好ましいか)に基づいてモデルを直接最適化します。具体的には、バイナリクロスエントロピー損失を用いて、モデルが嗜好データと一致するように学習させていきます。同様の目的のための手法にIPOKTOなどもあります。

まとめ

最後に、各大別のカスタマイズ手法とフルスクラッチ学習を計算コスト、データ準備コスト、精度への影響の観点でトレードオフを比較し、表にすると下記のようになります。

カスタマイズ手法のトレードオフ

本記事では、LLMのカスタマイズ手法を紹介しました。次回は、LLMの評価について記事を書く予定です。今後もLLM領域の技術進歩に合わせた付加価値が提供できるよう、技術動向をキャッチアップしていきたいと考えています。同様の思いを持つ読者にとって、少しでも私たちの記事が役に立てば幸いです。


この記事が気に入ったらサポートをしてみませんか?