AIモデルとプラットフォーム

LoRA、QLoRA、QA-LoRA:大規模言語モデルにおける低ランク行列分解を用いた効率的な適応

mm
Unite.AI を Google の優先ソースに追加

大規模言語モデル(LLM)は、人間のようなテキストを理解し、生成する能力を提供するために、独自のニッチを切り開いています。LLMの力は、その巨大なサイズに由来し、多くの場合、数十億のパラメータを持っています。ただし、このような大規模なモデルは、特定のタスクまたはドメインに合わせてモデルを適応させる際に、特に計算上の課題を生み出します。従来のLLMの管理方法、たとえばすべてのパラメータを微調整する方法は、計算上および金銭上の負担を伴い、実際のアプリケーションでの広範な採用を妨げる大きな障壁となります。

以前の記事で、特定の要件に合わせて大規模言語モデル(LLM)を微調整する方法について説明しました。インストラクションベースの微調整、シングルタスクの微調整、パラメータ効率的な微調整(PEFT)などのさまざまな微調整方法を探究しました。トランスフォーマーアーキテクチャ、LLMの背骨であり、微調整中に膨大な数のパラメータを扱うことによる計算上およびメモリ上の課題についても説明しました。

パラメータ数

https://huggingface.co/blog/hf-bitsandbytes-integration

上の画像は、パラメータ数で並べられたさまざまな大規模言語モデルのスケールを表しています。特に、PaLMBLOOMなどです。

今年、さらに大規模なモデルが開発されています。しかし、標準システムでこれらの巨大なオープンソースモデルを調整することは、特殊な最適化技術なしには実現不可能です。

マイクロソフトによって導入されたLow-Rank Adaptation(LoRA)が登場しました。この方法は、これらの課題を軽減し、LLMをよりアクセスしやすく、適応可能にすることを目的としています。

LoRAの核心は、モデルを適応させるために、再訓練の複雑さに立ち入ることなく、事前訓練されたモデル重みを変更せずに、各トランスフォーマ層に訓練可能なランク分解行列を導入することにあります。このアプローチにより、訓練可能なパラメータの数が大幅に削減され、適応プロセスがより効率的になります。

LLM調整戦略の進化

LLM調整の歴史を振り返ると、実践者が使用してきたさまざまな戦略を特定できます。初期の焦点は、事前訓練されたモデルを微調整すること、つまりモデルパラメータを特定のタスクに合わせて全面的に変更することでした。ただし、モデルが大きく複雑になると、計算上の要求も増加しました。

次に注目された戦略は、サブセット微調整でした。これは、モデルパラメータのサブセットのみを微調整する、より抑制されたアプローチです。計算上の負担はある程度軽減されましたが、LLMのサイズの増加に完全に対応することはできませんでした。

実践者がより効率的な方法を探求するにつれて、フル微調整が現れました。これは、厳格ではあるものの、報われるアプローチです。

LoRAの紹介

行列のランクは、行列の列によって作成される次元についての洞察を提供し、行列のユニークな行または列の数によって決定されます。

  • フルランク行列:ランクは行または列の少ない方に一致します。
  • 低ランク行列:ランクは行と列の両方よりも小さく、より少ない特徴を捉えます。

大きなモデルは、ドメイン全体に対する広い理解を提供します。ただし、特定のタスクに合わせてそれらを微調整するには、理解の小さな部分を強調するだけで済みます。ここで、LoRAが活躍します。LoRAは、重みの調整を示す行列が低ランクの行列であることを示唆しています。つまり、より少ない特徴を捉えます。

LoRAは、更新行列を2つの小さなランク行列に分割することで、ランクを制限します。つまり、重み行列全体を変更するのではなく、行列の一部のみを変更することで、微調整タスクをより効率的に行うことができます。

トランスフォーマーへのLoRAの適用

LoRAは、特定の重み行列に焦点を当てて、ニューラルネットワークの訓練負荷を最小限に抑えるのに役立ちます。トランスフォーマーアーキテクチャでは、自己注意メカニズムに関連する重み行列、つまりWq、Wk、Wv、Wo、そして多層パーセプトロン(MLP)モジュールの2つが重要です。

トランスフォーマーアーキテクチャ

トランスフォーマーアーキテクチャ

 

トランスフォーマー注意ヘッド

トランスフォーマー注意ヘッド

LoRAの背後にある数学的説明

LoRAの背後にある数学を分解してみましょう:

  1. 事前訓練済みの重み行列
    • 事前訓練済みの重み行列 は、次元 を持っています。これは、行列が 行と 列を持つことを意味します。
  2. 低ランク分解
    • 事前訓練済みの重み行列 を直接更新するのではなく、低ランク分解アプローチを提案します。
    • 更新 は、2つの行列 の積として表現できます。
      • は、次元 を持ちます。
      • は、次元 を持ちます。
    • ここでの重要な点は、ランク が、 の両方よりも小さいことです。これにより、計算上の表現がより効率的になります。
  3. 訓練
    • 訓練プロセス中、 は変更されません。これは「重みをフリーズする」と呼ばれます。
    • は訓練可能なパラメータです。つまり、訓練中に、 の行列を調整して、モデルのパフォーマンスを向上させます。
  4. 乗算と加算
    • 両方の と更新 (これは の積です) は、同じ入力 (ここでは と表記します) に掛けられます。
    • これらの乗算の結果は加算されます。
    • このプロセスは、次の式で要約されます: ここで、 は、入力 に対する更新を適用した後の最終出力を表します。

簡単に言えば、この方法は、低ランク分解を使用して大きな重み行列を更新するためのより効率的な方法を提供し、計算上の効率とメモリ使用量の両方で利点があります。

LoRAアニメーション

LoRA

初期化とスケーリング:

モデルを訓練する際、パラメータを初期化する方法は、学習プロセスの効率と有効性に大きく影響します。LoRAの文脈では、重み行列の更新に使用される について:

  1. 行列 の初期化
    • 行列 :ランダムなガウシアンノイズで初期化されます。ガウシアンノイズを使用する理由は、対称性を破壊することです。同じ層内の異なるニューロンは、異なる初期重みを持つことで、異なる特徴を学習します。
    • 行列 :ゼロで初期化されます。初期化により、更新 は、訓練開始時にゼロになります。これにより、モデルの動作に初期段階で急激な変化が生じるのを防ぎ、 が訓練中に適切な値を学習することを可能にします。
  2. 更新の出力のスケーリング
    • 更新 の後、出力は の係数でスケーリングされます。ここで、 は定数です。スケーリングにより、更新の大きさが制御されます。
    • ランク が変化する場合、特にランクを上げて精度を向上させる場合 (計算コストの増加を犠牲にして)、スケーリングにより、他のハイパーパラメータを調整する必要がなくなります。これにより、モデルの安定性が保たれます。

LoRAの実用的な影響

LoRAは、特に芸術的なスタイルにLLMを効率的に適応させる能力を実証しています。これは、Greg Rutkowskiの芸術スタイルを模倣するモデルへの適応で顕著でした。

LoRAは、Hugging FaceのParameter Efficient Fine-Tuning (PEFT)ライブラリで実用的な応用を見せており、その利用を容易にします。QLoRAを使用したい場合は、bitsandbytesとPEFTライブラリの組み合わせでアクセスできます。さらに、HuggingFaceのTransformer Reinforcement Learning (TRL)ライブラリは、LoRAをサポートした教師あり微調整を提供し、特定の属性の指示に基づいて説得力と一貫性のある製品の説明を生成することを可能にします。これらの3つのライブラリは、選択した事前訓練済みモデルを微調整するための基本的なツールキットを提供し、LoRAを活用します。

LoRAは、LLMをよりアクセスしやすく、適応可能にするための重要なステップであり、理論的進歩と実践的応用のギャップを埋める可能性もあります。計算上の障壁を軽減し、モデル適応プロセスをより効率的にすることで、LoRAはLLMのより広範な採用と展開に重要な役割を果たす可能性があります。

QLoRA (Quantized)

LoRAはストレージ要件を削減するゲームチェンジャーですが、モデルの訓練を開始するには依然として大量のGPUが必要です。ここで、QLoRA、またはQuantized LoRAが登場します。LoRAと量子化を組み合わせたスマートなアプローチです。

量子化

量子化

通常、重みパラメータは32ビット形式 (FP32) で保存され、行列の各要素は32ビットのスペースを占めます。もしも同じ情報を8ビットまたは4ビットに圧縮できるとしたら?これがQLoRAの核となる考え方です。量子化とは、連続した無限の値をより小さな離散的な有限の値のセットにマッピングするプロセスです。LLMの文脈では、モデルの重みをより高い精度のデータ型からより低い精度のデータ型に変換するプロセスを指します。

LLMの量子化

LLMの量子化

QLoRAの簡単な説明は次のとおりです:

  1. 初期量子化:まず、大規模言語モデル (LLM) を4ビットに量子化して、メモリのフットプリントを大幅に削減します。
  2. LoRAの訓練:次に、LoRAの訓練を実行しますが、標準の32ビット精度 (FP32) で実行します。

あなたは、4ビットに圧縮した後に32ビットに戻す理由を疑問に思うかもしれません。LoRAアダプタをFP32で効果的に訓練するには、モデルの重みもFP32に戻す必要があります。この前後切り替えは、GPUメモリを圧倒しないように、賢いステップごとに実行されます。

LoRAは、Hugging FaceのParameter Efficient Fine-Tuning (PEFT)ライブラリで実用的な応用を見せており、その利用を容易にします。QLoRAを使用したい場合は、bitsandbytesとPEFTライブラリの組み合わせでアクセスできます。さらに、HuggingFaceのTransformer Reinforcement Learning (TRL)ライブラリは、LoRAをサポートした教師あり微調整を提供し、特定の属性の指示に基づいて説得力と一貫性のある製品の説明を生成することを可能にします。これらの3つのライブラリは、選択した事前訓練済みモデルを微調整するための基本的なツールキットを提供し、LoRAを活用します。

QLoRAの訓練後、重みを高精度の形式に戻す必要がありますが、これにより精度の損失とプロセスの高速化のための最適化が欠如する可能性があります。

提案された解決策は、重み行列を小さなセグメントに分割し、各セグメントに量子化と低ランク適応を個別に適用することです。新しい方法、QA-LoRAは、量子化と低ランク適応の利点を組み合わせながら、プロセスを効率的にし、モデルの有効性を維持することを目指しています。

結論

この記事では、LLMの巨大なパラメータサイズによってもたらされる課題について触れました。従来の微調整方法とそれに関連する計算上および金銭上の要求について説明しました。LoRAの核心は、事前訓練済みのモデルを完全に再訓練することなく、パラメータを変更することなく、訓練可能なパラメータを削減し、適応プロセスをより費用効率的にする能力にあります。

また、LoRAと量子化を組み合わせたQLoRAについても触れました。QLoRAは、モデルのメモリフットプリントを削減しながら、訓練に必要な精度を維持することを可能にします。これらの高度な技術により、実践者はLLMをより幅広い実世界のシナリオで採用および展開するための強力なライブラリを手に入れることができます。

マトリックス

マトリックス

これらの戦略は、特定のタスクに合わせてLLMを適応させることと、微調整および展開プロセスが計算およびストレージリソースの面で過度に要求的でないことを、バランス良く行うように設計されています。

私は過去5年間、機械学習とディープラーニングの魅力的世界に没頭してきました。私の情熱と専門知識は、AI/MLに特に焦点を当てた50以上の多様なソフトウェアエンジニアリングプロジェクトに貢献することになりました。私の継続的な好奇心は、自然言語処理という分野にも私を引き付け、さらに探求したいと思っています。