GANについて
NIPS2014で発表された論文[1].
偽物のデータを生成するGeneratorと,データが本物か識別するDiscriminatorから構成される.
Generator
目的はデータ$\boldsymbol{x}$の分布$p_g$を推定する(=Discriminatorに見破れないデータを生成する)こと.
入力:Prior $p_z(\boldsymbol{z})$から出力されるノイズ$\boldsymbol{z}$.
出力:$\boldsymbol{x}$と同次元のベクトル,この記事中では$G(\boldsymbol{z})$と表す.
Generatorは多層のパーセプトロンであり,ネットワークの重みを$\theta_g$と表現したとき,$G(\boldsymbol{z};\theta_d)$と表現される.
以降Gと表現する.
Discriminator
目的は入力されたデータが本物か偽物か見分けること.
入力:$\boldsymbol{x}$,または$G(\boldsymbol{z})$.
出力:$\boldsymbol{x}$である確率.
以降Dと表現する.
Objective function
GANの目的式は以下である.
\min_G\max_D V(D,G)=\mathbb{E}_{\boldsymbol{x}\sim p_{data}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z}\sim p_g(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]
$\boldsymbol{x}\sim p_{data}(\boldsymbol{x})$はデータの分布$p_{data}(\boldsymbol{x})$から生成された$\boldsymbol{x}$データ(本物のデータ)を意味し,
$\boldsymbol{z}\sim p_g(\boldsymbol{z})$はPriorから出力されるノイズ(偽物のデータを生成するシード)を意味すると考えられる.
1項目は,本物のデータをDに入力したとき,Dが入力データを本物であると推定する確率の期待値.
2項目は,Gが生成する偽物のデータをDに入力したとき,Dが入力データを偽物であると推定する確率の期待値.
Training
最適なGの重み$\theta_g$とDの重み$\theta_d$を以下の手順で求める.
Step1
$p_g(\boldsymbol{z})$からサンプル$\boldsymbol{z}^{1},\ldots,\boldsymbol{z}^{m}$を得る.
$p_{data}(\boldsymbol{x})$からサンプル$\boldsymbol{x}^{1},\ldots,\boldsymbol{x}^{m}$を得る,
\nabla_{\theta_d}\frac{1}{m}\sum_{i=1}^m[\log D(\boldsymbol{x}^{i})+\log (1-D(G(\boldsymbol{z}^{i})))]
でSGDを行い,$\theta_d$を更新する..
これをk回繰り返す.
Step2
$p_g(\boldsymbol{z})$からサンプル$\boldsymbol{z}^{1},\ldots,\boldsymbol{z}^{m}$を得る.
\nabla_{\theta_d}\frac{1}{m}\sum_{i=1}^m\log (1-D(G(\boldsymbol{z}^{i})))
でSGDを行い,$\theta_g$を更新する.
Step3
Step1,Step2をn回繰り返す.
GANのAdvantage
Backpropagationのみで学習できる.
他の機能を取り入れることができる.
Gはデータから直接学習せず,Dを経由する.
GANのDisadvantage
$p_g(\boldsymbol{x})$が明示的でない.
DとGは同期してTrainingしなければならない.
Reference
[1] Goodfellow, Ian, et al. "Generative adversarial nets." Advances in Neural Information Processing Systems. 2014.