AI
AI INSIGHT 経営課題をAIで解決|経営者のためのAIメディア
LoRA(Low-Rank Adaptation)とは?少ないリソースでAIをカスタマイズする技術
AI用語解説

LoRA(Low-Rank Adaptation)とは?少ないリソースでAIをカスタマイズする技術

2025-11-07
2025-12-10 更新

700億パラメータのAIを、たった数時間でカスタマイズ——そんな魔法のような技術が「LoRA」です。学習パラメータを1万分の1に削減しながら、フルファインチューニングと同等の性能を実現する仕組みを解説します。

「自社データでAIをカスタマイズしたいけど、計算リソースが足りない...」

大規模言語モデル(LLM)の時代、こんな悩みを持つ企業は多いはずです。

その解決策が「LoRA(Low-Rank Adaptation:低ランク適応)」です。

この記事では、少ないリソースでAIをカスタマイズできるLoRAの仕組みと使い方を解説します。

LoRAとは?

一言で言うと

LoRAは、大規模AIモデルを効率的にカスタマイズ(ファインチューニング)するための技術です。

元のモデルの重みを固定したまま、小さな「アダプター」を追加して学習することで、学習するパラメータ数を大幅に削減できます。

読者
読者

どのくらい効率化されるんですか?

吉村(AIコンサルタント)
吉村(AIコンサルタント)

Microsoftの論文によると、学習するパラメータを最大1万分の1に削減しながら、フルファインチューニングと同等の性能を達成できます。GPT-3 175Bのような超大規模モデルでも、実用的なファインチューニングが可能になったんです。

LoRAが生まれた背景

従来のファインチューニングでは、モデルのすべてのパラメータを更新する必要がありました。

GPT-3(1750億パラメータ)をフルファインチューニングするには:

  • メモリ:数百GBのGPUメモリ
  • ストレージ:モデルごとに350GB(FP16)
  • コスト:高額なクラウドGPU料金

これでは、ほとんどの企業にとって現実的ではありません。LoRAは、この問題を解決するために2021年にMicrosoftの研究者によって提案されました。

LoRAの仕組み

低ランク行列分解とは

LoRAの核心は「低ランク行列分解」という数学的な手法です。

通常のファインチューニングでは、元の重み行列Wを直接更新します:

更新後の重み = W + ΔW

LoRAでは、この変化量ΔWを2つの小さな行列A・Bの積で表現します:

ΔW = A × B
(Aは縦長の行列、Bは横長の行列)
なぜこれで効率化されるのか

例えば、1000×1000の行列(100万パラメータ)を直接更新する代わりに、1000×8と8×1000の2つの行列(合計16,000パラメータ)を学習するだけで済みます。これがランク8のLoRAです。

「低ランク仮説」

LoRAは「固有ランク仮説」に基づいています。これは、ファインチューニングで本当に重要な変化は、実は少数のパラメータで表現できるという仮説です。

研究により、この仮説は多くのケースで正しいことが確認されています。

LoRAの動作イメージ

  1. 元のモデル(パラメータは固定)
  2. 入力を受け取る
  3. 元の重みW(固定)+ LoRA(A×B)(ここだけ学習)
  4. 出力を生成

LoRAのメリット

1. メモリ使用量の大幅削減

GPT-3 175Bの場合、LoRAを使うとGPUメモリ要件が3分の1になります。

手法 学習可能パラメータ メモリ
フルファインチューニング 175B(100%) 基準
LoRA 17.5M(0.01%) 1/3

2. 学習時間の短縮

RoBERTaでは約4分の1、GPT-2では約2分の1の時間で、フルファインチューニングと同等の性能を達成できたという報告があります。

3. タスク切り替えが容易

LoRAは小さなファイル(数MB〜数十MB)として保存できます。用途に応じて異なるLoRAを切り替えることで、1つのベースモデルを複数のタスクに適応させられます。

ベースモデル(固定)に対して、用途別のLoRAを切り替え:

  • LoRA-A(カスタマーサポート用)
  • LoRA-B(翻訳用)
  • LoRA-C(コード生成用)

4. カタストロフィック・フォーゲッティングの回避

フルファインチューニングでは、新しいタスクを学習すると元の知識を「忘れる」問題がありました。LoRAでは元の重みを固定するため、この問題を回避できます。

読者
読者

良いことばかりに聞こえますが、デメリットはないんですか?

吉村
吉村

大規模なデータセットを使う「事前学習に近い」タスクでは、フルファインチューニングに劣る場合があります。LoRAのパラメータでは表現しきれないほど大きな変化が必要なケースですね。

LoRAのパラメータ設定

ランク(Rank)

LoRAの最も重要なパラメータが「ランク」です。これは行列A・Bの間の次元数を決めます。

  • ランク4〜8:軽量だが表現力が限定的
  • ランク16〜32:バランスが良い(多くの場合に推奨)
  • ランク64以上:高い表現力だが効率が下がる

アルファ(Alpha)

学習率の調整パラメータです。一般的に「ランクの2倍」に設定するのが良いとされています。

ランク = 16 → アルファ = 32

ターゲットモジュール

LoRAを適用するモデルの層を指定します。研究によると、Key/Valueの注意層だけでなく、すべての層にLoRAを適用することで性能が向上します。

QLoRA:さらなる効率化

QLoRAは、LoRAと量子化を組み合わせた手法です。

  • ベースモデル:4ビットに量子化
  • LoRA部分:通常精度で学習

これにより、70億パラメータのモデルでも14GBのGPUメモリでファインチューニングが可能になります。

QLoRAの威力

QLoRAを使えば、一般的なゲーミングPC(RTX 3090など)でも大規模モデルのファインチューニングが可能です。

DoRA:2024年の進化

2024年に提案されたDoRA(Weight-Decomposed Low-Rank Adaptation)は、LoRAをさらに発展させた手法です。

重みを「大きさ」と「方向」に分解し、方向の更新にLoRAを使うことで:

  • 学習の安定性向上
  • より高い性能の達成
  • 追加コストはわずか

実践:LoRAの使い方

Hugging Face PEFTでの実装

from peft import LoraConfig, get_peft_model

# LoRA設定
lora_config = LoraConfig(
    r=16,                    # ランク
    lora_alpha=32,           # アルファ
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
    lora_dropout=0.05,
)

# モデルにLoRAを適用
model = get_peft_model(base_model, lora_config)

# 学習可能パラメータの確認
model.print_trainable_parameters()
# → trainable params: 4,194,304 (0.25%)

学習後のLoRA保存と読み込み

# 保存(数MBのファイル)
model.save_pretrained("my_lora_adapter")

# 読み込み
from peft import PeftModel
model = PeftModel.from_pretrained(base_model, "my_lora_adapter")

LoRA vs RAG:どちらを選ぶ?

AIをカスタマイズする方法として、LoRAとRAGがよく比較されます。

項目 LoRA RAG
用途 モデルの振る舞いを変える 外部知識を参照する
学習データ 少量〜中程度 不要(検索対象は必要)
更新頻度 再学習が必要 リアルタイム更新可能
コスト 学習時のみ 推論時に検索コスト
吉村
吉村

「AIの話し方や専門性を変えたい」ならLoRA、「最新情報や社内文書を参照させたい」ならRAGが適しています。両方を組み合わせることも可能です。

まとめ:効率的なAIカスタマイズの鍵

LoRAは、大規模AIモデルを効率的にカスタマイズするための革新的な技術です。

LoRAの重要ポイント:

  • 低ランク行列分解で学習パラメータを大幅削減
  • フルファインチューニングと同等の性能を維持
  • メモリ要件を3分の1以下に
  • タスクごとに小さなファイルで管理可能
  • QLoRAで一般PCでも利用可能
  • DoRAでさらなる性能向上

「AIをカスタマイズしたいけどリソースがない」——そんな企業にとって、LoRAは強力な選択肢となるでしょう。

Tags

LoRA ファインチューニング LLM PEFT
吉村 この記事の筆者

吉村

AI INSIGHT

大学でIT教育に20年携わり、わかりやすい解説に定評あり。現在は合同会社四次元にてAI初心者向けの入門コンテンツを担当。

この記事をシェアする

記事一覧に戻る