CGAN(Conditional GAN)
CGAN(Conditional GAN)の実装を行います。GANではノイズから画像を生成する際、画像はランダムに生成されていました。CGANでは生成時にクラスラベルを指定することで指定した画像を生成できるようになります。
CGANの特徴
$$
\max_G \max_D V(D, G) = \max_G \max_D \mathbb{E}_{\mathbb{x} \sim P_{data({\bf x})}}\ \ [\log D(\mathbb{x})]
+ \mathbb{E}_{\mathbb{z} \sim P_({\bf z})}\ \ [\log (1 – D(G(\mathbb{z})))]
$$
$$
\max_G \max_D V(D, G) = \max_G \max_D \mathbb{E}_{\mathbb{x} \sim P_{data({\bf x})}}\ \ [\log D(\mathbb{x|y})]
+ \mathbb{E}_{\mathbb{z} \sim P_({\bf z})}\ \ [\log (1 – D(G(\mathbb{z|y})))]
$$
GANの損失関数(上)とCGANの損失関数(下)の比較です。識別器Dと生成器Gにそれぞれクラスを指定するYという条件が追加されています。Gへの入力ではノイズ+クラスを指定するOne-Hotベクトルを指定します。Gへの入力は画像+One-Hotベクトルを画像サイズに拡大した画像が渡されて学習を進みます。
今回の実装では生成時に0〜9までのクラスを指定して画像を生成しています。

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





最後に
GANからDCGANやWGANと、生成画像の精度とは別に、GANから指定した画像を生成するモデルとしてCGANが提案されました。
最初のGANの実装はこちらです。
CGANの論文はこちらです。