敵対的生成ネットワークGAN

ディープラーニング




敵対的生成ネットワーク

敵対的生成ネットワークは、英語だとGenerative Adversarial Networkで、GANと略されています。

以下、敵対的生成モデルをGANと呼びます。

元データがどのような分布になっているかを推測し、その分布に基づいて、元データと同じようなデータを生成することを目的としたモデルを生成モデルと言います。

とりわけ、ディープラーニングを取り入れた生成モデルのことを深層生成モデルと呼びます。

GANは、この深層生成モデルの一種です。

敵対的生成ネットワークのネットワーク

GANは、2種類のネットワークで構成されています。

それぞれ、ジェネレータディスクリミネータと呼ばれます。

    1. ジェネレータ

入力として潜在空間のランダムベクトルを受け取り、画像を生成して出力するネットワーク

    1. ディスクリミネータ

入力として画像を受け取る。
その画像が本物か偽物かを予測して出力するネットワーク
(ジェネレータで生成されたか、されてないか)

この2つのネットワークは、敵対関係にあります。

この関係から、敵対的生成ネットワークとなっています。

ジェネレータで、画像(False)を生成し、ディスクリミネータでその画像が本物(True)かFalseかを予測し、ジェネレータが勝ったら、学習終了となります。

これらの構造をGANと呼びます。

ジェネレータ、ディスクリミネータのそれぞれのネットワークにCNNを用いたモデルをDCGANと呼びます。

$$
\min _ { G } \max _ { D } V ( D , G ) = \mathbb { E } _ { \boldsymbol { x } \sim p _ { \mathrm { data } } ( \boldsymbol { x } ) } [ \log D ( \boldsymbol { x } ) ] + \mathbb { E } _ { \boldsymbol { z } \sim p _ { \boldsymbol { z } } ( \boldsymbol { z } ) } [ \log ( 1 – D ( G ( \boldsymbol { z } ) ) ) ]
$$

ジェネレータ

$$
\mathcal { L } _ { G } = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \log \left( 1 – D \left( G \left( \boldsymbol { z } _ { i } \right) \right) \right)
$$

ディスクリミネータ

$$
\mathcal { L } _ { D } = \frac { 1 } { m } \sum _ { i = 1 } ^ { m } \left[ \log D \left( \boldsymbol { x } _ { i } \right) + \log \left( 1 – D \left( G \left( \boldsymbol { z } _ { i } \right) \right) \right) \right]
$$

学習アルゴリズム

ジェネレータとディスクリミネータは、それぞれ独立に学習する。

初めに、ジェネレータが学習する。
次に、ディスクリミネータが学習する。

一方が、ある程度学習し終わるまで、もう一方は、学習はしない(パラメータ固定)。
これを繰り返す。

敵対的生成ネットワークの種類

  1. DCGAN
  2. SGAN
  3. Conditional GAN
  4. Pix2Pix
  5. Cycle GAN
The GAN Zoo
A list of all named GANs!
eriklindernoren/PyTorch-GAN
PyTorch implementations of Generative Adversarial Networks. - eriklindernoren/PyTorch-GAN

Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio(2014). Generative Adversarial Networks

Conditional GAN

Alec Radford, Luke Metz, Soumith Chintala(2015). Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

cGAN(conditional GAN)でくずし字MNIST(KMNIST)の生成 - Qiita
はじめに GANの一種、cGAN(conditional GAN)を用いてくずし字MNISTの生成をやってみました。 詳しい理論面については適宜参考になるリンクなどを載せるので、参照してください。 PyTorchでGANを実...

DCGAN

Alec Radford, Luke Metz, Soumith Chintala2015). Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

DCGAN Tutorial — PyTorch Tutorials 1.5.1 documentation
5ステップでできるPyTorch - DCGAN - Qiita
概要 PyTorchを使って、以下の5ステップでDCGANを作成します。 データの準備 Generatorの作成 Discriminatorの作成 訓練関数の作成 DCGANの訓練スタート 当記事は、 DCGANの理論...

LSGAN

Xudong Mao, Qing Li, Haoran Xie, Raymond Y.K. Lau, Zhen Wang, Stephen Paul Smolley(2016). Least Squares Generative Adversarial Networks

PyTorch そして LSGANをやってみる | cedro-blog
今回は、安定した学習を可能にしたLSGANを試してみます。
meliketoy/LSGAN.pytorch
Repository for Pytorch Implementation of Least Squares Generative Adversarial Networks - meliketoy/LSGAN.pytorch

SRGAN

Christian Ledig, Lucas Theis, Ferenc Huszar, Jose Caballero, Andrew Cunningham, Alejandro Acosta, Andrew Aitken, Alykhan Tejani, Johannes Totz, Zehan Wang, Wenzhe Shi(2016). Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network.

PIX2PIX

Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, Alexei A. Efros2016). Image-to-Image Translation with Conditional Adversarial Networks

Pix2Pix:CGANによる画像変換
GAN, DCGAN, CGANに引き続きGAN手法のお勉強。順番に記事を書いてきて、やっとPix2Pixまで来た。Pix2PixPix2PixはCVPR 2017で発表された論文 Image-to-Image Translation wi

Cycle GAN

Jun-Yan Zhu, Taesung Park, Phillip Isola, Alexei A. Efros(2017). Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks.

PyTorch (15) CycleGAN (horse2zebra) - 人工知能に関する断創録
今回はCycleGANの実験をした。CycleGANはあるドメインの画像を別のドメインの画像に変換できる。アプリケーションを見たほうがイメージしやすいので論文の図1の画像を引用。 モネの絵を写真に変換する(またはその逆) 馬の画像をシマウマに変換する(またはその逆) 夏の景色を冬の景色に変換する(またはその逆) こんな...
junyanz/pytorch-CycleGAN-and-pix2pix
Image-to-Image Translation in PyTorch. Contribute to junyanz/pytorch-CycleGAN-and-pix2pix development by creating an account on GitHub.

Recycle GAN

参考


タイトルとURLをコピーしました