以下の内容はhttps://nextaltair.hatenablog.com/entry/2024/05/19/153511より取得しました。


わかりにくかった! CosineAnnealingLR ! (コサインアーリニング)

SD1.5系のときはすごい過学習すると言われて持て余されてたProdigyオプティマイザー

SDXLになってとても早くLoRAが出来上がるということで脚光を浴びた

 

そこで推奨してるスケジューラーがスケジューラーを使わないconstantかCosineAnnealing

 

constantはいいとしてCosineAnnealingLRはsd-scriptsのデフォルトで入ってないからじぶんで対応する必要があるし挙動を理解するのが手間だった

 

 

使い方

bmaltais/kohya_ssを使ってるのでAdditional parametersのところに下記を入力

--lr_scheduler_type "CosineAnnealingLR" --lr_scheduler_args "T_max=500" "eta_min=0e-0" 

 

 

挙動

テキストエンコーダーの学習率の例

設定したlrを頂上として開始してT_maxのSTEP数で谷底に到着する

T_maxは半サイクルの値

基本1サイクルで考えてたから若干混乱したポイント

 

eta_minは谷底の値でデフォルト値は0だから使用例の設定は別に要らなかった

 

lr2-5eから始まってT_max900で谷底、1800でまた頂点

 

推奨設定

素材やタグ、他の設定も含め正しかろうパラメーターなら頂上へ向かうにつれてLoss率が増加傾向で谷底に向かうにつれて低下傾向を示すようになる

ということは学習完了時谷底であることが望ましい

総ステップ数/T_max=奇数

 

多分これでいい

他の設定のいじり方は知らない

 

lrは頂点の上限を決めるものなので高めに設定すればいい

 

Prodigyの設定

基本的に周期変動は使うなと言うのがリポジトリでも書いてある

T_max = 総ステップ数

 

これが普通のcosineを使うのと何が違うのかは知らない

調べてもない

 

何サイクルも変動させたい場合やウォームアップ使いたいときははoptimizer_args

"safeguard_warmup=False"

こうするとlrを正しく計算できる

 

 

LoRA+の設定

特に縛りはないはず

何せ新しい技術なもんでsd-scriptsのdev Branchで動かす必要がある

te_lr 2e-5

unet_lr 1e-4

loraplus_lr 16

枚数 90

epoch 100

総ステップ 9000

T_max 900*1

 

ロスアベレージの下がり方がキレイだといやらしい画像を生成したときより興奮を覚える

*1:学習中に完了時は底で終了するようにしたほうがいいと気づいた




以上の内容はhttps://nextaltair.hatenablog.com/entry/2024/05/19/153511より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14