LLM Frontline
開発・エージェント

LoRA(低ランク適応)とは|重みを凍結して差分だけ学ぶ仕組みと、全パラメータの微調整に届かない場面

ミナト・開発・API担当
・ 約13分で読めます
LoRA(低ランク適応)とは|重みを凍結して差分だけ学ぶ仕組みと、全パラメータの微調整に届かない場面

LoRA(Low-Rank Adaptation、低ランク適応)は、LLMを追加学習するときに、元の重みには手を付けず、小さな「差分」だけを学習する手法です。2021年6月にHuらがarXivで公開した論文が出発点で、オープンウェイトのモデルを自社データで調整するときに広く使われています。

原論文は、GPT-3 175BをAdamで全パラメータ微調整する場合と比べて、学習するパラメータを約1万分の1、GPUメモリの必要量を約3分の1にできると報告しました。一方で2024年の比較研究は、プログラミングと数学の継続事前学習では、一般的な設定のLoRAが全パラメータの微調整を大きく下回ると報告しています。この記事では、この「軽いが、何でも覚えられるわけではない」という両面を、一次資料の数値で整理します。

LoRAの仕組み|更新分を2つの細い行列で表す

LLMの中には、巨大な行列(重み)が層ごとに並んでいます。普通の微調整では、この重みWそのものを更新します。LoRAの考え方は、更新後の重みを「元の重みW + 更新分ΔW」と分け、Wを凍結したまま、ΔWだけを学習することです。

このとき、ΔWをそのまま持つと元の行列と同じ大きさになってしまいます。そこでLoRAは、ΔWを細長い行列B(d×r)と横長の行列A(r×k)の積BAで表します。rはランクと呼ばれる小さな数で、8や16といった値がよく使われます。学習するのはAとBだけです。

例: 4096×4096の重み行列1つ学習する値の数
全パラメータの微調整16,777,216
LoRA(r=8)8×(4096+4096)=65,536(約0.39%)
LoRA(r=64)64×(4096+4096)=524,288(約3.1%)

Hugging FaceのPEFTライブラリの説明では、学習開始時はAをランダムに、Bをゼロに初期化します(init_lora_weights=Trueの既定)。BAが最初はゼロなので、LoRAを付けた直後のモデルは元のモデルとまったく同じ出力を返し、学習が進むにつれて差分が育っていきます。差分には倍率s=lora_alpha/rが掛かり、use_rslora=Trueにするとs=lora_alpha/√rに変わります。

学習が終わったら、BAを元の重みに足し込めば(マージすれば)、通常のモデルと同じ形に戻ります。原論文が「アダプター方式と違い、推論時の遅延を追加しない」と主張しているのはこのためです。PEFTではmodel.merge_and_unload()がこの操作で、インプレースではないので戻り値を受け取る必要があります。

何が軽くなり、何は軽くならないか

LoRAで減るのは、主に「学習する値」と、それに付随するメモリです。Adamのような最適化手法は、学習する値ごとに勾配と状態を持つため、学習する値が1万分の1になれば、その分のメモリが大きく減ります。原論文のGPUメモリ約3分の1という数字はこの効果です。

一方で、ベースモデルの重み自体は学習中もGPUに載せておく必要があります。ここを減らしたのがQLoRAです。2023年5月公開の論文は、ベースモデルを4ビットに量子化して凍結し、その上にLoRAを載せる方法で、65Bのモデルを48GBのGPU1枚で、16ビットでの微調整と同等の性能を保ったまま学習できると報告しました。そのために、正規分布に従う重みに向く4ビットの型NF4(4-bit NormalFloat)、量子化定数をさらに量子化するDouble Quantization、メモリの急増を逃がすPaged Optimizersの3つを導入しています。

あわせて読みたい

量子化(quantization)とは|LLMを軽く・速く・安く動かすモデル圧縮の仕組み

計算量はメモリほどは減りません。Thinking Machinesの分析では、N×Nの行列1つあたりの順伝播と逆伝播の計算量は、全パラメータの微調整が3N²、LoRAが2N²+6NRで、LoRAは全パラメータ微調整の3分の2をわずかに上回る程度です(注意機構の計算は含まない試算)。凍結した重みについても、誤差を手前の層へ伝えるための計算は必要だからです。「学習が1万倍速くなる」わけではない点は押さえておきます。

全パラメータの微調整に届かない場面

LoRAの限界を体系的に調べたのが、2024年5月公開のBidermanらの論文「LoRA Learns Less and Forgets Less」(TMLR 2024年8月採録)です。プログラミングと数学の2領域で、約10万件の指示学習と、200億トークンの継続事前学習を比べました。

観点論文の報告
対象領域の性能標準的な低ランク設定では、LoRAは全パラメータの微調整を大きく下回る
対象外の性能LoRAのほうがベースモデルの性能を保ちやすく、weight decayやdropoutより忘却を抑える
出力の多様性LoRAのほうが多様な生成を保ちやすい
差の原因の手がかり全パラメータの微調整が学ぶ更新は、典型的なLoRA設定の10倍から100倍のランクを持つ

つまり、学習させる情報の量が、選んだランクで表せる容量を超える条件(新しい領域の大規模なコーパスでの継続事前学習など)では、標準的な低いランクのLoRAは全パラメータの微調整を下回ることがあります。一方で、対象外の能力を壊しにくいという利点は、学習データの量によらずLoRAを選ぶ理由になります。

Thinking Machinesの「LoRA Without Regret」(2025年9月29日)も、同じ方向の結果をより細かく報告しています。小中規模の指示学習・推論データセット(Tulu3、OpenThoughts3)では、ランクを十分に取ったLoRAは全パラメータの微調整と同じ学習曲線をたどり、容量を超えたところで低ランクのLoRAだけが離れていきます。損失が急に止まるのではなく、学習効率が落ちていく形です。

効かせるための設定|層・学習率・バッチサイズ

同じブログは、実務の設定に直結する知見をいくつか出しています。

  • 掛ける層: 注意機構の行列だけに掛けたLoRAは、MLP層だけに掛けたLoRAを大きく下回りました。Llama-3.1-8Bでは、注意機構のみのランク256(約0.25Bパラメータ)が、MLPのみのランク128(約0.24B)に負けており、パラメータ数では説明できません。MoEモデルでも同じ傾向で、MLPに掛けた上に注意機構を足しても上積みはありませんでした。
  • 学習率: 同社の実験はα=32、倍率α/r、既定の初期化という設定です。その条件で、最適な学習率は全パラメータ微調整の約10倍(当てはめた倍率は9.8)でした。100ステップ未満の短い学習では約15倍という予備的な結果もあります。1/rの倍率のおかげで、最適な学習率はランク4から512の間でも2倍未満しか変わりません。rsLoRA(α/√r)のように倍率の式を変えたり、初期化を変えたりした場合は、この10倍をそのまま当てはめず探索し直す必要があります。
  • バッチサイズ: LoRAは大きなバッチサイズへの耐性が全パラメータ微調整より低く、バッチを大きくするほど差が開きます。
  • 強化学習: 方策勾配法の強化学習では、ランク1のLoRAでも全パラメータの微調整と同等でした。1エピソードから得る情報量が小さいため、少ない容量で足りるという説明です。

PEFTで書く場合、MLPを含むすべての線形層に掛けるにはtarget_modules="all-linear"を指定します(出力層は除外されます)。QLoRAの論文も全線形層に掛ける構成をとっています。ただし対象になるのは線形層(LinearとConv1D)として実装されたモジュールです。MoEモデルでエキスパートの重みがnn.Parameterとして実装されている場合、PEFTのドキュメントはtarget_parametersで別途指定する方法を案内しています。使うモデルの実装を確かめ、エキスパートに掛かっているかを学習前に確認してください。古い解説記事にあるtarget_modules=["q_proj", "v_proj"]のような注意機構だけの設定は、上の結果からすると最初の選択としては勧めにくくなっています。

ヒント

ランクや学習率は、ここに挙げた研究と自社データで条件が違えば最適値も動きます。評価セットを先に作り、ランクを2から3通り、学習率を数通り振って、対象タスクの改善と対象外タスクの劣化の両方を測ってから決めるのが確実です。

あわせて読みたい

LLMアプリの評価(eval)の作り方|「動いた気がする」で止めないための実務手順

業務で使うときの判断ポイント

LoRAを検討しやすいのは、社内の文書形式に合わせた出力、決まった分類や抽出のやり方、特定の口調など、学習データが比較的少なくて済む用途です。学習させる量が大きくなるほど、ランクの容量を超えて全パラメータの微調整との差が出やすくなります。これとは別の理由で、社内規程や製品情報のように頻繁に変わる情報は、学習させるより先にRAGで外から渡す方法を検討します。情報が変わるたびに学習し直す負担がかかり、どの版の情報で答えたかも追いにくいからです。

あわせて読みたい

ファインチューニングとRAGの使い分け|LLMをカスタマイズする2つの道の選び方

運用面では、アダプターが小さいことが効きます。ベースモデル1つの上に、部署やタスクごとのアダプターを切り替えて使えます。PEFTではload_adapterで複数のアダプターを読み込み、set_adapterで切り替えられ、推論時にはgenerate(..., adapter_names=[...])でバッチ内のサンプルごとに別のアダプターを当てることもできます(DoRAやマージ済みのアダプターでは使えません)。マージせずに切り替える運用では、マージしたときのような「追加の遅延なし」にはならない点は見込んでおきます。

量子化したベースモデルにマージする場合は、PEFTのドキュメントが注意を書いています。マージ時にベースの重みが再量子化されるため、マージの取り消しは厳密には元に戻らず、マージと取り消しを繰り返すと丸め誤差が積み重なります。本番に出す重みは、量子化前のベースにマージしてから量子化し直すか、アダプターを分けたまま配る、のどちらにするかを決めておくと手戻りが減ります。

注意

LoRAのアダプターだけを配布する場合も、ベースモデルのライセンスは確認が必要です。オープンウェイトのライセンスは派生物(derivative works)の扱いをそれぞれ定めており、たとえばMistral Large 4のライセンスは、派生物への推論や追加学習を第三者に提供する事業に別途の商用ライセンスを求めています。社外にアダプターや調整済みモデルを出す前に、ベースモデルの条文を読んでください。

あわせて読みたい

Mistral Large 4がオープンウェイトに|「Model-as-a-Service」条項を読み、自社運用・製品組み込み・API利用の線引きを確かめる

よくある質問

LoRAとファインチューニングは別物ですか
LoRAはファインチューニング(微調整)の一種です。元の重みをすべて更新する全パラメータの微調整に対し、LoRAは元の重みを凍結し、更新分を2つの小さな行列の積で表して、その小さな行列だけを学習します。
LoRAを使うと推論が遅くなりますか
学習した差分を元の重みに足し込む(マージする)と、通常のモデルと同じ形になるため、原論文は推論時の追加の遅延はないとしています。マージせずにアダプターを切り替えて使う場合は、その分の計算が加わります。
ランクはいくつにすればよいですか
一律の正解はありません。2024年の比較研究では、継続事前学習のような大量の学習では典型的なランクだと容量が足りず、全パラメータの微調整を下回りました。逆に強化学習ではランク1でも同等という報告があります。評価セットで2から3通りのランクを比べて決めてください。
注意機構(q_proj、v_proj)だけに掛ければ十分ですか
Thinking Machinesの2025年の報告では、注意機構だけのLoRAはMLP層に掛けたLoRAを大きく下回りました。PEFTではtarget_modules="all-linear"で全線形層に掛けられ、QLoRAの論文もこの構成をとっています。
社内の最新情報をLoRAで覚えさせるのは有効ですか
頻繁に変わる情報は、RAGで回答時に外から渡すほうが向いています。情報が変わるたびに学習し直す手間がかかるうえ、学習させる量が大きくなると、標準的なランクのLoRAでは容量が足りず全パラメータの微調整を下回ることがあるためです。

まとめ

LoRAで追加学習する前に確認すること

  • 覚えさせたいのが「やり方」か「知識」かを切り分け、知識ならRAGを先に検討した
  • 評価セットを作り、対象タスクの改善と対象外タスクの劣化の両方を測る準備をした
  • 掛ける層をMLPを含む全線形層(all-linear)から始め、MoEならエキスパートに掛かっているか確認した
  • 学習率は同等の設定(α/rの倍率)なら全パラメータ微調整の約10倍を探索の起点にし、数通り振って決める計画にした
  • マージするか、アダプターを分けて配るかを決め、量子化ベースへのマージの丸め誤差を確認した
  • ベースモデルのライセンスで、派生物やアダプターを社外に出す条件を確認した

LoRAは「巨大な重みの更新を、低いランクの差分で近似する」というひとつの仮定で、追加学習のメモリと保存の負担を大きく下げた手法です。ただし学習させる量がランクの容量を超えると、全パラメータの微調整に届かなくなります。軽さに頼る前に、何をどれだけ覚えさせたいのかを決め、評価セットで改善と劣化を両方測る。この順番を守れば、LoRAは小さなチームでも扱える現実的な選択肢になります。

出典・参考

この記事をシェア

関連する記事

開発・エージェント

ファインチューニングとRAGの使い分け|LLMをカスタマイズする2つの道の選び方

LLMを自社用途に寄せる方法には、プロンプト、RAG、ファインチューニングの階層があります。RAGとファインチューニングはそれぞれ何を得意とし、どこで選ぶべきか。知識の更新性、出力の安定性、コストとトラフィックの観点から使い分けの原則を整理し、実務で有効なハイブリッド構成と落とし穴まで、公式ドキュメントを確認しながら冷静にまとめます。

開発・エージェント

知識蒸留(distillation)とは|大きな教師モデルの知識を小さな生徒モデルへ移す仕組み

知識蒸留は大きな教師モデルの振る舞いを小さな生徒モデルに真似させて学習させる技術です。原典のsoft targetとtemperature、量子化やMoEとの違い、現代LLMでのデータ蒸留、教師の質が上限になる勘所、商用APIの出力を学習に使う際の規約上の注意まで、優劣を断定せず整理します。