機械学習メモ
This project is maintained by kino-3
Generative Adversarial Networks
https://arxiv.org/abs/1406.2661
https://github.com/goodfeli/adversarial
これらの相反する目標を持った 2 つのモデルを同時に訓練する。
よって, 目的関数は $ x $ と $ y $ の同時分布を $ p(x,y) $ とすると次のように表せる。ただし, $ (*) $ では以下を適用した。
よって, $ \underset{G}{\min} \underset{D}{\max} V(D, G) $ となる $ \theta_g $ と $ \theta_d $ を求めればよい。
$ (**) $ より, バッチサイズを $ m $ とすると, $ \theta_d $, $ \theta_g $ は次の勾配に基づいて更新される。ただし, $ x^{(i)} $ は訓練データから取り出され, $ z^{(i)} $ は $ p_z(z) $ に従うノイズである。
\[\begin{aligned} & \nabla_{\theta_d} \frac{1}{m}\sum_{i=1}^{m}[\ln{D(x^{(i)})}+\ln{(1-D(G(z^{(i)})))}]\\ & \nabla_{\theta_g} \frac{1}{m}\sum_{i=1}^{m}[\ln{(1-D(G(z^{(i)})))}] \end{aligned}\]ただし, $ \ln{D(x^{(i)})} $ は $ \theta_g $ に依存しないことを利用した。
$ \theta_g $ は $ \nabla_{\theta_g} \frac{1}{m}\sum_{i=1}^{m}[\ln{(1-D(G(z^{(i)})))}] $ で更新されるが, 更新の初期段階において, 生成器の出力 $ x = G(z; \theta_g) $ は明らかに訓練データと異なるため, $ z $ によらず $ D(G(z))\cong 0 $ となる。よって, $ \ln{(1-D(G(z)))} \cong 0 $ となり, この勾配は消失する。
これを回避するために, $ \theta_g $ の更新の初期段階では $ \ln{(1-D(G(z)))} $ を最小化するのではなく, $ \ln{D(G(z))} $ を最大化するとよい。($ \underset{\theta_g}{\rm argmin}\ln{(1-D(G(z)))} = \underset{\theta_g}{\rm argmax}\ln{D(G(z))} $ なので, この考え方は妥当である。)
$ a, b, y \in(0,1) $ のとき, $ a, b $ によらず, $ a\ln{y} + b\ln{(1-y)} $ は
\[\begin{aligned} & \frac{\partial}{\partial y} \left\{a\ln{y} + b\ln{(1-y)}\right\} = 0\\ & \Leftrightarrow \frac{a}{y}-\frac{b}{1-y}=0\\ & \Leftrightarrow y = \frac{a}{a+b} \end{aligned}\]のときに最大となる。これを $ (*) $ に適用すると題意は示される。
$ (*) $ より, $ \tilde{p}(x) := \frac{p_{data}(x)+p_g(x)}{2} $ とすると, $ \int \tilde{p}(x) dx = 1 $ かつ $ \tilde{p}(x) \geq 0$ であるから,
\[\begin{aligned} \underset{G}{\min} \underset{D}{\max} V(D, G) &= \underset{G}{\min} \underset{D}{\max} \int p_{data}(x)\ln{D(x)}+ p_g(x)\ln{\left\{1-D(x)\right\}}dx\\ &= \underset{G}{\min} \int p_{data}(x)\ln{D_G^*(x)}+ p_g(x)\ln{\left\{1-D_G^*(x)\right\}}dx\\ &= \underset{G}{\min} \int p_{data}(x)\ln{\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}}+ p_g(x)\ln{\left\{\frac{p_g(x)}{p_{data}(x)+p_g(x)}\right\}}dx\\ &= \underset{G}{\min} \int p_{data}(x)\left(\ln{\frac{p_{data}(x)}{\tilde{p}(x)}}-\ln{2}\right)+ p_g(x)\left(\ln{\frac{p_g(x)}{\tilde{p}(x)}}-\ln{2}\right)dx\\ &= \underset{G}{\min} -2\ln{2} + KL(p_{data}\parallel \tilde{p}) + KL(p_g\parallel \tilde{p}) \end{aligned}\]となる。よって, 生成モデル $ G $ が十分に柔軟であれば,
\[\begin{aligned} & p_g=p_{data}\\ & \Leftrightarrow p_g=\tilde{p}=p_{data}\\ & \Leftrightarrow KL(p_{data}\parallel \tilde{p})=0 \wedge KL(p_g\parallel \tilde{p})=0\\ & \Leftrightarrow\underset{G}{\min} \underset{D}{\max} V(D, G)\end{aligned}\]となる。