CLIP Text Deprojectorを使って画像生成してみる ~学習率(learning rate)~
前回までは、物理メモリを超える訓練データの扱い方に関して一連の記事を書いてきましたが、今回は一休みを入れて学習率(learning rate)について分析をしてみます。
前回の記事
他のStable Diffusionの関連記事
Layered Diffusion Pipelineを使うためのリンク集
ライブラリの入手先と使用法(英語) : Githubリポジトリ
日本語での使用方法の解説 : Noteの記事
最適化アルゴリズム(オプティマイザ)
CLIP Text Deprojectorの学習では、最適化アルゴリズムとしてAdamを使用しています。最適化アルゴリズムには最急降下法を始めとした様々な手法がありますが、Adamは大抵の場合に第一選択肢として取られるアルゴリズムです。
他の最適化アルゴリズムと同様、Adamは学習率(learning rate)で、ステップ毎のパラメータの変化量を調整できます。Adamは勾配の移動平均で学習率を変化させて収束性を高めています。
ところで、学習率は、多くの場合、学習が進むに従って小さくするとよいとされていますが、Adamで行われる学習率の調整は移動平均を使うため、学習が進んでも学習率が小さくなるとは限りません。これが、勾配の和を使うAdaGradのようなアルゴリズムとは異なる点です。
そのため、最適な学習率の初期値と減衰率を検討することは、Adamを用いた学習の効率を向上させることになります。
学習率と損失関数
そこで、さまざまな学習率を設定して学習させたモデルの、テストセット上での損失関数の値を調査しました。
本来ならば、何回か試行して平均値(と分散)を取るところですが、手間なので今回は1回の試行で得た値で調査しています。
学習の初期段階(epoch=2, 4)では、学習率の差が損失関数の値に大きな影響を与えていることが見て取れます。学習率が大きいと損失関数の値が大きくなり、学習率が小さいと損失関数の値が小さくなる傾向があります。
それに対し、学習が進むにつれ、学習率の差が損失関数の値にあまり現れなくなっているようです。とはいえ、大まかに小さい学習率の方が損失関数の値が小さくなる傾向は維持しているようです。また、あまりに大きな学習率(lr=0.01, 0.005)は実験から除外しています。
全体として、学習の初期段階では中程度の学習率(lr=0.002, 0.001)で学習を行い、途中から小さい学習率(lr=0.0005, 0.0002)に変えるのが、よさそうに思われます。
まとめ
Adamでは、学習が進むにつれ、学習率を減少させるのがよいと考えられます。
学習の初期段階(epoch<=4)では中程度の学習率(lr=0.002, 0.001)、後半(epoch>4)では小さい学習率(lr=0.0005, 0.0002)を使うようにするのがよさそうに思われます。
この記事が気に入ったらサポートをしてみませんか?