LoRA を重ねると壊れるのはなぜか — 「合計1.2以下」の本当の意味
目次(11 項目)
PixAI 公式は LoRA の重ね方について、具体的な数字を出しています。重みの既定は 0.7、複数使うなら合計 1.2 以下、キャラ LoRA を2つ同時に使わない。
この3つは実際そのとおりなのですが、なぜそうなるのかは書かれていません。とくに 1.2 という数字には、根拠が示されていない。
調べてみると、壊れる原因は「合計値」ではありませんでした。そして原因が分かると、1.2 を守っても壊れる場合と、超えても平気な場合があることが見えてきます。
LoRA は何をしているのか
LoRA は 2021年に Edward J. Hu らが発表した手法です。原論文の要点はこうです。
学習済みモデルの重みは凍結したまま、そこに「差分」を足す。 しかもその差分を、細長い行列2つの掛け算で近似する。これが「低ランク(Low-Rank)」の意味です。
式にすると、こうなります。
使われる重み = 元の重み + (重みの値)× 差分
あなたが動かしている 0.7 という数字は、この「差分をどれだけ足すか」の倍率です。0 なら元のモデルのまま、1.0 なら学習したとおりの差分がそのまま乗ります。
原論文のタイトルは LoRA: Low-Rank Adaptation of Large Language Models です。言語モデルのための手法**でした。
GPT-3 のような巨大モデルを丸ごと微調整しようとすると、モデルと同じサイズの重みをもう一式作ることになります。それを避けるために、差分だけを、しかも圧縮した形で持つという発想が出てきました。論文が報告している効果はこうです。
LoRA can reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times
学習するパラメータが1万分の1、GPUメモリが3分の1。
画像生成の LoRA が数十MBで済むのも同じ理屈です。フルの追加学習なら数GBになるものを、細い行列2つに畳んでいる。「キャラの顔を覚えさせたファイル」が名刺サイズのデータで済むのは、これのおかげです。
重ねると何が起きるか
複数の LoRA を使うと、差分が足し算されます。
使われる重み = 元の重み + 0.8×差分A + 0.4×差分B
ここで問題が起きます。差分Aと差分Bは、それぞれ別々に学習されたものです。互いの存在を知りません。
LoRA の合成を扱った研究では、これを parameter interference(パラメータの干渉) と呼んでいます。指摘されているのは主に2つです。
ひとつは、変える場所がぶつかること。 それぞれの LoRA が重みのどのあたりを動かすかは学習しだいで、同じ場所を別々の方向へ引っ張ると打ち消し合ったり暴れたりします。研究では「部分空間の衝突」として扱われ、直交させる(=ぶつからないように分ける)手法が提案されています。
もうひとつは、値の散らばりの大きさです。 論文がはっきり書いています。
LoRA modules show much larger parameter magnitude variance than full fine-tuned weights; greater parameter magnitude variance correlates with worse merging performance
フルの微調整に比べて値のばらつきが大きく、そのばらつきの大きさが合成の失敗と相関する。 同じ論文は理由もこう説明しています——ばらつきが大きいと合成後の重みの分布がずれ、情報が失われて性能が落ちる。素朴に足すと、元のモデルが訓練された範囲から出ていくわけです。
だから「合計」より「重なり方」
ここから、公式の3つのルールが説明できます。
「キャラ+キャラを避ける」が正しい理由。 キャラ LoRA は2つとも「顔」を作り変えます。変える場所が最大限にぶつかる組み合わせです。合計が小さくても混ざります。
「キャラ+スタイルなら良い」理由。 片方は誰かを、もう片方は塗りや線を動かす。ぶつかる面積が小さいぶん共存できます。
そして「合計1.2以下」の位置づけ。 これは素朴に足したときに、元のモデルの範囲から出ていかないための目安です。理論から導かれた数字ではなく、経験的な安全域と考えるのが正確でしょう。
つまり実務的にはこうなります。
合計値を守ることより、役割の違うものを組み合わせることのほうが効く。
同じ役割の LoRA を 0.6 ずつ重ねる(合計1.2)のと、違う役割のものを 0.6 ずつ重ねる(同じく合計1.2)のとでは、数字は同じでも結果が違います。壊れるのは前者です。
合計と配分は別の軸
ここで混同しやすい点があります。合計と、その内訳は、別のことを決めています。
| 何を決めるか | |
|---|---|
| 合計 | 壊れにくさ。元のモデルの範囲から出ていかないか |
| 配分 | どちらが勝つか。同じ合計でも、大きいほうの性格が前に出る |
だから「0.8 + 0.4」と「0.6 + 0.6」で確実に違うのは、出来上がりの寄り方です。合計はどちらも 1.2 なので、壊れにくさの目安は同じところに置けます。
⚠️ ただし「まったく同等」とは言えません。 上の論文は値のばらつきが大きいほど合成が劣化するとしているので、片方を 0.8 まで上げるほうがばらつきは大きくなります。どちらが安全かを決めたいなら、自分で振ってみるしかありません。
- 0.8(キャラ)+ 0.4(スタイル) — キャラの特徴が優先され、画風は薄くかかる
- 0.6 + 0.6 — 両方が同じくらい主張する
公式が「スタイル LoRA がキャラを上書きするなら、スタイル側の重みを下げる」と案内しているのは、まさにこの配分の話です。安全のためではなく、優先順位を決めるための操作です。
⚠️ 公式ドキュメントには「キャラ 0.8 + スタイル 0.4」という例が載っていますが、これは配分の一例であって推奨値ではありません。どちらを立てたいかで変わります。
公式が出している数値
| 項目 | 公式の記載 |
|---|---|
| 重みの既定 | 0.7。0.1刻みで調整 |
| 効果が弱いとき | 0.8、0.9 と上げる |
| 崩れるとき | 0.6、0.5 と下げる |
| 複数使うとき | 合計 1.2 以下 |
| 自作キャラ LoRA の適用 | 0.6〜0.9 |
同時に使える数はプランで決まります。
| プラン | 同時使用の上限 |
|---|---|
| Free | 3 |
| Starter | 5 |
| Plus | 10 |
| Premium | 15 |
⚠️ 枠の数と、実際に効かせられる量は別の話です。 Premium で15個使えても、干渉の問題は変わりません。枠が増えるのは「選択肢が増える」のであって「15個重ねられる」ではありません。
⚠️ DMD2 のような高速化 LoRA も1枠を使います(パラメータの記事)。キャラ LoRA と組み合わせるときは、枠と重みの両方で計算に入れてください。
競合したときの対処
公式が挙げている症状と対処は、上の仕組みと整合します。
| 症状 | 対処 | なぜ効くか |
|---|---|---|
| 顔が混ざる | キャラ LoRA を2つ使わない | ぶつかる面積が最大だから |
| スタイルがキャラを上書きする | スタイル側の重みを下げる | 押しの強い側を弱めて釣り合わせる |
| 色ムラやノイズが出る | 全体の重みを下げる | 元のモデルの範囲へ戻す |
切り分けの基本は、1つだけ残して確かめることです。どれが原因かは、足し算になっている以上、分離しないと分かりません。
アーキテクチャが違うと動かない
ここが最も見落としやすい点です。
アーキテクチャの違う LoRA は互換性がありません。SDXL でトレーニングされた LoRA は、DiT ベースの Tsubaki.2 では動きません。
LoRA は「元の重みに差分を足す」仕組みなので、足す先の形が違えば足せません。SD1.5 / SDXL / DiT.1 / DiT.2 はそれぞれ別物です。
つまり、Haruka v2 用に集めた LoRA は Tsubaki.2 では一切使えません。モデルを乗り換えるということは、LoRA 資産を捨てるということでもあります(モデル選びの記事)。
自作する場合も同じで、実際に使う予定のベースモデルで学習する必要があります。
トリガーワード
多くの LoRA は、確実に効かせるためにトリガーワードが要ります。PixAI では LoRA を選択すると、既定のトリガーワードがプロンプトの末尾に自動で追加されます。
自作する場合、公式が求めているのは 「ベースモデルが知らない語」にすることです。理由まで書かれています。
Words like fox girl, kemonomimi and wolf ears come with hundreds of thousands of images already attached in the base model. Use one as your trigger and your OC is now fighting every fox girl the model has ever seen.
短い一般名詞をトリガーにすると、モデルが元から知っている何十万枚と競合するわけです。⚠️ 推奨されている形は「キャラ名+短い接尾辞」(Castorice/hsr のような形)で、長さの条件は公式に書かれていません(2026年9月7日に公式ガイド2本を確認。キャラ固定の記事)。
よくある失敗
公式が挙げているものです。
- トリガーワードの入れ忘れ
- 重みが不適切(強すぎ・弱すぎ)
- 複数の LoRA を同時に使いすぎ
- プロンプトとの矛盾 — 黒髪キャラの LoRA を使いながら、プロンプトに「金髪」と書いてしまう
4番目は特に起きやすいところです。LoRA が学習している特徴を、プロンプトで打ち消さないように注意してください。キャラ LoRA を使うなら、髪色や目の色をプロンプトに書く必要はありません。
自作するときの要点
詳しくはキャラ固定の記事にまとめていますが、要点だけ。
- キャラなら 15〜30枚の高品質画像(画風は20〜40、ポーズは10〜20、衣装は15〜25)
- 解像度は最低 512×512、768²〜1024² が SDXL 最適
- 複数の角度、きれいな背景、異なる衣装・表情・照明
- 衣装をトリガーワードに組み込まない(柔軟性が失われる)
- 学習コストは SDXL が 75,000、DiT.2 が 200,000(クレジットの記事)
自分で確認する必要があること
- 役割の違う LoRA なら合計いくつまで耐えるか — 仕組みからは「ぶつかり方しだい」としか言えません。⚠️ キャラ+スタイルのように役割が違う組み合わせなら、1.2 を超えて上げながら崩れる点を探すのが実際の使い方になります
- PixAI が複数 LoRA をどう合成しているか — 素朴な足し算なのか工夫があるのかは公開されていません。⚠️ 研究では直交化や重み調整で干渉を緩和する手法が提案されていますが、それが入っているなら 1.2 の目安はもっと緩いはずです。 入っていない前提で組むのが安全です
出典
- LoRA: Low-Rank Adaptation of Large Language Models(Hu et al., 2021 / arXiv) — 原論文。凍結した重みに低ランクの差分を足す仕組み、推論時の追加遅延なし、学習パラメータ1万分の1・GPUメモリ3分の1(2026年9月7日に原文と照合)
- Unraveling LoRA Interference: Orthogonal Subspaces for Robust Model Merging(arXiv) — 合成時の干渉、部分空間の衝突、直交化による緩和
- Decouple and Orthogonalize: A Data-Free Framework for LoRA Merging(arXiv 2505.15875) — LoRA は値のばらつきがフル微調整より大きく、それが合成時の劣化と相関する(2026年9月7日に原文と照合)
- Training-Free Multi-Concept LoRA Composition with Prompt-Aware Weighting(arXiv) — 素朴な合成が概念どうしの干渉と品質低下を招く
- LoRA の使い方(PixAI公式) — 重み 0.7・0.1刻み・アーキテクチャ互換性・トリガーワード
- LoRA の応用(PixAI公式) — 合計 1.2 以下・組み合わせの可否・競合時の対処・プラン別の同時使用数
- Kemonomimi OC Consistency(PixAI公式ブログ) — 自作キャラ LoRA の適用重み 0.6〜0.9
2026年9月4日確認、9月7日に論文の引用を原文と照合し、トリガーワードと枚数の出典を訂正。