書きかけの記事サルベージ。若干情報が古いです。
内容を大幅に縮小したので若干消化不良感がありますがお許しください。
機械学習素人がWeb UIをいじってHyperNetworkを自作してみたというだけの記事。
何の技術的知見もないので、その筋の方は適当に流し読みしていただければ。
完成物のリンクも置いておきます。
もうちょっと改良できそうですが試行錯誤中。
動作環境
Google colaboratory 1
Waifu Diffusion 1.4 patch1
Stable Diffusion Web UI (AUTOMATIC1111) v1.0.0-pre
Hypernetwork-MonkeyPatch-Extension
モデル作成時の設定
ほとんど既存記事の受け売りですが一応掲載
Layer
レイヤー構成。例えば(1, 2, 1)
の場合、Input(32)
→Conv2d(64)
→Conv2d(32)
のようなモデルが構成される。小数点以下も指定可能。
画風を学習する際は(1, 2, 2, 1)
がいいらしいがまだ上手く行っていない。Layer NormalizationをONにすればデフォルトでも学習精度はまあまあ良くなる。
Activation
活性化関数。以下、代表的なもののみ抜粋。
- Linear
- $ f(x) = x $。つまり、何も変換されていない状態。
- 原則として使用すべきではないが、学習が安定するので試してみる分には意外とありかもしれない。
- ReLU
- $ f(x) = \max(0, x) $
- おなじみの関数。Normalizationの設定に気を付けないとニューロン死が発生するらしいので注意。
- Swish
- ReLU系に分類される。ReLUと違い、マイナスの入力値を受け取ってもニューロン死が発生しない。
- Web UIの場合、実際にはHardswish関数が使用される。Hardswish関数はBack-propagation時のみ近似関数を使用する軽量化版。
- Mish
- ReLU系に分類される。最近作られた関数らしく、学習の収束が早いのが特徴。ReLUと違いニューロン死は発生しない。
Optimization
- 最適化関数。
- よくわかってない。とりあえずAdamでいいと思う。
-
MonkeyPatch-Extension
を導入すると入力可能なパラメータを増やせるようなのでAdamWも選択肢に入る?
Normalization
レイヤーの初期化にかかわる。デフォルトだと入力にマイナスの値を含むらしいので、ReLU系の活性化関数を使用する場合は変更推奨。
Layer Normalization
- 中間層にLayer Normalization層が追加される
- Dropout層の代わりとして提案された手法。ONにすると収束が早くなる。
- 学習が不安定になるという噂もあるので、場合によりけりで判断した方がいいかもしれない。
- 外部Extensionを入れていないと2層目の直下にしか追加されないらしい
Use Dropout
- Dropout層が追加される
- 一定の数値未満の出力が0に置換される。過学習対策
- 原則として入れているがLayer NormalizationがONの場合はなくてもいいかも。
Training設定
Use Gradient Clipping
- 勾配クリッピングを適用する。
- back propagation時の勾配に閾値を設定する。学習の発散対策。
- まだ試してない。Layer NormalizationをOFFにしたときに使ってみるといいかもしれない。
Use Advanced
Hypernetwork-MonkeyPatch-Extension
を導入すると選択できる。Cosine Annealingを使用するためにONにする。
Use Cosine Annealing
- ONにすると学習率がステップ数に応じて上下に変動する。
- いわゆる焼きなまし法の応用。単純に学習率を減らしていくよりも局所最適解から脱出しやすくなる。
-
MonkeyPatch-Extension
を導入する理由の一つ。とりあえずONにしていいと思う。
Max steps
- 最大学習ステップ数
- だいたい10000~20000位。元データの枚数とモデルの構成に応じて変える。1epochあたり画像の枚数分のステップがかかるので、epoch数の調整が重要(らしい)。
Shuffle Danbooru Tags
学習時、captionをDanbooruのタグリストとみなしてランダムに並び替える。Data Augmentationの一種。
Dropout Tags
- 学習時にcaption中のDanbooruタグを一定確率でRandom-Clipする。
- Data Augmentationの一種なので場合によりけりで。
Text
[filewords]
とだけ書かれたテキストファイルをtemplates
フォルダの中に自力で作成して使用する。よく分かってない。
Optimization Algorithm
- よく分かってない。おそらくCross-Attention最適化時に使用するための関数。
参考文献
-
現在の無料版colabはStable Diffusionの利用に制限がかけられており、学習などのマシンリソースを消費するタスクを回すと強制終了される場合があるので注意が必要です。 ↩