web-dev-qa-db-ja.com

生成的敵対的ネットにおける弁別器の損失とジェネレータの損失を解釈する方法は?

私はDCGANの人々の実装を読んでいます、特に this one テンソルフローで。

その実装では、作成者は、ディスクリミネーターとジェネレーターの損失を引き出します。これを以下に示します(画像は https://github.com/carpedm20/DCGAN-tensorflow からのものです)。

enter image description here

enter image description here

弁別器と発生器の両方の損失は、どのパターンにも従わないようです。一般的なニューラルネットワークとは異なり、そのニューラルネットワークの損失は、トレーニングの反復回数の増加と共に減少します。 GANのトレーニング時に損失を解釈する方法は?

16
shapeare

残念ながら、GANについて述べたように、損失は非常に直感的ではありません。ほとんどの場合、ジェネレーターとディスクリミネーターが互いに競合しているため、一方の改善は他方の損失の増加を意味し、受信した損失について他の人がよりよく学び、競合他社を台無しにするなどです.

今度は、データと初期化に応じて十分な頻度で発生する1つのことは、識別器と発生器の両方の損失が、次のように永続的な数値に収束していることです。 (損失が少し跳ね返っても問題ありません-モデルがそれ自体を改善しようとしている証拠にすぎません)

この損失の収束は、通常、GANモデルが最適化を見つけたことを意味し、それ以上改善することはできません。これは、十分に学習したことを意味するはずです。 (また、数値自体は通常、あまり有益ではないことに注意してください。)

ここにいくつかのサイドノートがありますが、私は助けになると思います:

  • 損失があまりうまく収まらない場合、モデルが何も学習していないことを必ずしも意味しません-生成された例をチェックしてください、時には十分に出てきます。または、学習率やその他のパラメーターを変更してみてください。
  • モデルがうまく収束した場合でも、生成された例を確認してください。場合によっては、識別器が真のデータと区別できない1つまたはいくつかの例を見つけることがあります。問題は、常に新しいものを作成するのではなく、これらの少数を提供することです。これはモード崩壊と呼ばれます。通常、データにある程度の多様性を導入すると役立ちます。
  • バニラGANはかなり不安定なので、 DCGANモデルの一部のバージョン を使用することをお勧めします。これには、コンボリューションレイヤーやバッチ正規化などの機能が含まれており、収束の安定性に役立つと考えられています。 (上の写真は、バニラGANではなくDCGANの結果です)
  • これはある程度の常識ですが、それでもなお、モデルを微調整するほとんどのニューラルネット構造のように、つまり、特定のニーズ/データに合わせてパラメーターまたはアーキテクチャを変更すると、モデルを改善したり、モデルをねじ込んだりできます。
21
Massyanya