Re Reference AI

技術

LoRAとは

Low-Rank Adaptation

低ランク行列の追加学習により、事前学習済みモデルを効率的にファインチューニングする手法

ファインチューニングPEFT

ひとことで言うと

AIモデル全体ではなく一部だけを追加学習することで、少ない手間で用途に合わせられる技術。

概要

LoRA(Low-Rank Adaptation)は、大規模言語モデルなど事前学習済みモデルを効率的にファインチューニングするためのパラメータ効率的手法(PEFT)。 元の重み行列を凍結したまま、各層に小さな低ランク行列のペア(A・B)を追加し、その差分のみを学習することで、フルファインチューニングよりはるかに少ないパラメータ数・GPUメモリで特定タスクへの適応を実現する。 学習後は低ランク行列の積を元の重みに加算するだけでよく、推論時に追加の遅延を発生させずに元のモデルへマージできる。 複数のLoRAアダプタを用途ごとに用意し、タスクに合わせて切り替えて使う運用も可能。 量子化と組み合わせたQLoRAでは、ベースモデルを4ビット等に量子化した状態でLoRA学習することで、さらに少ないGPUメモリでのファインチューニングが可能になる。

背景

フルファインチューニングは、モデルの全パラメータを更新するため、大規模モデルほど必要なGPUメモリと計算コストが増大するという課題があった。 LoRAは、ファインチューニングによる重みの変化が本質的に低いランクへ近似できるという仮定に基づき、更新分を低ランク行列として表現しパラメータ数を抑えるために考案された。

歴史

2021年: Microsoftの研究チームがLoRAを提案する論文を発表。 2022-2023年: Hugging Face PEFTライブラリなどを通じ、LLMのファインチューニング手法として急速に普及。 2023年: 量子化と組み合わせたQLoRAが提案され、さらに少ないGPUメモリで大規模モデルのファインチューニングが可能に。

アーキテクチャ

事前学習済みの重み行列W(d×k)を凍結し、その更新分ΔWを、より低い次元 r を持つ2つの行列A(r×k)とB(d×r)の積BAとして近似する。 学習可能なパラメータはA・Bのみで、r はハイパーパラメータ(ランク)として数〜数十程度に設定されることが多い。 順伝播時の出力はWx + BAxとして計算される。

ワークフロー

ベースモデルの重みを凍結 → 対象層(Attentionのquery/value射影等)にLoRAアダプタ(A・B行列)を追加 → タスク固有データでA・Bのみを学習 → 学習後、推論速度を優先する場合はBAを元の重みWにマージし、複数タスクを切り替えたい場合はアダプタとして分離したまま保持。

コード例

PEFTライブラリでのLoRA適用

from peft import LoraConfig, get_peft_model

config = LoraConfig(r=8, lora_alpha=16, target_modules=["q_proj", "v_proj"])
model = get_peft_model(base_model, config)
model.print_trainable_parameters()

利点

  • フルファインチューニングと比べ、学習対象パラメータ数とGPUメモリ使用量を抑えられる
  • 元の重みを凍結するため、複数タスク向けのLoRAアダプタを軽量に切り替えて運用できる
  • 推論時には差分を元の重みにマージでき、追加の遅延を発生させない

欠点

  • ランク r の設定が性能とパラメータ効率のトレードオフに影響し、タスクに応じた調整が必要
  • 低ランク近似のため、フルファインチューニングと比べ表現力が制限される場合もある
  • 大きなドメインシフトを伴うタスクでは、フルファインチューニングに性能面で劣ることがある

比較

  • ファインチューニングLoRAは学習対象パラメータを絞りGPUメモリ使用量を抑えられる、フルファインチューニングの代替手法の代表例
  • LLMLoRAは主にLLMを少ない計算資源で特定タスクへ適応させるために使われる
  • 転移学習LoRAは転移学習をパラメータ効率的に行う手法の1つ
  • 量子化QLoRAは量子化とLoRAを組み合わせ、量子化されたモデルに対して効率的にファインチューニングを行う手法

関連用語

ファインチューニングLLMTransformer転移学習量子化DPO破滅的忘却PEFTQLoRA

よくある質問

LoRAとフルファインチューニングの違いは?

フルファインチューニングは全パラメータを更新するのに対し、LoRAは元の重みを凍結し、追加した低ランク行列のみを学習する。 学習パラメータ数とGPUメモリを抑えられる一方、表現力はやや制限される。

QLoRAとは?

モデルの重みを4bit等に量子化した状態でLoRAにより学習する手法。 GPUメモリ使用量をさらに削減し、単一GPUでも大規模モデルのファインチューニングを可能にする。

参考文献

関連Zenn記事