第57回目は、「DCGAN (Deep Convolutional Generative Adversarial Networks)」について紹介します。
DCGANは、GANに対して畳み込みニューラルネットワーク(CNN)を適用し、かつネットワークを深くした手法です。DCGANの登場によって、より写真と見分けがつかない画像を生成することが可能となり、注目を集めました。

DCGAN (Deep Convolutional Generative Adversarial Networks)

DCGANの論文[1]では、畳み込みニューラルネットワーク(CNN)を適用し、かつネットワークを深くした場合でも安定して学習を進められる構成が実証されました。

DCGANの特徴は、以下のとおりです。

■隠れ層に全結合を用いず、畳み込みとする。
■プーリングの代わりにストライドの畳み込みを用いる。

プーリングとは、例えば3×3の領域から最大値や平均値を求め1つの値を生成する処理です。これによりプーリング前のデータと比較して、プーリング後はサイズの小さいデータが得られます。

一方、ストライドとは、3×3の領域をスライドさせていく処理です。2画素飛ばしで処理することで、この処理でもサイズの小さいデータを得ることになります。

■バッチ正規化を全ての層に対して行う。

バッチ正則化では、各層の入力は常に平均が0、分散が1となるようにデータを変換します。これにより学習がより容易に進むようになると言われています。

■Generatorの活性化関数は、出力層はtanh、それ以外はReLuを用いる。
■Discriminatorの全ての層の活性化関数にLeakyReLuを用いる。

プーリング、ストライド、畳み込み、全結合、活性化関数、tanh、ReLu、LeakyReLuなどの詳細はディープラーニング(Deep Learning:深層学習)の書籍やインターネットなどで調べてみて下さい。Generator、Discriminatorについては前回の記事を読んでみて下さい。

DCGANでは、多層の畳み込み層(Deep Convolutional Network)を用い、かつ上手く学習が進むように工夫することで、良い結果を得ることに成功しました。

図1 DCGANのネットワーク

図1 DCGANのネットワーク

図2は、手書き文字認識のデータセットであるMNISTを用いて、GANとDCGANを比較した結果です。左から正解値(Groundtruth)、GAN、DCGANとなります。GANでは線が二重のように見えるゼロ、6と区別がつきづらい5、7と区別がつき難い9などが見られ、全体的に不明瞭なパターンが多く生成されています。一方、DCGANでは輪郭もクリアで、実際の手書き文字で生じ得るパターンをより正確に生成できています。

図2 DCGANによる画像の生成結果

図2 DCGANによる画像の生成結果

図3はDCGANにより顔画像を生成した結果です。中には少し歪んだ顔も含まれていますが、さほどボケることなく明瞭な顔画像が生成できています。

図3 DCGANによる画像の生成結果

図3 DCGANによる画像の生成結果

次回は、「Variational Autoencoder (VAE)」を紹介します!


参考文献
[1] A. Radford, L. Metz, and S. Chintala. Unsupervised representation learning with deep convolutional generative adversarial networks. In ICLR, 2016.