論文 · arXiv 2106.09685
LoRA: 大規模言語モデルの低ランク適応(Low-Rank Adaptation of Large Language Models)
LoRA: Low-Rank Adaptation of Large Language Models
3行まとめ
- 🎯 GPT-3 175Bのような大規模言語モデルの完全ファインチューニングは、ダウンストリームタスクごとに数百億ものパラメータの再学習と保存を必要とし、ストレージ、VRAM、デプロイメントの深刻なボトルネックを引き起こします。
- 🔧 事前学習済みの重み行列を凍結し、学習可能な低ランク分解行列()をTransformerの全結合層に注入して積をでスケーリングします。デプロイ時には重みを統合できるため、推論遅延は生じません。
- 📈 GPT-3 175Bにおいて、LoRAはGLUE、WikiSQL、SAMSumで完全ファインチューニングと同等以上の性能を維持しながら、学習対象パラメータを10,000分の1に、VRAMを3分の1(1.2TBから350GB)に削減します。
概要
自然言語処理の重要なパラダイムは、一般ドメインのデータを用いた大規模な事前学習と、特定のタスクやドメインへの適応で構成されます。モデルの大規模化に伴い、すべてのモデルパラメータを再学習する完全ファインチューニングは実現困難になりつつあります。例えばGPT-3 175Bの場合、それぞれ175Bのパラメータを持つファインチューニング済みモデルの独立したインスタンスをデプロイすることは極めて高コストです。本稿では、事前学習済みのモデル重みを凍結し、Transformerアーキテクチャの各層に学習可能なランク分解行列を注入するLow-Rank Adaptation(LoRA)を提案します。これにより、ダウンストリームタスク向けの学習対象パラメータ数を大幅に削減します。AdamでファインチューニングしたGPT-3 175Bと比較して、LoRAは学習対象パラメータ数を10,000分の1に、GPUメモリ要件を3分の1に削減できます。LoRAは、学習対象パラメータ数が少なく、学習スループットが高く、さらにadapterとは異なり推論遅延が一切生じないにもかかわらず、RoBERTa、DeBERTa、GPT-2、GPT-3において、ファインチューニングと同等以上のモデル品質を発揮します。また、言語モデルの適応における低ランク性に関する実証的な調査も行い、LoRAの有効性を明らかにします。PyTorchモデルへのLoRAの統合を容易にするパッケージを公開し、RoBERTa、DeBERTa、GPT-2の実装およびモデルチェックポイントを https://github.com/microsoft/LoRA にて提供しています。
英語の原文概要
An important paradigm of natural language processing consists of large-scale pre-training on general domain data and adaptation to particular tasks or domains. As we pre-train larger models, full fine-tuning, which retrains all model parameters, becomes less feasible. Using GPT-3 175B as an example -- deploying independent instances of fine-tuned models, each with 175B parameters, is prohibitively expensive. We propose Low-Rank Adaptation, or LoRA, which freezes the pre-trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable parameters for downstream tasks. Compared to GPT-3 175B fine-tuned with Adam, LoRA can reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times. LoRA performs on-par or better than fine-tuning in model quality on RoBERTa, DeBERTa, GPT-2, and GPT-3, despite having fewer trainable parameters, a higher training throughput, and, unlike adapters, no additional inference latency. We also provide an empirical investigation into rank-deficiency in language model adaptation, which sheds light on the efficacy of LoRA. We release a package that facilitates the integration of LoRA with PyTorch models and provide our implementations and model checkpoints for RoBERTa, DeBERTa, and GPT-2 at https://github.com/microsoft/LoRA.
論文解説
問題設定と動機
大規模な事前学習済み言語モデルを多様なダウンストリームタスクに適応させるには、従来、完全ファインチューニング(全パラメータ を に更新)が用いられてきました。しかし、GPT-3 175Bのような巨大なアーキテクチャでは、175Bパラメータのモデルの独立した複製を保存・配信することは、ストレージ、GPUメモリ、I/Oオーバーヘッドの観点から極めて高コストです。従来のパラメータ効率の高いチューニング手法には、以下のような特有の欠点があります:
- 直列Adapter層(Series Adapter Layers): Transformerブロック内にボトルネックモジュールを直列に挿入します。これらの直列演算は並列化できないため、単一GPU、小バッチ、オンライン配信環境において、順伝播が最大低下するなど、顕著な推論遅延をもたらします。
- Prefix / Prompt Tuning: 各層のアクティベーションの先頭に付加される連続プロンプトベクトルを最適化します。これらの手法は最適化が難しく、プロンプト長に対して非単調にスケールする上、コンテキストとして利用可能なシーケンス長の上限を圧迫します。
LoRAは、ダウンストリームへの転移において、重み適応の更新量 が低い本質的ランク(intrinsic rank)を持つという仮説に基づき、この効率性と品質のトレードオフを解決します。
主要なアイデア
- 低ランク再パラメータ化(Low-Rank Reparametrization): 凍結された全結合層の行列 に対し、適応更新量を としてパラメータ化します。ここで 、 であり、ランク です。
- 推論遅延のゼロ化: 再パラメータ化が線形であるため、学習された低ランク行列はデプロイ時に事前学習済みの重みへと直接統合()でき、ファインチューニングと全く同一の推論アーキテクチャとなり、遅延ペナルティがゼロになります。
- ベースモデルの共有とホットスワップ: 大規模な凍結モデルはGPUメモリ上に静的に保持され、タスクの切り替えは低ランク行列 と を交換するだけで済むため、ストレージ使用量を数百ギガバイトから数十メガバイトへと劇的に削減できます。
- 選択的Attention適応: ランク分解を自己注意(Self-Attention)の射影(特にクエリ とバリュー )のみに適用することで、フィードフォワードMLP層を凍結したまま、競争力のある性能を達成します。
手法
を出力する全結合射影層に対し、LoRAは計算を以下のように変更します:
主要な実装の詳細:
- 初期化: はランダムなガウス分布 から初期化され、 はゼロで初期化されるため、学習開始時の が保証されます。
- スケーリング係数: 更新量 は でスケーリングされます。ここで は定数ハイパーパラメータです。Adamで最適化する場合、 を初期ランク と同じ値に設定することで、異なる を実験する際に学習率を再調整する手間を省くことができます。
- デプロイ時の重み統合: 本番環境では、適応された重み行列 は として明示的に実体化されます。タスクを変更する際は、減算によって を復元し()、新しいadapter重みと統合します()。
- 対象層: 任意の全結合層に適用可能ですが、実験では主にTransformerのAttention射影()に焦点を当てています。 と に でLoRAを適用することで、ダウンストリームにおいて最適な効率が得られます。
実験結果
- GPT-3 175B: LoRAは学習対象パラメータ数を175,255.8Mから4.7M( または の場合)または37.7M( の場合)に削減し、チェックポイントサイズを350GBから35MB(10,000分の1の削減)へ、学習時のVRAMを1.2TBから350GBへと削減します。学習スループットは向上します(V100 GPUあたり32.5から43.1 tokens/s)。
- ダウンストリーム精度(GPT-3):
- WikiSQL論理形式検証精度: 完全ファインチューニングがであるのに対し、LoRA(37.7M)はを達成。
- MultiNLI matched検証精度: 完全ファインチューニングがであるのに対し、LoRA(4.7M)はを達成。
- SAMSum対話要約: 完全ファインチューニングのROUGE-1/2/Lが52.0 / 28.0 / 44.5であるのに対し、LoRA(4.7M)は53.8 / 29.8 / 45.9を達成。
- RoBERTaおよびDeBERTa(GLUEベンチマーク): RoBERTa Largeにおいて、LoRAは355.0Mパラメータを要するファインチューニングと同等の性能(平均スコア対)を0.8Mパラメータで達成。DeBERTa XXL(1.5B)では、完全ファインチューニング(1,500.0Mパラメータ)のGLUE平均スコアに対し、LoRAはわずか4.7Mパラメータでを記録。
- 本質的ランクの分析: 部分空間類似度分析により、 と における の上位特異方向が強く重複していること(次元1における正規化類似度が以上)が判明しました。さらに、 は 内に存在するものの強く強調されていない方向を増幅しており、 において増幅率は を示します。
限界と未解決の課題
- マルチタスクのバッチ処理: 推論遅延を解消するために低ランク重み を に統合した場合、1回の順伝播内で複数タスク向けの入力を同時にバッチ処理することは容易ではありません。
- ヒューリスティックな層の選択: Attention層やMLP層の中でどの行列を適応対象とすべきかを決定する原理的な枠組みは確立されておらず、現状の手法は経験的なヒューリスティクス( と の適応)に依存しています。
- 極端なドメインシフト: 英語のLLMを全く異なる言語に適応させるなど、事前学習分布と大幅に乖離するダウンストリームタスクに対しては、低ランク適応では不十分であり、より高いランクまたは完全な適応が必要になる可能性があります。
重要用語
- Low-Rank Adaptation (LoRA)
- ベースモデルの重みを凍結し、全結合層と並列に低ランク分解行列を学習するパラメータ効率の高いファインチューニング手法。
- Intrinsic Rank
- タスク固有の転移において、有意義なパラメータ適応を捉えるために必要な低い実効次元数、または特異ベクトルの数。
- Adapter Layers
- Transformerブロック内に直列に挿入される外部ボトルネックモジュール。並列化できない逐次計算と推論遅延を発生させる。
- Prefix Tuning
- 入力トークンや各層の隠れ状態の先頭に学習可能な連続ベクトルを付加する適応戦略。利用可能なコンテキスト長を圧迫する。
- Weight Folding / Weight Merging
- 推論時の実行時オーバーヘッドを排除するために、低ランク行列 を事前学習済みの重み行列 に直接加算すること。
- Grassmann Distance Subspace Similarity
- 適応更新量の正規直交特異ベクトル行列間における列空間の重なりを測定する指標 。
- Feature Amplification Factor
- のフロベニウスノルムと、 の特異部分空間への の射影との比率。タスク固有の方向がどれだけ強く強調されているかを測定する。
よくある質問
なぜLoRAはadapterと異なり、推論遅延を一切発生させないのですか?
LoRAは線形演算()であるため、サービス提供前に低ランクの積 を明示的に計算して に加算できるからです()。これにより、推論時はadapterアーキテクチャで遅延の原因となる直列ボトルネック層を経由せず、標準的な行列乗算のみが実行されます。
LoRAはTransformerのどの重み行列に適用すべきですか?
GPT-3の実験では、固定されたパラメータ予算において、クエリ()とバリュー()の両方の射影重みを適応させることが最良の結果を示しました。パラメータを単一種類の行列に高いランクで割り当てるよりも、複数のAttention行列により小さいランク(例: )で適応させる方が優れた性能を発揮します。
大規模言語モデルの適応には、どの程度のランク $r$ で十分ですか?
ダウンストリームタスクに対しては、、、または といった非常に小さなランクで十分な場合が多いです。部分空間類似度分析によると、小さなランクで学習された上位特異ベクトルは、より大きなランク( など)で学習されたものと大きく重複しており、高いランクの大半は最適化時のランダムノイズを捉えているにすぎないことが示されています。
LoRAは低ランク行列をどのように初期化しますか?
行列 はランダムなガウス分布で初期化され、行列 はゼロで初期化されます。これにより、学習開始時の が保証され、モデルの事前学習済み順伝播の挙動がそのまま維持されます。
このページの解説は AI が論文から作成したもので、誤りを含む場合があります。詳細は原文をご確認ください。