LoRAとは?LLMを効率的にファインチューニングする革新的手法

AIを知りたい
先生、「LoRA」っていうファインチューニング手法を聞いたんですが、普通のファインチューニングとは何が違うんですか?

AIエンジニア
LoRAは「Low-Rank Adaptation」の略で、モデルの全パラメータを更新する代わりに、小さな追加行列だけを学習させる効率的な手法だよ。例えば70億パラメータのモデルをフルでファインチューニングするには140GBのVRAMが必要だけど、LoRAなら16GBで済むんだ。

AIを知りたい
そんなにメモリが節約できるんですね!でも性能は落ちないんですか?

AIエンジニア
意外なことに、多くのタスクでフルファインチューニングと同等かそれに近い性能が出るんだ。しかも、LoRAで学習した部分は「アダプタ」として元のモデルとは別に保存できるから、一つのベースモデルに複数のアダプタを付け替えて、用途ごとに切り替えて使えるという利点もあるんだよ。
LoRAとは。
人工知能に関わる言葉である「LoRA(Low-Rank Adaptation)」について説明します。大規模言語モデルのファインチューニングを効率化する手法で、モデルの重み行列に低ランクの追加行列を挿入し、その追加部分のみを学習させます。元のモデルの重みは固定されるため、メモリ使用量と計算コストを大幅に削減できます。
LoRAとは
LoRA(Low-Rank Adaptation / ローラ)は、2021年にMicrosoftの研究者Edward Huらが発表した、大規模言語モデルを効率的にファインチューニングするための手法です。論文タイトルは「LoRA: Low-Rank Adaptation of Large Language Models」で、発表以来LLMのファインチューニングにおけるデファクトスタンダードとなっています。
従来のフルファインチューニングでは、モデルの全パラメータ(数十億〜数千億個)を更新する必要があり、膨大なGPUメモリと計算時間が必要でした。例えば、70億パラメータのモデルをフルファインチューニングするには140GB以上のVRAMが必要で、A100やH100といった高価なGPUが複数台必要でした。
LoRAの核心的なアイデアは、重み行列の変化が「低ランク(Low-Rank)」で近似できるという発見に基づいています。つまり、ファインチューニングで変化する重みは、元の行列のごく一部の次元の変化で表現できるということです。この性質を利用して、元のモデルの重みは凍結(固定)し、小さな低ランク行列のみを学習させます。
LoRAの仕組み
LoRAの数学的な仕組みを見ていきましょう。元のモデルの重み行列をW(d×dの行列)とすると、ファインチューニングによる変化分ΔWは、二つの小さな行列AとBの積で近似されます。
具体的には、W’ = W + BA として表現されます。ここで、Bはd×rの行列、Aはr×dの行列です。rはランク(通常4〜64)で、元の次元dよりもはるかに小さい値です。例えば、d=4096、r=16の場合、元のW行列は4096×4096=約1677万パラメータですが、BAは(4096×16)+(16×4096)=約13万パラメータで済みます。パラメータ数が約99%削減されるのです。
学習中は、元の重みWは完全に凍結され、行列AとBのみが更新されます。推論時には、W+BAを一つの行列に統合できるため、追加の推論コストがゼロで済みます。これはLoRAの大きな利点で、アダプタを適用してもモデルの推論速度は変わりません。
| 項目 | フルファインチューニング | LoRA(r=16) |
|---|---|---|
| 学習パラメータ数(7Bモデル) | 約70億 | 約800万〜2000万 |
| 必要VRAM | 140GB+ | 16GB〜 |
| 学習速度 | 遅い | 2〜3倍高速 |
| アダプタサイズ | モデル全体 | 10〜100MB |
| 複数タスク対応 | タスクごとにモデルが必要 | アダプタの切替で対応 |
| 推論速度への影響 | なし | なし(統合可能) |
LoRAのハイパーパラメータ
LoRAの性能は、いくつかの重要なハイパーパラメータに左右されます。
ランク(r)は最も重要なパラメータで、追加行列の次元を決定します。ランクが高いほど表現力が増しますが、パラメータ数とメモリ使用量も増加します。一般的にはr=8〜32が推奨されます。単純なタスク(文体の変更など)ではr=4でも十分ですが、複雑なタスク(新しい知識の獲得など)ではr=64以上が必要になることもあります。
alpha(α)は、LoRA行列の出力をスケーリングするパラメータです。通常はランクの2倍(α=2r)に設定されます。αが大きいほどLoRAの影響が強くなり、元のモデルの知識からの変化が大きくなります。
ターゲットモジュールは、LoRAを適用するTransformerの層を指定します。通常はAttention層のQ(Query)とV(Value)の投影行列に適用しますが、K(Key)やFFN(Feed-Forward Network)層にも適用することで性能が向上するケースがあります。
QLoRA:さらに効率的なファインチューニング
QLoRA(Quantized LoRA)は、2023年にワシントン大学のTim Dettmersらが発表した手法で、LoRAをさらに効率化したものです。モデルの重みを4ビットに量子化した上でLoRAを適用することで、メモリ使用量を劇的に削減します。
QLoRAの主な技術的革新は3つあります。第一に、NF4(4-bit NormalFloat)量子化という新しい量子化手法で、精度の劣化を最小限に抑えながら重みを4ビットに圧縮します。第二に、二重量子化で、量子化パラメータ自体もさらに量子化してメモリを節約します。第三に、ページドオプティマイザで、GPUメモリが不足した場合にCPUメモリに自動的にオフロードします。
QLoRAにより、70億パラメータのモデルが12GBのVRAM(RTX 3060相当)でファインチューニング可能になりました。これは個人の一般的なゲーミングPCでLLMのファインチューニングが可能になったことを意味し、LLMのカスタマイズの民主化に大きく貢献しました。
| 手法 | ベースモデル精度 | 学習可能層 | 7Bモデル必要VRAM |
|---|---|---|---|
| フルFT | FP32/FP16 | 全層 | 140GB+ |
| LoRA | FP16 | 低ランク行列のみ | 16GB |
| QLoRA | NF4(4bit) | 低ランク行列のみ | 6〜12GB |
LoRAの実践とエコシステム
LoRAを実装するための主要なライブラリとツールを紹介します。
PEFT(Parameter-Efficient Fine-Tuning)は、Hugging Faceが提供するLoRAを含む効率的ファインチューニング手法のライブラリです。transformersライブラリと統合されており、数行のコードでLoRAを適用できます。LoRA以外にも、Prefix Tuning、P-Tuning、IA3などの手法が利用可能です。
Unslothは、LoRA/QLoRAの学習を2〜5倍高速化するライブラリです。カスタムCUDAカーネルにより、Hugging FaceのPEFTよりも大幅に高速で、メモリ使用量も70%削減されます。個人での学習には特に推奨されます。
Axolotlは、LoRA学習の設定をYAMLファイルで管理できるツールで、データの前処理からモデルの学習、評価までの全プロセスを統合的に管理します。
画像生成の分野でも、Stable DiffusionにLoRAを適用して特定のスタイルやキャラクターを学習させることが一般的になっています。テキストLLMと同じ原理で、画像生成モデルの一部のパラメータを効率的に微調整できます。
まとめ
LoRAは、大規模モデルのファインチューニングを劇的に効率化した革新的な手法です。低ランク近似というシンプルなアイデアにより、メモリ使用量を99%削減しながら、フルファインチューニングに匹敵する性能を実現します。QLoRAとの組み合わせにより、個人のGPUでもLLMのカスタマイズが可能になりました。
テキストLLMから画像生成モデルまで幅広く活用されており、AI開発の民主化に大きく貢献しています。ファインチューニングを検討する際は、まずLoRA/QLoRAを第一選択肢として検討することをお勧めします。
| 項目 | 説明 |
|---|---|
| 正式名称 | Low-Rank Adaptation |
| 提案 | 2021年 Microsoft Research(Edward Huら) |
| 原理 | 重み行列の変化を低ランク行列の積で近似 |
| 主要パラメータ | ランク(r)、alpha(α)、ターゲットモジュール |
| 発展形 | QLoRA(4bit量子化+LoRA) |
| ツール | PEFT, Unsloth, Axolotl |
