Yuki’s blog

自身の成果物や好きなことを発信していきたいと思います。情報系のジャンルが多いです。

Deep Convolutional Generative Adversarial Networks 【DCGAN】メモ

     

こんにちは。
今回はDeep Convolutional Generative Adversarial Networks【DCGAN】の論文を
軽く読んだので自分のメモ的な意味でまとめていきたいと思います。
arxiv.org

DCGANとはどういうものか

DCGANは2016年にAlec Radford & Luke Metz, Soumith Chintalaによって提案されたCNN(Convolutional Neural Network)を用いた、敵対生成ネットワークの1つです。
以前からCNNを用いた教師なし学習の研究は少なく、教師あり学習教師なし学習への橋渡しとなればよいと提案された手法です。これによって教師なし学習への強力なアプローチであることを示しました。

先行研究と優れている点

教師なし学習の先行研究としてはデータのクラスタリング学習であるK-Means法や画像パッチの階層的クラスタリング(Coates & Ng, 2012)やオートエンコーダーなどが挙げられています。また、先行研究の出力結果は良くボケたり、ノイズや不可解な画像を生成したりすることがありました。これは最初に提案されたGAN(Generative Adversarial Network)の問題でもあります。
最近では転置み込みネットワークを用いたアプローチ(Dosoviskiy et al., 2014)が自然な画像を生成し、いくつかの成功を収めているようです。
DCGANもこの転置畳み込みを採用しており、自然な画像を生成できるようになっているようです。
従来の手法よりも特徴量マップが少ない点も優れているようです。

技術と手法のポイント

DCGANの提案手法は既存のCNNの構造を3つ修正したところにあります。

  1. プーリング層を畳み込み層(Discriminator)と転置畳み込み(Generator)に変更
  2. 全結合層の排除
  3. DiscriminatorとGeneratorの両方にBatch Normalizationを適用

1番目に関しては、独自の空間ダウンサンプリングとアップサンプリングを学習できるようにと書いてありましたがあまり理解できてないです。
2番目は、最新の画像分類モデルでも使用されているGlobal Average Poolingを例に、全結合層を排除することで学習の安定性が高くなるみたいです。
一方で学習の収束速度は遅くなるという欠点があります。
3番目は、Batch Normalizationで学習を安定化させるものです。最近ではよく使われる手法ですね。GeneratorのoutputとDiscriminatorのinput以外の層に挿入されています。

このほかにもいくつかDCGANに使われている特徴的な構造があります。

  • Generatorの活性化関数にReLUを適用。出力層はTanh()を用います。
  • Discriminatorの活性化関数にはLeaky Rectifieid Activation(LeackyReLU)を用いる。

これに関しては、この活性化関数を用いると結果が良くなるとしか説明されていません。追加すると良くなるという論文が紹介されていました。
追加することによって、勾配がGeneratorまでしっかり届くという感じですね。

この技術の有効性の検証

色々なデータセットを用いて有効性の検証をしています。
GANを特徴抽出として利用するCIFAR-10の分類では比較するベースラインモデルとして、教師なし学習のK-Meansなどと比較しています。K-Meansの80.6%から82.8%のaccuracyまで達成したようです。
この実験ではDCGANはCIFAR-10で学習していないためDiscriminatorのfinetuningによってさらに精度が向上するかもしれないと述べられています。

議論

モデルの学習が長くなると学習が崩壊する場合がある。この学習の不安定さにこれから取り組んでいく必要があると述べられています。
画像だけでなく他のドメイン(ビデオやオーディオ)に適用していくのも興味深い研究になる。また、学習された潜在変数の特性を調査することも興味深い研究になると今後の展望が述べられていました。

次に読む論文

DCGANより高解像度の画像が生成できるようになったPGGAN, StyleGAN, や画像の大域的な情報を考慮した画像生成のSAGANあたりをあさってみたいなと思います。
あとはただ、単純にCycleGANとかも勉強してみたいなと思います。