AI

LoRAとは?低ランク適応の仕組み・使い方・派生手法をわかりやすく解説

LoRA(Low-Rank Adaptation/低ランク適応)とは、大規模なAIモデルの重みの大部分を凍結したまま、追加した小さな「低ランク行列」だけを学習することで、ごく少数のパラメータで効率的にファインチューニング(微調整)する手法です。読み方は「ローラ」。Microsoftの研究者らが2021年に論文(arXiv:2106.09685)で提案しました。原論文では、GPT-3(1750億パラメータ)をAdamでフルに微調整する場合と比べ、学習するパラメータ数を約1万分の1、GPUメモリ要件を約3分の1に削減できると報告されています。本記事では、LoRAの仕組みから従来手法との違い、PEFTでの実装、Stable Diffusionでの活用、QLoRA・LoRA-Proなどの派生手法までを、具体的な数値とともに解説します。

まとめ:LoRAは大規模モデルを少ないパラメータで微調整する実用手法

LoRAは、モデル本体の重みを凍結し、各層に追加した2つの小さな行列AとBだけを学習します。核心は「タスクへの適応で生じる重みの変化は低ランク(低次元)で表現できる」という仮説にあり、これにより学習パラメータ・メモリ・時間を大きく削減しながら、多くのタスクでフルチューニングに近い精度を保てます。学習後のAとBは元の重みへ合成できるため、推論時の追加遅延はほぼありません。

使いこなす要点は2つ、ランクrの選び方と過学習対策です。ここを押さえれば、限られたGPU資源でも大規模モデルを柔軟にカスタマイズできます。実装はHugging FaceのPEFTライブラリを使えば数行で済み、Stable Diffusionの画風・キャラクター学習からQLoRAによる超大規模モデルの省メモリ微調整、企業のドメイン特化AIまで応用が広がっています。

LoRAとは:大規模モデルの微調整を効率化する手法

LoRAを理解する出発点は、「大規模モデルのファインチューニングはなぜ難しいのか」という問題です。ここでは、LoRAが生まれた背景と名称の意味、適用対象を整理します。

LoRAが生まれた背景

大規模な事前学習モデルを特定タスク向けに微調整する際、すべてのパラメータを更新する従来手法では計算コストとメモリ消費が非常に大きくなります。1750億パラメータを持つGPT-3を丸ごと再学習するのは、多くの組織にとって現実的ではありません。この課題に対し、モデルの大部分を凍結(固定)したまま、ごく小さな追加パラメータだけを学習するのがLoRAです。その発想の根底には、「モデルの重みの変化は、実は低次元の情報で表現できる」という洞察があり、これを低ランク行列で実現した点が新しいところです。

Low-Rank Adaptation(低ランク適応)という名称と読み方

LoRAは「Low-Rank Adaptation」の略で、日本語では「低ランク適応」、読み方は「ローラ」です。「低ランク」とは行列のランク(階数)が小さいことを指し、LoRAではモデルの重みの更新分を、ランクの小さな行列で表現します。モデル全体の重みを直接書き換えるのではなく、ランクrという小さな次元の行列で「変化分」だけを表すのがポイントです。この名称は、巨大なモデルの重み変化を低次元の情報に圧縮して効率よく適応させるという、手法の本質を表しています。IoT向けの無線通信規格「LoRa(Long Range)」とは無関係の別技術なので、混同しないよう注意してください。

LoRAが適用できる対象

LoRAはもともとGPT-3などの大規模言語モデル(LLM)への適用を念頭に開発されましたが、その後、画像生成モデル(Stable Diffusionなど)にも適用が広がりました。モデル内部の線形層や注意機構(Attention)にLoRAを組み込めれば微調整できるため、テキスト生成・画像生成を問わず適用可能です。さらに音声認識・音声合成モデルや対話エージェントなどにも応用が進んでおり、LLMからコンピュータビジョンまで幅広い領域で使われています。

LoRAの仕組み:低ランク行列で重みの変化を表現する

ここではLoRAの技術的な仕組みを見ていきます。中心となるのは「凍結した重み」と「低ランク行列の追加」という2つの考え方です。

AとBの2つの小さな行列を追加する

LoRAでは、事前学習済みモデルの重み行列Wを凍結し、その各層に対して2つの小さな行列AとBを新たに追加して学習します。具体的には、Aはサイズ(d×r)、Bはサイズ(r×d)の行列で、rは「ランク」と呼ばれる小さな値です。推論時には、元の出力に対してAとBの積(B×A)による補正項を加えます。元の重みWは更新せず、AとBだけを学習する点が重要で、これにより学習すべきパラメータ数が大幅に削減されます。既存モデルに小さなパッチを当てるイメージに近いといえます。初期状態ではBをゼロで初期化するため、学習開始時点の出力は元モデルと一致し、そこから差分だけを学んでいきます。

低ランク近似という考え方

LoRAの根底にあるのは、「モデルの重みの変化には低ランクの構造がある」という仮説です。大規模モデルをタスクに合わせて調整するとき、重みの微小な変化は、実は低次元の情報で十分に表現できるのではないか、という発想です。LoRAでは重みの更新分ΔWを、2つの低ランク行列の積(ΔW = B×A)として表します。ランクrが小さくても多くのタスクで十分に適応できることが実証されており、この低ランク近似によって、パラメータ数を大きく減らしつつ性能を保てます。

学習するパラメータ数が大幅に減る

LoRA最大の特徴は、学習すべきパラメータ数が格段に少ないことです。通常のファインチューニングではモデル全層の膨大なパラメータを更新しますが、LoRAではAとBという小さな行列だけを訓練します。原論文では、GPT-3 175BをAdamでフル微調整する場合と比べ、学習パラメータ数を約1万分の1に、必要なGPUメモリを約3分の1に減らせたと報告されています。効果が高いのは注意機構(Attention)の重み(Query・Value)への適用で、それ以外の層は凍結するのが基本です。勾配計算が限定されるため、必要なメモリや学習時間も削減されます。

推論時のオーバーヘッドが小さい

LoRAの利点は学習時だけでなく推論時にも現れます。学習したAとBの行列は、モデルを使う段階で元の重みに合成(マージ)して組み込めます。その結果、推論時には通常のモデルと同じ計算で処理でき、追加の遅延(レイテンシ)がほとんど発生しません。別のネットワークを逐次実行する必要がないためです。またLoRAモジュール自体が小さく、Stable Diffusionでは1つのLoRAが数MB〜数十MB程度に収まります。ベースとなる大きなモデルに比べてごくわずかなので、ストレージやメモリへの負担も小さく済みます。

従来手法との違い:フルチューニング・アダプタ・プロンプトチューニングとの比較

LoRAの位置づけを理解するため、代表的な微調整手法と比較します。以下は、更新するパラメータ量・推論時の追加負荷・特徴を整理したものです。

手法 更新するパラメータ 推論時の追加遅延 特徴
フルチューニング 全パラメータ なし 最も高精度だが計算資源が莫大
アダプタ 挿入層のみ あり 追加層の計算で遅延が増える
プロンプトチューニング 仮想トークンのみ わずか 重みを変えず安全だが適応範囲は限定的
LoRA 低ランク行列A・Bのみ ほぼなし 重みへ合成でき汎用性が高い

フルチューニングとの違い

フルチューニング(全パラメータ微調整)は、モデルの全パラメータを更新する伝統的な手法です。GPT-3をそのまま調整しようとすれば、1750億ものパラメータを更新する必要があります。一方LoRAでは、小さなAとBの行列だけを学習すればよく、前掲のとおり学習パラメータは全体の約0.01%(およそ1万分の1)まで減ります。それでもフルチューニングに匹敵する性能を達成したと原論文は報告しています。全パラメータを更新するフルに対し、LoRAは差分だけを小さな行列で学ぶ——この違いが資源要件の差を生みます。ただし、対象ドメインの知識を大幅に上書きしたい場合や、数万件規模の高品質データで性能を抜本的に引き上げたい場合は、LoRAより従来のフル微調整が有利なこともあります。データ量と目的で使い分けるのが実務的です。

アダプタ方式との違い

各層に小型のネットワークを追加する「アダプタ」も、パラメータ効率化の手法の一つです。ただしアダプタは推論時にもその追加層の計算が必要で、わずかに遅延が増える点が指摘されてきました。LoRAは前述の通り、推論時に元の重みへ統合できるため、追加の計算ステップが不要で推論速度への影響がほとんどありません。また、行列を足し込むだけのシンプルな構造で実装の負担も比較的小さいという利点があります。

プロンプトチューニングとの違い

プロンプトチューニング(Prefixチューニングを含む)は、モデルの重みを変えず、追加の「仮想トークン」を学習するアプローチです。モデルを改変しない安全さがある一方、適応できる範囲には限りがあります。LoRAはモデル内部の重みを直接調整するため、よりモデルの表現能力に踏み込んだ適応ができ、画像や音声のモデルにも適用できる汎用性があります。「入力を工夫する」のではなく「モデル自体を少しだけ変える」ことで、幅広い適応を可能にした手法といえます。

LoRA導入で得られる4つの利点(省メモリ・高速化・多タスク・共有)

LoRAには、計算資源の節約だけでなく、モデルの運用や拡張の面でも複数の利点があります。ここでは代表的な4つを見ていきます。

メモリ・ストレージの節約

LoRAでは大半の層が凍結されているため、学習に必要なGPUメモリが大きく減少します。また、学習後に保存するのはAとBの行列だけです。前述のとおりファイルは数MB〜数十MBと小さく、モデル全体なら数GBに及ぶところをごくわずかで済ませられるため、手元のGPUやディスク容量でも大規模モデルを扱いやすくなります。

学習時間と計算コストの短縮

調整するパラメータが少なく勾配計算も限定的なため、LoRAの学習は高速です。Stable Diffusionのようなモデルでも、数分〜十数分程度でLoRAを学習できたという報告があります。学習が速いと試行錯誤の回数を増やせるため、開発サイクルが加速します。クラウド利用時のコストや電力消費を抑えやすい点もメリットです。

1つのベースモデルで複数タスクに対応できる

LoRAの柔軟性を象徴するのが、1つのベースモデルで複数タスクに対応できる点です。タスクごとに別々のLoRAモジュールを学習しておけば、推論時に必要なLoRAを読み込んで切り替えるだけで、そのタスクに特化したモデルとして振る舞わせられます。1つのLLMに対し用途別のLoRAを用意しておけば、モジュールを差し替えるだけで複数の役割を担わせられます。LoRAの読み込み・切り替えは軽量なので、動的な切り替えも比較的容易です。

モデルの共有・共同開発がしやすい

LoRAモジュールは小さく共有しやすいため、コミュニティでの共同開発とも相性が良い手法です。ベースモデル(数GB)は共通のものを使い、LoRAファイル(数MB)だけをやりとりすれば済むため、知見の共有やモデル拡張が進みやすくなります。特に画像生成の分野では、ユーザーが作成した画風やキャラクターのLoRAが数多く公開されており、誰でもダウンロードして自分の環境に適用できる文化が育っています。

LoRAの使い方・実装方法(Hugging Face PEFT)

LoRAはコミュニティによるツールやライブラリが充実しており、比較的簡単に利用できます。ここでは代表的なライブラリであるHugging FaceのPEFT(Parameter-Efficient Fine-Tuning)を中心に、実装の流れとハイパーパラメータの目安を説明します。

PEFTライブラリの基本的な流れ

LoRAの実装には、Hugging Faceが提供するPEFTライブラリを使うのが便利です。基本的な手順は、ベースモデルの読み込み → LoRA設定の付与 → 通常どおりの訓練、の3ステップです。

from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model

model = AutoModelForCausalLM.from_pretrained("gpt2")
config = LoraConfig(r=8, lora_alpha=16, target_modules=["c_attn"],
                    lora_dropout=0.05, task_type="CAUSAL_LM")
model = get_peft_model(model, config)
model.print_trainable_parameters()  # 学習対象パラメータ数を確認

get_peft_modelを通すと、指定したモジュールがLoRA対応に置き換わり、勾配はLoRA部分に対してのみ計算されます。あとは通常のTransformersと同じ訓練ループを回すだけです。PEFTはPrefix Tuningなど他の手法にも対応しており、さまざまな効率化手法を統一的に扱える点も便利です。

適用する層(target_modules)の選び方

LoRAを適用する対象モジュールの選択も重要です。Transformer系モデルでは、Attention機構内の線形層(Query・Key・Valueの重み)やFFN部分の線形層にLoRAを入れるのが効果的とされています。原論文の検証では、QueryとValueの2つに適用する構成が精度と効率のバランスに優れていました。PEFTではtarget_modulesという引数で適用先のモジュール名を指定します。全層に入れる必要はなく、効果の高い層に絞ることでさらに効率化できます。どの層に適用するかは、モデルとタスクに応じて実験的に調整するのが現実的です。

主なハイパーパラメータ(ランクr・α・dropout・学習率)

LoRA固有のハイパーパラメータは、主にランクrとスケーリング係数α、そしてlora_dropoutです。ランクrはAとBの内部次元で、精度とパラメータ数のトレードオフを決めます。大きくすれば表現力は増えますが、パラメータ数も増えます。一般にはr=8や16といった値から始めるのが定番で、複雑なタスクではr=32〜64まで上げる場合もあります。αは更新のスケーリング係数で、経験的に「α=r」または「α=2r」に設定することが多いです。lora_dropoutは過学習を抑える正則化で、0.05〜0.1程度が目安。学習率はフルチューニングより高め(1e-4〜3e-4程度)に設定できるのもLoRAの特徴です。ステップ数は小規模データなら数百〜数千ステップで収束することが多く、検証データの推移を見ながら決めます。いずれも初期値の目安であり、タスクに応じた調整が前提です。

Stable DiffusionとLoRA:画像生成での使い方

テキスト向けに考案されたLoRAですが、Stable Diffusionなどの画像生成モデルでも広く使われています。ここでは画像生成領域での使い方を見ていきます。

どこにLoRAを適用するか

Stable Diffusionは、テキストエンコーダ(文章を潜在ベクトルに変換)とUNet(潜在ベクトルから画像を生成)から構成されています。LoRAを適用する主な対象は、UNet内の重みとテキストエンコーダ内の重みです。特にUNetのクロスアテンション層にLoRAを入れると、特定の視覚スタイルや対象への反応を調整しやすくなります。テキストエンコーダ側に入れると、プロンプト中の新しい語(オリジナルキャラクターの名前など)の意味づけを微調整できます。

少ないデータで画風やキャラクターを学習できる

画像生成でLoRAを使う大きな意義は、少ないデータで新しい画風やキャラクターを学習させられる点です。従来は数百〜数千枚規模の画像と長時間の再学習が必要でしたが、LoRAなら十数枚〜数十枚程度の画像と説明文(キャプション)から、特定の絵柄や対象を学習させられます。モデル全体を作り変えるのではなく既存モデルに追加する形なので、元の幅広い知識を保ったまま特定のスタイルを足せるのが利点です。特定キャラクターを再現する用途は「キャラLoRA」とも呼ばれ、コミュニティで数多く共有されています。

DreamBoothとの違い

画像生成の微調整手法としてはDreamBoothも知られています。DreamBoothは少数画像でモデルを再学習する強力な方法ですが、得られるモデルは新たなチェックポイント(数GB規模)として保存する必要があり、サイズが大きくなります。一方LoRAは数MB〜数十MBの差分だけを共有すればよく、軽量です。また、LoRAは元モデルを保護しながら学習するため比較的安定しやすいとされます。表現力と効率・共有のしやすさのバランスから、画像分野でもLoRAが選ばれる場面が増えています。

WebUIでの利用

AUTOMATIC1111版などのWeb UIを使えば、プログラミングなしでLoRAを利用できます。学習済みLoRAのファイル(.safetensorsなど)を所定のフォルダに置き、生成時のプロンプトで <lora:LoRA名:重み> のように指定すると、そのLoRAを適用して画像を生成できます。重みの値(例:0.6〜1.0)で適用の強さを調整でき、GUI上で手軽に試せます。

LoRAの派生手法と最新動向

LoRAの成功を受けて、手法を発展・改良するさまざまな研究が登場しています。ここでは代表的な派生手法を紹介します。なお、この領域は研究の進展が速いため、最新の正確な情報は各論文や公式ドキュメントで確認することをおすすめします。

QLoRA:量子化とLoRAの組み合わせ

QLoRA(2023年、arXiv:2305.14314)は、モデルの4ビット量子化とLoRAを組み合わせた手法です。重みを4ビット(NF4という専用データ型)に量子化して大幅にメモリを削減したうえで、LoRAによる微調整を行います。原論文では、650億(65B)パラメータ級のモデルを、フル微調整なら780GB超のGPUメモリを要するところ、わずか48GBの単一GPUで微調整できることが示されました。この手法で学習された対話モデル「Guanaco」は、単一GPUでの24時間の学習でChatGPTの99.3%の性能に達したと報告されています。量子化で生じる誤差をLoRAが補完する仕組みだ。高い精度を保ちながらメモリを大きく節約でき、資源が限られる環境でも超大規模モデルを扱えるようにした、影響の大きい手法でした。QLoRAの実装手順やモデル規模ごとのVRAM目安、学習後にアダプタをマージするときの注意点はQLoRAとは?4bit量子化+LoRAの仕組み・VRAM目安・実装手順と採用判断を解説【2026年版】で詳しく扱っています。

LoRA-Pro:勾配を補正してフルチューニングに近づける

LoRA-Pro(2024年、arXiv:2407.18242、ICLR 2025採択)は、「LoRAは本当に適切に最適化されているのか」という問いから生まれた手法です。著者らは、LoRAでの最適化が「低ランクの勾配を用いたフルチューニング」と数学的に等価であることを示し、通常のLoRAではこの勾配が本来望ましい形からずれてしまう点を指摘しました。LoRA-Proは、AとBの勾配を理論的に導いた最適解へ補正しながら学習することで、フルチューニングとの性能差を縮めます。自然言語理解・対話生成・数学的推論・コード生成・画像分類といった幅広いタスクで、通常のLoRAより性能が向上したと報告されています。GSCで「lora pro」「lora-pro」の検索が一定数あるとおり、実務者の関心が高い派生手法です。

AdaLoRA:層ごとにランクを動的調整

AdaLoRA(Adaptive LoRA、2023年、arXiv:2303.10512)は、LoRAのランクrを層ごとに動的に決める手法です。通常のLoRAは全層で同じランクを使いますが、層によって必要な表現力は異なるという発想から生まれました。各層の重要度を評価し、重要な層には高いランクを、そうでない層には低いランクを割り当てる——こうして同じパラメータ数でもより効果的に配分します。

その他の派生手法(LoRA+・LoRA-FA・DoRA など)

このほかにも、AとBに別々の学習率を設定するLoRA+、行列Aを固定してBのみ学習しメモリを抑えるLoRA-FA、重みを大きさと方向に分解して適応するDoRA、適用範囲を工夫するDelta-LoRAなど、さまざまな派生手法が提案されています。いずれもLoRAの性能向上や適用領域の拡大を目的としたもので、研究は今も活発に続いています。用途に迷う場合は、まず標準的なLoRAで基準を作り、必要に応じてこれらの派生を試すのが現実的です。

LoRAが使われている場面(Alpaca・画風学習・企業特化AI)

最後に、LoRAが実際に使われている代表的な場面を紹介します。

LLMの指示応答モデル化(Alpaca/Alpaca-LoRA)

LLMの微調整でよく知られた事例に、Stanford大学が2023年に公開したAlpacaがあります。これはMetaの大規模言語モデルLLaMA(7B)をベースに、約52,000件の指示・応答データで微調整し、指示に従う対話モデルへ変えたものです。Alpaca本体は全パラメータを微調整(フルチューニング)したものですが、これとは別に、同じデータでLoRAを使って微調整した「Alpaca-LoRA」という派生プロジェクトも公開され、より少ない資源で同様の指示追従モデルを再現できることを示しました。これらの取り組みは、LLaMAとLoRAを組み合わせた会話モデルが各コミュニティで数多く作られるきっかけになりました。

画風・スタイルの学習

Stable Diffusionでは、特定の画風やデザイン様式をモデルに覚えさせる用途でLoRAが活躍しています。あるスタイルの画像を集めて短時間学習させるだけで、そのスタイル特有のタッチや色彩を再現できるようになります。学習したLoRAを読み込み、プロンプトでLoRA名と強度を指定すれば、その画風で画像を生成できます。

企業のドメイン特化AI

LoRAは企業内のドメイン特化AIの構築にも使われています。汎用のLLMは幅広い知識を持ちますが、各企業の専門分野(法律・医療・金融など)の文脈に精通しているとは限りません。そこで、自社が持つ業界特有のテキストデータを使ってLLMにLoRA微調整を行うと、元の能力を保ったまま、特定領域に関する回答精度を高められます。ベースには商用モデルだけでなく、gpt-ossのようなオープンソースのLLMを使うこともでき、社内環境での運用やデータの取り扱いを柔軟に設計できます。比較的少量のデータでも効果が得られ、モデル全体を再学習するよりリスクが低い点も実務上のメリットです。

LoRA運用で失敗を防ぐ3つのチェック(ランク・過学習・退行)

効率的なLoRAですが、使い方を誤ると精度低下や過学習を招くこともあります。ここでは実践上のチェックポイントを3つ整理します。

適切なランク(r)を選ぶ

ランクrはLoRAのパラメータ数と表現力を左右します。小さなモデルや簡単なタスクならr=8でも十分なことが多く、細かな調整が必要なときはr=16〜32など高めにする場合もあります。ただしrを上げるとパラメータ数も増えるため、効率とのトレードオフになります。原論文でも、rをある程度以上に上げても性能が頭打ちになる傾向が示されており、闇雲に上げても効果が出ないことがあります。先行事例で使われる値を基準に、必要に応じて調整するとよいでしょう。

過学習を防ぐ

小規模なデータで学習する場合、モデルが訓練データに過剰に適合してしまう過学習に注意が必要です。学習率を小さめにする、早期停止(検証データで性能が頭打ちになったら学習を止める)を使う、lora_dropoutを効かせる、データ拡張でバリエーションを増やすといった対策が有効です。LoRAは数エポックで収束しやすいため、学習曲線を見ながら適切なところで止めるのがポイントです。

元モデルの性能が保たれているか確認する

LoRA適用後は、新しいタスクでの性能だけでなく、元のベースモデルの能力がどれだけ維持されているかも確認すると安心です。極端に偏ったデータで学習すると、元々得意だった能力が劣化する可能性もゼロではありません。既存の評価指標で広くテストし、大きな劣化がないかを確認します。LoRAモジュールはオンオフが容易なので、問題が見つかれば一時的に適用を外すといった対応も取りやすいです。

よくある質問(FAQ)

Q. LoRAの読み方は何ですか?

A. 「ローラ」と読みます。Low-Rank Adaptation(低ランク適応)の略で、AIモデルのファインチューニング手法を指します。IoT向けの無線通信規格「LoRa(ロラ/Long Range)」とは名前が似ていますが別物なので、混同しないよう注意してください。

Q. LoRAとファインチューニングの違いは何ですか?

A. ファインチューニングはモデルの重みを調整して特定タスクに適応させる作業全般を指します。LoRAはその一手法で、モデルの大部分を凍結し、追加した小さな低ランク行列だけを学習する「効率的なファインチューニング」です。全パラメータを更新する従来のフルチューニングに比べ、学習するパラメータ数・メモリ・時間を大きく削減できます。

Q. LoRAファイルとは何ですか?サイズはどのくらいですか?

A. 学習したAとBの行列(差分の重み)を保存したファイルで、Stable Diffusionでは .safetensors 形式で配布されることが多いです。用途やランクによりますが、画像生成向けでは数MB〜数十MB程度が一般的です。ベースモデル本体が数GB規模であるのに比べ、ごく小さなサイズで共有・管理できます。

Q. LoRAを使うと精度は落ちますか?

A. 適切に設定すれば、多くのタスクでフルチューニングと同等の精度を達成できると報告されています。ただし、ランクrが小さすぎたりデータが不足していたりすると精度が下がる場合があります。タスクに応じてランクや学習設定を調整することが大切です。

Q. QLoRAとLoRAは何が違いますか?

A. QLoRAは、モデルの重みを4ビットに量子化してメモリを削減したうえでLoRA微調整を行う手法です。LoRA単体よりさらにメモリを節約でき、65B級の超大規模モデルを単一の48GB GPUで微調整できる点が特徴です。

Q. LoRAは画像生成(Stable Diffusion)でも使えますか?

A. 使えます。Stable DiffusionではUNetやテキストエンコーダにLoRAを適用し、少ないデータで特定の画風やキャラクターを学習させる用途で広く使われています。Web UIを使えばプログラミングなしでLoRAを読み込んで画像生成に反映できます。

関連記事

資料請求

RELATED POSTS 関連記事