DCGANについて元論文を読みながら再整理

 

2年ほど前からブーム真っ最中のGANについて、丁寧に振り返りを使用というのが本記事の目的です。まとめサイトからの引用ではなくちゃんと元論文を読むことをポリシーとします。

 


そもそもDCGANとは

DCGAN(Deep Convolutional Generative Adversarial Networks)

簡単にいうと畳み込みニューラルネットワークを適用したGAN。論文ではネットワーク設計の注意点や特徴が細かく定義されている。

(論文)
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (2015) https://arxiv.org/abs/1511.06434

 


DCGANのネットワーク構造の特徴

pooling層をConvolutions層(strideあり)に置き換える

  • pooling層をConvolutions層に置き換える(stride数をうまく調整。poolingが2×2で実施されるなら、stride=2とすれば出力のサイズは等しくなる)。
  • replaces deterministic spatial pooling functions (such as maxpooling) with strided convolutions, allowing the network to learn its own spatial downsampling.

  • Generatorではzから画像サイズと同等サイズの出力にアップサンプリングしないといけないのでDeconvolution(正式名称:fractionally-strided convolutions)をする。これは元となる特徴マップを拡大してから畳み込むことでサイズを大きくする処理。

バッチノルムを使用

  • バッチノルムを挟んだ方が、初期値問題や購買消失問題が生じにくく、学習がスムーズになる
  • This helps deal with training problems that arise due to poor initialization and helps gradient flow in deeper models

  • ただし、全層に適用するとモデルが不安定になった。
  • GeneratorのINPUTとDiscriminatorのOUTPUTには適用しいようにしたら解決したとのこと(Why?)
  • Directly applying batchnorm to all layers however, resulted in sample oscillation and model instability. This was avoided by not applying batchnorm to the generator output layer and the discriminator input layer.

Full-Conectionをなるべく省く。

  • 学習安定性の観点でFull-ConectionよりもGlobal-Average-Poolingが広く使われているのと同じ考え方
  • Global-Average-Poolingについてはコチラを参照(https://qiita.com/mine820/items/1e49bca6d215ce88594a)
  • Second is the trend towards eliminating fully connected layers on top of convolutional features. The strongest example of this is global average pooling which has been utilized in state of the art image classification models (Mordvintsev et al.).

  • ただし、Generatorとzをinputする部分と、Discriminatorの判定結果0..1を出力する部分では全結合した方が良い結果が得られた。
  • A middle ground of directly connecting the highest convolutional features to the input and output respectively of the generator and discriminator worked well.

GeneratorではReLUを活性化関数として使用。ただし出力層のみtanh。

  • 学習が早いということで、出力層では有界の活性化関数を推奨している。
  • We observed that using a bounded activation allowed the model to learn more quickly to saturate and cover the color space of the training distribution.

  • そもそも画像(例:RGBの場合は0~255)を出力するのだから活性化関数が有界じゃないと面倒でしょ?という気もする

DiscriminatorではLeakyReLUを使用。

  • 理由には「従来手法がそれでうまくいってるから」程度しか書かれていない
  • Within the discriminator we found the leaky rectified activation (Maas et al., 2013) (Xu et al., 2015) to work well, especially for higher resolution modeling.

 


やー、なかなか直感的には「なるほど」と思っても、うまく説明しきれないですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です