- LoRA は、AI モデル本体を一切書き換えずに、変化分(差分)だけを別の小さなファイルとして学習する技術
- 差分を「2 つの細長い行列のかけ算」で表すことで、学習するパラメータ数を数百〜 1 万分の 1 に減らせる
- だから家庭用 GPU でも学習でき、数 MB〜数百 MB のファイルを差し替えるだけで画風やキャラクターを切り替えられる
1. LoRA とは何か
LoRA(ローラ)は Low-Rank Adaptation(低ランク適応)の略で、2021 年に Microsoft の研究チームが発表した、大規模 AI モデルを効率よく追加学習するための手法です。もともとは GPT-3 のような大規模言語モデル(LLM)向けに提案されましたが、いまでは Stable Diffusion をはじめとする画像生成モデルのカスタマイズ手段として、むしろそちらで広く知られるようになりました。
身近な例えで言うと、LoRA は「分厚い辞書に付箋を貼る」ようなものです。辞書(= 学習済みモデル)の本文を書き換えるのは大変ですし、書き換えてしまうと元に戻せません。代わりに「このページはこう読み替える」という付箋(= LoRA)を貼っておけば、辞書本体は無傷のまま、必要なときだけ読み替えを適用できます。付箋なので剥がすのも、別の付箋に貼り替えるのも自由です。
この「本体を変えずに、小さな差分を外付けする」という発想が LoRA のすべてです。以降の章で、これがどう実現されているのかを順番に見ていきます。
2. 前提知識:モデルの中身は巨大な「数の表」
LoRA を理解するために必要な前提知識は、実はひとつだけです。それは「AI モデルの中身は、巨大な数値の表(行列)の集まりである」ということ。
AI モデルの実体であるニューラルネットワークは、入力された数値の列に対して「数の表」を掛け合わせて別の数値の列に変換する、という処理を何層も重ねたものです。この表に入っている一つひとつの数値をパラメータ(または重み)と呼びます。モデルの「知識」や「能力」は、すべてこの数値として蓄えられています。
「学習」とは、この膨大な数値を少しずつ調整する作業です。モデルに問題を解かせ、答えのずれ(誤差)を測り、ずれが小さくなる方向に各数値をわずかに動かす。これを何百万回も繰り返すことで、モデルは目的の能力を獲得します。ずれをどの方向に直すべきかを示す信号を勾配と呼びます。この言葉は後の章でも出てくるので、「数値の修正指示」くらいに覚えておいてください。
3. 追加学習と、その壁
学習済みのモデルに、自分の目的に合わせた能力を足したいことがあります。たとえば「特定のキャラクターを描けるようにしたい」「自社の文書スタイルで回答してほしい」といった要望です。ゼロから学習し直すのは論外として(モデルをゼロから作り上げる最初の大規模な学習を事前学習と呼びますが、画像生成モデルの事前学習には数十億枚規模の画像と莫大な計算資源が使われています)、現実的なのは学習済みモデルを出発点にして追加の学習を行うファインチューニング(微調整)です。
素朴な方法は、モデルの全パラメータを追加データで調整し直すフルファインチューニングです。しかしこれには大きな壁があります。
壁 1: メモリが足りない
学習時にはパラメータ本体に加えて、勾配や最適化アルゴリズムの管理情報も GPU メモリ(VRAM)に載せる必要があり、学習済みモデルを動かして出力を得るだけの場合(これを推論と呼びます)の数倍のメモリを消費します。数十億パラメータのモデルのフル学習は、家庭用 GPU ではまず不可能です。
壁 2: 保存が巨大になる
全パラメータを変更するので、成果物はモデル丸ごと 1 個分(数 GB〜)になります。「キャラごと」「画風ごと」に作れば、その数だけ数 GB のファイルが増えていきます。
壁 3: 壊れやすい
少ないデータで全体を動かすと、元のモデルが持っていた能力を失う破滅的忘却や、追加データだけに過剰適応する過学習が起きやすくなります。
LoRA はこの 3 つの壁を、「そもそも本体を動かさない」という一手でまとめて回避します。
4. LoRA の発想:差分を 2 つの小さな行列で表す
ここからが本題です。ファインチューニングで起きることを式で書くと、とてもシンプルです。
学習後の重み W' = 元の重み W + 変化分 ΔW
つまり、学習の成果は「元の重みからどれだけ動いたか」という差分 ΔW(デルタ W)にすべて詰まっています。元の W は誰もが持っている公開モデルなのだから、ΔW だけを持ち運べば十分です。これが第一のアイデア。
ただし、ΔW は元の重みと同じサイズの表です。たとえば 4096 × 4096 の重みなら、差分も 4096 × 4096 = 約 1,678 万個の数値になり、そのままでは何も節約できていません。そこで第二の、そして最重要のアイデアが登場します。
4096 × 4096 の表を直接持つ代わりに、縦長の行列 B(4096 行 × 8 列)と横長の行列 A(8 行 × 4096 列)の 2 つを用意し、「B × A を計算すると差分の表になる」と約束します。行列のかけ算のルールにより、4096 × 8 と 8 × 4096 のかけ算はちゃんと 4096 × 4096 の表になります。
このときの「8」がランク(rank、r と書く)と呼ばれる数で、LoRA の名前の由来です。数値で効果を見てみましょう。
体感デモ:ランクを動かすとパラメータ数はどう変わる?
4096 × 4096 の重み 1 枚に対する差分を LoRA で表す場合の学習パラメータ数。スライダーでランク r を変えてみてください。
実際のモデルにはこうした重みの表が何百枚もあり、LoRA はその一枚一枚(主に注意機構と呼ばれる、入力のどこに注目するかを決める部品。第 8 章で詳しく説明します)に小さな B・A のペアを添えていきます。それでも合計は元モデルの 1 % 未満に収まるのが普通です。LoRA の論文では、GPT-3 175B に適用した場合に学習対象のパラメータ数を約 1 万分の 1、学習時の GPU メモリを約 3 分の 1 にできたと報告されています。
5. なぜ小さくても足りるのか
「1,678 万個の数値を 6.5 万個で表したら、大事な情報が失われてしまうのでは?」— 当然の疑問です。これに対する答えは、「ファインチューニングで起きる変化は、見かけほど複雑ではない」という経験的な事実にあります。
ランクという言葉は、直感的には「その表を説明するのに必要な独立したパターンの数」と言い換えられます。たとえば 1,000 人分の顔写真があっても、その違いの大部分は「年齢」「顔の向き」「照明」など少数の軸で説明できてしまう、という話に似ています。表としては巨大でも、含まれる情報の本質的な次元はずっと低い、ということがよくあるのです。
大規模モデルの微調整でも同じことが起きます。事前学習を終えたモデルは既に言語や画像についての膨大な知識を持っており、ファインチューニングで新しく教えることは「既存の知識の組み合わせ方を少し変える」程度のわずかな軌道修正であることがほとんどです。この変化は少数のパターンの重ね合わせで十分に表現できる — つまり差分 ΔW は本質的に低ランクであるというのが LoRA の仮説であり、先行研究(言語モデルの微調整が驚くほど低い次元で成立するという「内在次元」の研究)にも裏付けられています。
もちろん万能ではありません。モデルがまったく知らない領域を大量に教え込むような場合には、低ランクの差分では足りないこともあります。しかし「キャラクターを 1 人覚えさせる」「文体を寄せる」といった典型的なカスタマイズでは、小さなランクで十分な品質が得られることが実証されてきました。
6. 学習のしくみ
LoRA の学習は次のように進みます。
- 元のモデルを凍結する — 全パラメータを「変更禁止」にします。壁 3 のうち破滅的忘却のリスクはこの時点で大きく下がり、本体は無傷なのでアダプタを外せばいつでも完全に元の挙動へ戻せます(過学習のリスクは残るため、第 10 章の設定値で対処します)。
- 対象の層に B・A を差し込む — 主要な重み(主に注意機構の重み)の横に、ランク r の小さな行列ペアを追加します。
- B・A だけを学習する — 学習データを流し、誤差から計算した勾配(修正指示)を B と A にだけ適用します。凍結された本体には一切触れません。
気の利いた仕掛けが初期値にあります。学習開始時、B はすべてゼロで初期化されます(A は小さな乱数)。B がゼロなら B × A もゼロ、つまり差分ゼロ = 完全に元のモデルと同じ状態から学習が始まります。「無改造の状態から出発して、必要な分だけ徐々に差分が育っていく」という、安全側に倒した設計です。
また、差分を足すときには α(アルファ)というスケール係数を使い、実際には ΔW = (α ÷ r) × B × A として適用します。α はランクを変えたときに差分の効き具合が変わりすぎないよう調整するための係数で、学習ツールの設定画面に必ず登場します。まずは「差分の音量つまみ」と理解しておけば十分です。
学習するパラメータが少ないことは、そのまま学習の軽さにつながります。勾配や最適化情報を持つ必要があるのは B・A の分だけなので、VRAM 消費が大幅に減り、保存するファイルも B・A の集まりだけなので数 MB〜数百 MB で済みます。
7. 使うとき:マージと差し替え
学習した LoRA の使い方には 2 通りあります。
方法 1: 外付けのまま使う
推論時に「W の出力 + (α ÷ r) × B × A の出力」を毎回合算します。差し替えが自由で、複数の LoRA の同時適用や、適用強度(後述)の調整もできます。画像生成 UI での標準的な使い方です。
方法 2: 本体に焼き込む(マージ)
W + (α ÷ r) × B × A をあらかじめ計算して 1 つの行列にまとめてしまいます。以後は普通のモデルと完全に同じ形になるため、推論速度のペナルティがゼロになります。構成を固定できる本番運用向きです。
「巨大なベースモデルは 1 つだけ持ち、小さな差分ファイルを付け替えて使い分ける」— この運用モデルこそが LoRA を爆発的に普及させた理由です。コミュニティサイトで配布されている無数のキャラクター LoRA・画風 LoRA は、どれも数十〜数百 MB のファイル 1 個です。もしフルファインチューニングでしか共有できなかったら、1 つ試すたびに数 GB のダウンロードが必要だったはずです。
8. 画像生成での LoRA
Stable Diffusion や SDXL、FLUX などの画像生成モデルでは、LoRA は事実上の標準カスタマイズ手段になっています。よく見かける種類は次のとおりです。
| 種類 | 覚えさせるもの | 典型的な学習データ |
|---|---|---|
| キャラクター LoRA | 特定の人物・キャラクターの見た目 | そのキャラの画像 十数〜数十枚 |
| 画風 LoRA | 作風・タッチ・色使い | その画風の画像 数十〜数百枚 |
| 衣装・オブジェクト LoRA | 特定の服装・小物・背景様式 | 対象が写った画像 十数〜数十枚 |
| コンセプト LoRA | ポーズ・構図・表現技法など | 概念を示す画像セット |
ベースモデルの事前学習に数十億枚規模の画像が使われているのに対し、LoRA の学習は数十枚程度から始められます。これも「差分だけを学習する」恩恵です。
使うときに知っておくべき 3 つのこと
- トリガーワード — 学習時に各画像へ添える説明文(キャプション)に埋め込んだ合言葉(例: 架空の
mychar_v1など)をプロンプトに書くことで、LoRA が覚えた概念を呼び出します。配布ページに記載されているので必ず確認します。 - 適用強度(weight / strength) — 差分をどのくらい効かせるかの倍率です。1.0 で学習どおり、下げれば控えめになります。上げすぎると画像が破綻しがちです。まず 0.6〜1.0 の範囲で調整するのが定石です。第 6 章の α が学習時に決めておく設計値であるのに対し、適用強度は使うときにその場で回すつまみ、という関係です。
- ベースモデルとの互換性 — LoRA は「特定のベースモデルからの差分」なので、系統の違うモデルには使えません(例: SD1.5 用 LoRA を SDXL に適用しても正しく動きません)。同系統でも派生モデルによって効き方は変わります。
複数の LoRA(例: キャラ + 画風 + 衣装)を同時に適用することもできます。差分の足し算なので原理上は自由に重ねられますが、それぞれが同じ重みを違う方向に動かそうとすると干渉して画質が崩れるため、強度を少しずつ下げてバランスを取るのが実践上のコツです。
なお、モデル内部のどこに LoRA が入るかというと、主役は注意機構(attention)と呼ばれる、「プロンプトの単語と画像の各部分の対応づけ」を司る部分です。概念と見た目を結びつける場所なので、ここの差分を学習するのが最も効率的なのです。テキストの解釈を担う部分(テキストエンコーダ)にも同時に LoRA を入れる構成もよく使われます。
9. LLM での LoRA と QLoRA
チャット AI(LLM)の世界でも、LoRA は「口調やドメイン知識のカスタマイズ」「業務特化アシスタントの作成」などに広く使われています。仕組みは画像生成の場合と完全に同じで、Transformer の注意機構まわりの重みに B・A を差し込みます。
LLM 界隈で特に有名な発展形が QLoRA(2023 年)です。アイデアは「凍結して触らないベースモデルは、精度を多少落として圧縮(量子化)してメモリに載せてしまえばいい」というもの。ベースモデルを 4 ビット(通常の 4 分の 1 の情報量)に圧縮して凍結し、その上に通常精度の LoRA を載せて学習します。この工夫により、650 億パラメータのモデルの追加学習が GPU 1 枚(48 GB)で可能になったと報告され、個人や小規模チームによる LLM カスタマイズの道を開きました。
ほかにも派生手法が多数あります。名前だけ紹介しておくと:
- DoRA — 重みを「大きさ」と「向き」に分解し、向きの更新に LoRA を使うことで低ランクでの精度を改善
- LyCORIS 系(LoCon / LoHa など) — 画像生成向けに、畳み込み層への適用や別の分解方式を採用した拡張ファミリー
- rsLoRA — 高ランク時に学習が進みにくくなる問題を、スケール係数の変更(α ÷ r → α ÷ √r)で改善
いずれも「本体を凍結し、小さな差分だけを学習する」という LoRA の骨格は共通です。骨格さえ理解していれば、新しい派生手法が出てきても「どこを改良したのか」という視点で読み解けます。
10. 主要な設定値の早見表
実際に LoRA を学習するときに出会う代表的な設定値をまとめます。ツール(kohya_ss、PEFT ライブラリなど)によって名前や既定値は多少異なります。
| 設定値 | 意味 | 目安 | 大きくすると |
|---|---|---|---|
| rank(r / dim) | 差分行列の細さ = 表現力の上限 | 4〜32 から開始(画像系キャラ LoRA は 8〜32 が定番) | 表現力とファイルサイズが増えるが、過学習しやすくなる |
| alpha(α) | 差分のスケール係数。実効倍率は α ÷ r | α = r または α = r の半分が出発点として分かりやすい(ツールの既定値も確認) | 差分が強く効く(学習率を上げるのに近い) |
| 学習率 | 1 回の更新で数値をどれだけ動かすか | 画像系は 1e-4(= 0.0001 の意味)前後が定番。LLM 系は 1e-5〜2e-4 | 速く学ぶが、壊れやすくなる |
| ステップ数 / エポック数 | 学習の反復回数 | データ量に応じて調整。学習曲線とサンプル出力で判断 | 覚えは良くなるが、過学習が進む |
| 対象モジュール | どの重みに B・A を差し込むか | 注意機構の重みが基本。テキストエンコーダを含めるかは目的次第 | 適用範囲が広がるが、サイズと学習コストが増える |
11. よくある誤解 FAQ
LoRA はモデルを圧縮する技術?
いいえ。LoRA が小さくするのは「追加学習で生じる差分」であって、モデル本体ではありません。ベースモデルは元のサイズのまま必要です。本体を小さくする技術は「量子化」や「蒸留」(大きなモデルの振る舞いを小さなモデルへ写し取る技術)と呼ばれる別のカテゴリです(QLoRA は量子化と LoRA の組み合わせ)。
LoRA を使うと元のモデルが変化してしまう?
いいえ。LoRA は外付けの差分で、ベースモデルのファイルには一切手を加えません。LoRA を外せば完全に元の挙動に戻ります(明示的にマージして保存した場合を除く)。
rank は大きいほど高品質?
必ずしもそうではありません。rank は「表現できる変化の複雑さの上限」であり、課題に対して過剰な rank はファイルサイズと過学習リスクを増やすだけのことも多いです。実際、単一キャラクターの学習なら小さな rank で十分な品質が出ることが知られています。
LoRA ファイル単体で画像が作れる?
いいえ。LoRA は「差分」なので、足し合わせる先のベースモデルが必ず必要です。配布ページに書かれている対応ベースモデルを用意してください。
どのベースモデルにも同じ LoRA が使える?
使えません。LoRA の B・A は特定のモデル構造・特定の重みからの差分として学習されているため、系統の異なるモデル(例: SD1.5 と SDXL、異なる LLM 同士)には適用できません。同系統の派生モデル間では動くことが多いものの、効き方は変わります。
LoRA はフルファインチューニングより常に劣る?
そうとは限りません。LoRA の論文では、GPT-3 などに対してフルファインチューニングと同等かそれ以上の品質を達成した実験結果が報告されています。変化が低ランクで表せる課題であれば、品質差はほとんど問題になりません。一方、モデルに大量の新知識を教え込むような課題では、フルファインチューニング(あるいは高 rank)が有利な場合もあります。
「LoRA」と「LoRa」は同じもの?
別物です。無線通信の世界にも「LoRa」(Long Range の略、IoT 向け無線規格)という紛らわしい用語があります。本ガイドの LoRA(Low-Rank Adaptation)とは無関係です。
12. 用語集
- パラメータ / 重み
- モデルを構成する数値。モデルの知識・能力の実体。
- 行列
- 数値を縦横に並べた表。ニューラルネットワークの各層は行列のかけ算として計算される。
- ランク(rank)
- 行列が含む「独立したパターンの数」。LoRA では差分行列の細さ(B の列数 = A の行数)を指し、r と表記される。
- 低ランク近似
- 大きな行列を、ランクの低い(= 細長い行列の積で表せる)行列で近似すること。
- 凍結(freeze)
- 学習中にパラメータを更新対象から外すこと。LoRA ではベースモデル全体を凍結する。
- 勾配
- 誤差を減らすためにパラメータをどの方向へ動かすべきかを示す修正信号。
- 推論
- 学習済みモデルを動かして画像や文章などの出力を得ること。学習と対になる言葉。
- 事前学習
- モデルをゼロから作り上げる最初の大規模な学習。膨大なデータと計算資源を使う。
- ファインチューニング
- 学習済みモデルを出発点に、追加データで再学習して目的に適応させること。微調整。
- アダプタ
- 凍結したモデルに外付けする小さな学習可能モジュールの総称。LoRA はアダプタ方式の代表格。
- 注意機構(attention)
- 入力のどの部分に注目するかを決めるニューラルネットワークの部品。プロンプトの単語と画像・文章の対応づけを担い、LoRA を差し込む主な場所。
- マージ
- LoRA の差分をベースモデルの重みに足し込んで 1 つのモデルに焼き込むこと。
- 量子化
- パラメータの数値精度を落として(例: 16 ビット → 4 ビット)メモリ使用量を減らす圧縮技術。
- 過学習
- 学習データだけに過剰適応し、それ以外の入力でうまく動かなくなること。
- 破滅的忘却
- 追加学習によって、モデルが元々持っていた能力を失ってしまう現象。
- トリガーワード
- LoRA が覚えた概念を呼び出すためにプロンプトへ書く合言葉。学習時に各画像へ添える説明文(キャプション)で指定される。
- VRAM
- GPU に搭載されたメモリ。モデルの実行・学習に必要な作業領域。
参考文献
- Hu et al., LoRA: Low-Rank Adaptation of Large Language Models(2021)— LoRA の原論文
- Dettmers et al., QLoRA: Efficient Finetuning of Quantized LLMs(2023)— QLoRA の論文
- Aghajanyan et al., Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning(2020)— 「微調整は低次元で足りる」ことを示した先行研究
- Hugging Face, PEFT ライブラリ ドキュメント — LLM 向け LoRA 学習の標準ツール
- kohya-ss/sd-scripts — 画像生成向け LoRA 学習の定番ツール
本ガイドの図版は画像生成 AI(gpt-image-2)で作成しています。内容は 2026 年 8 月時点の情報に基づきます。