EBGAN(Energy Based GAN)

EBGAN(Energy Based GAN)の実装です。DCGANの派生として、LSGAN→EBGAN→WGANと損失計算の方法について続々と提案されている過程を追っています。EBGANは損失関数をヒンジ損失に変更しています。

EBGANの特徴

識別器の損失をヒンジ損失で計算しています。ヒンジとはドアの蝶番(ちょうつがい)のことを指していて、損失のグラフが蝶番のような形をしていることに由来します。

ヒンジ損失の数式

識別器Dはオートエンコーダーとして構成されています。

識別器Dの構成

EBGANの実装

こちらのコードを参考に、Google Colabで動作するnotebookとして実装しました。実装コードはGithubに置いてます。興味のあるかたは試してみてください。

最初のG(z)
100ループ目のG(z)
500ループ目のG(z)
1000ループ目のG(z)

1000ループ目までの生成過程です。今までのGAN(DCGANやLSGAN)に比べて、Gがゆっくりと成長しているみたいです。損失の推移と生成画像の変化をGIFにまとめてみました。

DとGの損失の推移
生成画像の推移

最後に

今回の学習では、参照した実装の通りに生成器→識別器の順で学習させました。DCGANやLSGANで実装したときの様に、識別器→生成器の順で学習を試みたところ、学習が全然進まない現象となりました。GANはちょっとした変化で結果が大きく変わることを改めて実感しました。

EBGANの論文はこちらです。