LoRAの種類

Last-modified: 2025-06-28 (土) 16:32:29

LoRAにはいくつかのモジュールとアルゴリズムが存在する。
どれを使うかによって、パラメータの行列での扱い方が変わり、
学習結果に大きく影響する。

LoRAの種類

メジャー系LoRAの早見表

編集が難しく手を焼いており、旧情報があります。後述のリンク先も参照して下さい。

概要設定パラメータ
実装モジュール
--network_module=XXX
アルゴリズム名旧式語源大まかな特徴--network_args “XXX” “XXX”
指定必須な変数は★
その他の設定
(公式推奨値)
networks.loraLoRA-LierLa(リエラ)
改名前:LoRA
LoRA for Linier Layers,
Linear 層およびカーネルサイズ 1x1 の Conv2d 層に適用されるLoRA
-
LoRA-C3Lier(セリア)LoConと基本機能は同じ。
LyCORIS版LoConと混合を避けるため改名
conv_dim=XXX ★
conv_alpha=XXX ★
loraplus_lr_ratio=8
LoRA+LoConの一種。v0.9.0より使用可能。
学習効率が高く扱いやすい。
conv_dim=XXX ★
conv_alpha=XXX ★
loraplus_lr_ratio=XX
locon.locon_kohyaLoConLoRA for C olutional layers with 3 x3 Kernel and Linear layersconv_dim=XXX
conv_alpha=XXX
networks.dyloraDyLoRA-LierLaLoRA-LierLaのDyLoRA版algo=dylora ★
unit ★
down_lr_weight
mid_lr_weight
up_lr_weight
dropout
DyLoRA-C3LierLoRA-C3LierのDyLoRA版algo=dylora ★
conv_dim ★
conv_alpha ★
unit ★
down_lr_weight
mid_lr_weight
up_lr_weight
dropout
DyLoRA-LoRA+LoRA+のDyLoRA版unit
lora_dim
alpha
apply_to_conv
modules_dim
modules_alpha
loraplus_lr_ratio=XX
lycoris.kohyaLoConalgo=loconまたはlora ★
conv_dim=XXX
conv_alpha=XXX
LoHaアダマール積のLoRAalgo=loha ★
conv_dim=XXX
conv_alpha=XXX
dropout=XXX
dim <= 32, 上限64
alpha <= 1
LoKrクロネッカー積のLoRAalgo=lokr ★
conv_dim=XXX
conv_alpha=XXX
dropout=XXX
(IA)^3algo=ia3 ★
conv_dim=XXX
conv_alpha=XXX
DyLoRA※不明
Native Fine-Tuningalgo=full ★
conv_dim=XXX
conv_alpha=XXX

実装モジュール:これをインストールすれば対応するアルゴリズムを使用できるようになります。
アルゴリズム名:一般的な呼称です。
旧式:完全上位互換の元が登場し、使う必要のなくなった方式

各LoRAの概要

※まともに紹介すると長文になるので、sd-scriptsのURLを優先的に掲載。

sd-scriptsに実装済みでメジャーのもの

LoRA-LierLa
LoRA-C3Lier(LoCon)

  • LoRA: Low-Rank Adaptation of Large Language Models(arxiv)、LoRA(github)をStable Diffusionに適用したもの。

LoRA+

  • LoRAプラスと読む。
  • 一見すると新種のLoRAだが、基本構造や使い方、マージ方法はLoCon/DyLoRAそのもの。
    • LoRAのA✕B行列のうちA側(上流側)のLearning rate比重を大きく設定できることで、驚異的な学習能力をもたらす。
    • Lrを複数指定する方式であるため、一つしかLrを指定できない自動型オプティマイザーは使用不可*1
      2025/06時点でProdigy+ / RAdamScheduleFree で動作するのを確認、さらにLoRAだけでなくDoRAでも併用可能
  • 検証結果
    リンク掲載は控えるが、RedRayz氏がnoteで検証結果を報告しているのでそちらを参照のこと。
  • シンプルな設計の割に高い忠実性を持つが、自動型オプティマイザーを使いたいかどうかで評価は大きく変わるだろう。

DyLoRA系

LyCORIS

誘導→ LyCORIS

その他マイナーなもの

OFT

Orthogonal Fine-Tuningの略。直行ファインチューニング。

  • sd-scriptsに実装済み機能。SDXLに対応、SD1には非対応。
  • 公式解説
  • 特徴
    • LoConのように「小さな行列」を追加するのではなく、「ニューラルネットワーク状の層」を追加して学習する。
      その結果、複雑なタスクに対処できる。
      イメージ図

      イメージ図

      +------------------+
      |  元のモデル      |
      | (例えばU-Net)    |
      |                  |
      |  +-------------+ |
      |  |  Conv Layer | |    ← 畳み込み層
      |  +-------------+ |
      |  |  Conv Layer | |
      |  +-------------+ |
      |  |  Residual   | |
      |  |  Block      | |
      |  +-------------+ |
      |  |  Attention  | |
      |  |  Layer      | |    ← アテンション層
      |  +-------------+ |
      |  | ...         | |
      |  +-------------+ |
      +------------------+
               |
               |  (追加のOFTレイヤー)
               v
      +------------------+
      |     OFT Layer    |    ← 追加されたOFTレイヤー
      |                  |
      |  +-------------+ |
      |  |  OFT Block  | |    ← OFTブロック(通常は直交行列を使用)
      |  +-------------+ |
      |  |  OFT Block  | |
      |  +-------------+ |
      |  | ...         | |
      |  +-------------+ |
      +------------------+
               |
               v
      +------------------+
      |  元のモデル      |
      | (例えばU-Net)    |
      |                  |
      |  +-------------+ |
      |  |  Conv Layer | |
      |  +-------------+ |
      |  |  Conv Layer | |
      |  +-------------+ |
      |  |  Residual   | |
      |  |  Block      | |
      |  +-------------+ |
      |  |  Attention  | |
      |  |  Layer      | |
      |  +-------------+ |
      |  | ...         | |
      |  +-------------+ |
      +------------------+
      • LoConとfine tuningの中間的なVRAM消費と性能を持つ。
  • 計算効率が高い。
    直交性を保つ計算を行う。
    行列内に存在する互いのウェイトの独立性が保たれ、あるウェイト更新が他のウェイトに影響を与えにくいため、従来のようにステップ進行に伴い画風(ウェイト)が往復するような無駄な計算を減らせる。
    • たとえば、互いのタグ要素が混ざりにくいといった効果を比較的得やすい。
      あるキャラを学ばせたいのに、1girl等のウェイトが変動するせいで、キャラ学習が進まないという現象を回避しやすい。
    • 収束期において、適当に設定したfine tuningよりも教師画像との一致度を高くしやすい。
  • 元のモデルのウェイトは更新しないので、fine tuningよりも軽量
  • 学習結果は元モデルへマージ可能。
    sdxl_merge_lora.pyを使用する。
  • 設定例
     --network_module=networks.oft
     --network_dim=40
     --network_alpha=1e-3
     --network_args "enable_conv=true"
    • dim(=num_blocks)の値について、
      dim=1でfine tuningと同等。dim=8,16,32,…のように大きくするとOut of Memoryしにくくなる*2
    • alpha(∝constraint)
      • 大きいほど正則化の強度が弱まる。
        GitHubコミュニティ推奨値*3は1e-3とされているが、
        学習が進まない場合は大きく、破綻傾向にある場合は小さく調整する。
  • 学習時の留意点
    • 学習する規模が大きいので、精度を求めるならば
      細かなタスクに対応できる設定を行うと良いかもしれない。
      • 例えば、prodigyを使うなど。
    • 限界性能こそ他の方式よりも高いが、
      低品質なデータセットに対する結果について未検証。

LoRA-FA

sd-scriptsに実装済み。軽量なのが特徴

LoRA-FA is added experimentally. Specify --network_module networks.lora_fa option. The trained model can be used as a normal LoRA model.*4

NestedUNet

としあき製のLoRA-C3Lier亜種。
詳細はNestedUNetページを参照


*1 使うとエラーが発生する
*2 引用:https://github.com/kohya-ss/sd-scripts/discussions/983
*3 引用:上記リンクを
*4 引用:https://github.com/kohya-ss/sd-scripts/releases/tag/v0.7.0