【AI/座学】GANパラメーター調整のコツ・極意書

パラメーター 調整

対象読者

GANモデルは学習が不安定になりがちです。それを見ると、私の心も不安定(なんちゃって)。

ここでは、そんな学習も心も不安定になってしまった人に向けての、GANモデルパラメーター調整のコツを紹介します。

また、ここでは数式などの複雑な概念理解は問いません。必要な能力は数学的思考よりも論理的思考です。

ここでしっかり学習してパズル間隔でパラメーターを調整できるようになりましょう!そして、一歩ずつ一流のAIエンジニアに近づきましょう!

判断基準となる前提知識

前提知識

まずは、前提知識をつけましょう。前提知識があると….

  • パラメーターの調整が運任せにならない
  • 損失などの評価結果を見たら推測が立てられる
  • 推理が正しかった時のヤバいくらいのアドレナリンが得られる(笑)

こんな風に、前提知識を持つだけで、一流のAIエンジニアに大きく近づけるのです。やるんだったら、一流を目指しましょう!超越しちゃいましょう!

知識:バッチサイズの大小調整

ホグワーツ 人工知能パラメーター

大きくする場合のメリットデメリット:

  • 計算効率の向上: 大きなバッチサイズを使用すると、GPUやCPUなどのリソースを効率的に使用できます。これにより、トレーニング時間が短縮されます。
  • モデルの安定性: 大きなバッチサイズを使用すると、勾配の推定がより安定し、モデルの訓練が安定化します。
  • 汎化性能の向上: 大きなバッチサイズを使用すると、モデルがより多くのデータで訓練されるため、汎化性能が向上する可能性があります。
  • メモリ消費量の増加: 大きなバッチサイズを使用すると、メモリの消費量が増加し、メモリ不足になる可能性があります。
  • 局所解への収束: 大きなバッチサイズを使用すると、モデルが局所解に収束しやすくなる局所最適化に陥る。これにより、多様性のある解を見つけにくくなる可能性があります。

小さくする場合のメリットデメリット:

  • メモリ消費量の削減: 小さなバッチサイズを使用すると、メモリの消費量が削減されます。
  • 多様な勾配: 小さなバッチサイズを使用すると、より多様な勾配が得られ、モデルがより多様な方向に学習できます。つまり局所最適化を防ぎやすくなります。
  • 計算効率の低下: 小さなバッチサイズを使用すると、計算効率が低下し、トレーニング時間が長くなる可能性があります。
  • モデルの不安定性: 小さなバッチサイズを使用すると、勾配の推定が不安定になり、モデルの訓練が不安定になる可能性があります。つまり、学習が収束しにくくなります。

知識:学習率の大小調整

迷路 パラメーター 人工知能

大きい場合のメリットデメリット:

  • 高速な収束: 学習率が大きいと、各更新ステップでのパラメータの変化量が大きくなり、収束が速くなる場合があります。
  • 局所最適解の脱出: 大きな学習率を使用すると、局所最適解に収束するのを防ぐために大域的な最適解に向かう可能性が高まります。
  • 発散のリスク: 学習率が大きすぎると、更新ステップごとにパラメータが大きく変化しすぎて、最適解を飛び越えてしまう可能性がある。
  • 安定性の低下: 大きな学習率を使用すると、安定性が低下し、学習が不安定になる場合があります。つまり、収束しにくくなります。

小さい場合のメリットデメリット

  • 安定した学習: 学習率が小さいと、更新ステップごとにパラメータの変化量が小さくなり、学習が安定しやすくなります。
  • 局所最適解への収束: 小さな学習率を使用すると、局所最適化に陥ってしまいます。
  • 収束が遅い: 学習率が小さいと、収束するまでに多くのエポックが必要になり、学習時間が長くなる可能性があります。

知識:ドロップアウトの大小調整

パラメーター 迷路

大きくする(追加・増加・割合)場合のメリットデメリット

  • モデルの正則化: 大きなドロップアウト率を使用すると、モデルがより多くのノードをランダムに無効にするため、モデルの正則化が向上し、過学習を減らす効果があります。
  • 汎化性能の向上: 大きなドロップアウト率を使用すると、モデルがより汎化され、新しいデータに対する性能が向上する可能性があります。
  • 表現力の低下: 大きなドロップアウト率を使用すると、モデルが表現力を失い、モデルの性能が低下する可能性があります。表現力を失うと、より単純な特徴に依存するようになります。また、表現力を失うとは、学習することができる表現空間が制限されることを意味します。
  • 学習の収束が遅くなる: 大きなドロップアウト率を使用すると、モデルが収束するのにより多くのエポックが必要になる場合があり、学習時間が長くなる可能性があります。

小さく(削除・減らす・割合)する場合のメリットデメリット

  • 表現力の向上: ドロップアウトをなくすか、減らすと、モデルの表現力が向上し、より複雑なパターンを捉えることができます。
  • 学習の収束が早くなる: ドロップアウトをなくすか、減らすと、モデルの学習が収束するのに必要なエポック数が減少し、トレーニング時間が短縮される可能性があります。
  • 過学習のリスク: ドロップアウトをなくすか、減らすと、モデルが訓練データに過剰に適合しやすくなり、過学習のリスクが高まります。

知識:識別器と生成器の強弱調整

扉 パラメーター

GANの理想形は識別器と生成器の強さが五分五分になることです。もしバランスが取れないと以下のようになります。

  • 識別器が強すぎると、ほとんどが偽とはじかれて学習の方向性が分からなくなる。
  • 識別器が弱すぎると、偽画像の改善点がわからないので低レベルな品質が続く。

特に多いのは識別器が強くなるケースです。というのも、識別器は判定するだけですが、生成器は0から画像を作り出すという労力の大きい仕事をしなければなりません。そのため、識別器は生成器よりも早く学習を収束させてしまい、GANのバランスが崩れるのです。

つまり、私たちがやるべいことは
生成器が追いつける範囲で識別器を強化しつつも、高品質のために過度な弱体化を避ける』というとても絶妙なバランスを見つけなくてはならないのです。

仮説を立てる練習!

人工知能 AI

では、前提知識はここまでにして、その知識の活用練習をしていきましょう。

例題学習を開始して以下のような出力がされました。あなたなら、どのように見ますか?今までの知識を使って、何かしらの仮説を立てていきましょう。仮説は何個でも挙げられます。その仮説を1つずつ潰していくことが、学習の最適化に繋がります

p.s.紹介した仮説と違うからと言って皆さんの仮説が間違っているわけではありません。いくらでも仮説は立てられますのでね。

例題1

これは失敗する時によく見るパターンですね。

50 [D loss: 0.000624, acc.: 100.00%] [G loss: 0.007994]
1000 [D loss: 0.004652, acc.: 99.69%] [G loss: 0.008186]
2150 [D loss: 0.002862, acc.: 100.00%] [G loss: 0.000937]
3200 [D loss: 0.006426, acc.: 99.20%] [G loss: 0.005835]
4300 [D loss: 0.000406, acc.: 100.00%] [G loss: 0.007646]
5350 [D loss: 0.000592, acc.: 100.00%] [G loss: 0.000230]

仮説:
・正解率をみると、100%付近にずっといる→識別器が強い立ち位置をキープ
・G lossがずっと0.00~という小さな値→識別器の損失にG lossが引っ張られている(G lossは識別器と生成器を合わせた損失なので、識別器の損失が極端に低い場合はそれに引っ張られて生成器の損失が無視されてしまいます。その結果、0.00~という低い損失を維持し続けているのです。

この2点から識別器が強すぎる可能性があると推理→識別器を弱めてみよう

p.s.弱め方は以下で解説します。

例題2

50 [D loss: 0.000624, acc.: 100.00%] [G loss: 0.007994]
100 [D loss: 0.694652, acc.: 54.69%] [G loss: 1.168186]
150 [D loss: 0.732862, acc.: 40.23%] [G loss: 0.726937]
200 [D loss: 0.756426, acc.: 33.20%] [G loss: 0.835835]
300 [D loss: 0.711406, acc.: 36.33%] [G loss: 0.747646]
350 [D loss: 0.703592, acc.: 44.53%] [G loss: 0.748230]

700 [D loss: 0.695925, acc.: 49.61%] [G loss: 0.702438]
800 [D loss: 0.696105, acc.: 50.00%] [G loss: 0.697281]
900 [D loss: 0.688253, acc.: 56.25%] [G loss: 0.704283]
1000 [D loss: 0.687551, acc.: 56.25%] [G loss: 0.706025]
1350 [D loss: 0.697760, acc.: 48.44%] [G loss: 0.717108]
1400 [D loss: 0.686100, acc.: 53.91%] [G loss: 0.708159]
2000 [D loss: 0.659652, acc.: 60.16%] [G loss: 0.790444]
3000 [D loss: 0.645585, acc.: 62.50%] [G loss: 0.880491]
4000 [D loss: 0.553337, acc.: 74.22%] [G loss: 1.089478]

14000 [D loss: 0.467627, acc.: 78.12%] [G loss: 1.328423]
15000 [D loss: 0.543287, acc.: 69.92%] [G loss: 1.445801]
19000 [D loss: 0.486697, acc.: 75.00%] [G loss: 1.706172]

・最初の100%→識別が優位(始めは識別器が優位になりがち)
・それ以降は50%前後→生成器と識別器がいい感じで競い合っている
・4000イテレーションから70%になった→識別器が少しだけ優位になった

ここから、この出力結果はいい感じの学習プロセスを歩んでいると分かる。

p.s.一般的に最初の方は識別器が優勢になりやすいので、最初の100%はあまり考える必要がないかもしれません。

おまけ:識別器を弱めるには?

人工知能

上述のように、識別器を弱める機会は往々にしてあります。なので、ここでは識別器を弱体化させる手段を4つほど紹介していきます。

p.s.弱体化は品質にも関わることなので、過度な弱体化は避けましょう。

バッチ正則化の排除

バッチ正則化のメリットは、収束速度を上げることです。そのため、識別器にこれを適用してしまうと、生成器の学習が識別器に追いつけなくなる可能性が上がります。そしてそれは、低品質な画像に繋がります。

そのため、もし早い段階から正解率が100%を記録し続けたら識別器のバッチ正則化層を取り除いてみましょう。

ドロップアウトを追加

ドロップアウトは過学習の抑制や学習時間が長くなるという特徴があります。つまり、あえて識別器の学習時間を延ばすことで、識別器の優位性を減少させることができるのです。

そのため、識別器の優位性を減らす手段としてドロップアウトを追加したりすることは有効な手となります。

ただし、ドロップアウトを大きくし過ぎると単調な画像しか生成できなくなるので、バランスを考えながらやりましょう。

学習率を小さく

学習率を小さくすることで、収束に時間をかけることができます。そのため、識別器は生成器よりも小さな学習率を設定しましょう。そして、生成器にはより大きな学習率を設定して識別器に対抗できるようにしましょう。

ただ、生成器の学習速度を速めすぎると優先しすぎると、収束しなくなるというリスクもあります。

生成器ネットワークの強化

生成器のネットワークを強化することで、間接的に識別器を弱めることができます。

生成器を強化するには・・

  • ネットワークの複雑さの増加: 生成器のネットワークをより深くより広くすることで、モデルの表現力を向上させることができます。新しい層を追加したり、各層のユニット数を増やしたりすることで、生成器がより複雑なデータ分布を学習する能力が向上します。
  • 新しい層の追加: 生成器のネットワークに新しい層を追加することで、モデルの表現力を向上させることができます。たとえば、畳み込み層や転置畳み込み層など、新しいタイプの層を追加して、モデルの表現力を向上させることができます。
  • 正則化の強化: 生成器のネットワークに正則化手法を追加することで、過学習を防ぎ、モデルの汎化能力を向上させることができます。例えば、ドロップアウトやバッチ正規化などの手法を使用して、モデルを安定化させることができます。
  • 特徴量の追加: 生成器の入力に新しい特徴量を追加することで、モデルの表現力を向上させることができます。入力データに含まれる情報量を増やすことで、モデルがより複雑なデータ分布を学習することができます。

これらの方法を組み合わせることで、生成器がリアルな偽物画像を生成できるようになります。そして、それは識別器を騙すことにも繋がり生成器の優位性を確保できるようになります。

おわりに

AI 終わり

今回はパラメーターの座学を行いました。しかし、なによりパラメーターを上手く調整するのは知識よりも経験則です。そのため、Ascend-beyond式にのっとってこれからも、実践重視でやっていきましょう。

座学はあくまでも、サブ的な扱いで実践を重視する。それがAI学習の基本でありAscend-beyond式AI学習法です。

タイトルとURLをコピーしました