Generative Adversarial Networksの要約とメモ

[Generative Adversarial Networks(Goodfellow et. al. 2014)]
(https://arxiv.org/abs/1406.2661)
の要約とメモ。
筆者の理解と疑問を<font color="LightSteelBlue">青色</font>でメモしている。
Generatorを**G**, Discriminatorを**D**と省略して表記した。

関数2個を競わせて、学習データの分布をモデリングする手法。多層パーセプトロンの場合はバックプロパゲーションのみで訓練できる。マルコフ連鎖が不要で計算量が少ない等の利点がある。

## 概要 
生成モデルを敵対的プロセスで推定するフレームワークの提案。２つのモデルを同時に訓練する。生成Gがデータの分布を捉え、識別DがサンプルがGからではなく訓練データから来た確率を推定。Gの訓練はDが誤る確率を最大化すること。このフレームワークは**minimax two-player game**に対応する。<font color="LightSteelBlue">ゲーム理論で、"最小利得を最大化する戦略がマックス・ミニ戦略", "最大損失を最小化する戦略がミニ・マックス戦略". これらの戦略の利得が等しければその組み合わせはナッシュ均衡点になる(必要十分条件).
さらに、"ゼロ和２人ゲームにおいて、混合戦略によるマックスミニ利得とミニマックス利得は等しい".これは"ミニマックス定理"と呼ぶ.
したがって、ゼロ和２人ゲームでは必ずナッシュ均衡が存在する気がする。(混合戦略なら。混合戦略とは決まった割合で確率的に戦略を選ぶ、的な意味だと理解している).
Gは損失を最小化するのでミニマックス戦略。Dはその逆。
[ゲーム理論入門](http://www.kyy.saitama-u.ac.jp/~etakagi/class/2012/stock/a121127.pdf)
[ゲーム理論](http://www.robot.t.u-tokyo.ac.jp/dcm/lec_opt/lec04.pdf)
</font>
任意の関数GとDの空間で、Gが訓練データの分布を復元し、Dがいたるところで$\frac{1}{2}$になるようなユニークな解が存在する。多層パーセプトロンの場合は、全体をバックプロパゲーションで訓練可能。マルコフ連鎖やunrolled approximate inference network は不要。生成サンプルの質的・量的評価でこのフレームワークのポテンシャルが示された。

## 結論と今後
このフレームワークの単純な拡張は：

1. GとDの両方に入力として$c$を加えることで条件付き生成モデル$p(x|c)$が得られる。
2. xを入力してzを出力するための学習した近似推定は、補助ネットワークを訓練することで実行できる。これは**wake-sleep**アルゴリズムに似ているが、推定ネットワークが訓練完了後の固定Gを使って訓練できるというメリットがある。  
   <font color="LightSteelBlue"> z(ノイズ)->x(画像)が本来の流れ。画像を入力してそれに対応するノイズを取り出すようなネットワークを、訓練後にfixしたGを使って訓練できるという意味だと思う。(オートエンコーダの前半が補助ネットワーク、後半がfixedなGだとして訓練すると考えている)
   </font>
3. すべての条件付き確率$p(x_S|x_S')$を近似的にモデルできる。Sはパラメータを共有した条件付きモデルの族を訓練することで得られるxのインデックスのサブセット。基本的には、決定的なMP-DBM[11]の確率的な拡張を実装するのにadversarial netsを使える。<font color="LightSteelBlue">ここはよくわからない。MP-DBM。元はSスラッシュの記号だったがS'に変更した（出し方わからない）</font>
4. 半教師あり学習: Dまたは推定ネットからのfeatureは分類器のパフォーマンスを改善するはず。ラベル付きデータが限られているときに。<font color="LightSteelBlue">ラベルが無いデータでGとDの訓練を行い、Dの中間レイヤのfeatureを使って別のネットワークで分類を行う.分類ネットワークはラベル付きで訓練。</font>
5. 効率性の改善：  
    GとDの対戦方式でより良いものを考案することで、またはサンプルする入力zの分布をもっと良いものにすることで、訓練は高速化する。


## 1. イントロ
ディープラーニングの良いところは色々なデータの確率分布を表現する階層的モデル[2]を発見可能なこと。今の所、高次元のsensory入力をクラスラベルにマップする識別モデルが成功している[14,22]。それはバックプロパゲーションとドロップアウト、reluなどによる(勾配の振る舞いが良い)[19, 9, 10]。ディープ生成モデルは最尤推定等で現れるintractableな確率計算の近似が難しいので成功が少ない。また、reluの恩恵を生成の文脈で利用しづらい。
<font color="LightSteelBlue">なぜ？</font>
これらの困難を回避する新手法を提案する。

生成モデルGに対して敵対的に識別モデルDを置く。Dはサンプルがモデル分布から来たものか判断することを学習。Gは贋金作者で、検出されずにそれを使いたい。Dは警察で、偽造通貨を検出したい。というアナロジーで考えられる。この競争は贋金が本物特別できなくなるまで彼らの手法を改善させる。

本フレームワークは多くのモデルと最適化アルゴリズムへと具体化できる。**Gにランダムノイズを入力して、多層パーセプトロンを通してサンプルを生成させ、Dもまた多層パーセプトロンである、という特別なケースについて述べる。**このケースを**adversarial nets**と呼ぶ。このケースはバックプロップとドロップアウト[17]だけで両方のモデルを訓練し、Gからのサンプル生成はフォワードプロパゲーションだけを使う。近似推定もマルコフ連鎖も不要。

## 2. 関連研究

<font color="LightSteelBlue">**有向・無向グラフ**</font>

* 潜在変数のある有向グラフモデルの代替の１つは**restricted Boltzmann machines(RBMs)[27,16]**や**deep Boltzmann machines)(DBMs)[26]**のような潜在変数のある**無向グラフモデル**である。これらのモデル内部の相互作用は正規化されていない潜在関数(potential functions)の積を、ランダム変数のすべての状態でのグローバルな和/積分で正規化したもので表される。この量(分割関数)とその勾配は多くの自明な例を除けばintractableであるが、**Markov chain Monte Carlo(MCMC)法**によって推定できる。混合(Mixing) はMCMCに依存する学習アルゴリズムに大きな問題をもたらす。<font color="LightSteelBlue">MCMCはサンプリング手法ということぐらいしか知らない。前半に言っていることは$\frac{\prod{p(?)}}{\sum_i^{all}{x_i}}$みたいなことだと思う。</font>
* **Deep belief networks (DBNs) [16]** は１つの無向レイヤといくつかの有向レイヤのハイブリッド。高速なレイヤごとの近似学習法があるが、DBNsは有向・無向モデルともに計算の困難をもたらす。

<font color="LightSteelBlue">**代体手法**</font>

* log尤度を近似も制限（bound）もしない、**score matching[18]**や**noise-contrastive estimation(NCE)[13]**のような代わりの手法がある。どちらも学習された確率密度が正規化定数まで解析的に特定されることを要求する。<font color="LightSteelBlue">おそらく、モデルの計算式が数式として書ける必要があるという意味？</font>
多くの、潜在変数の複数のレイヤを持つ生成モデル(DBNsやDBMs)はtractableな正規化されていない確率密度を導出することすらできないことに注意。<font color="LightSteelBlue">つまり、DBNとかでは上記「代体手法」は使えない？</font>
**denoising auto-encoders[30]**や**contractive autoencoders**はRBMsに適用されたscore matchingによく似た学習ルールをもつ。NCEでは、本論文では、生成モデルのために識別訓練基準が採用されているが、別々の識別モデルをfittingするよりも生成モデル自体が生成データを固定ノイズ分布のサンプルから識別するのに使われる。<font color="LightSteelBlue">本論文でNCEも登場するが、生成モデル自体が識別も行う?</font>
NCEは固定ノイズ分布を使うので、「観測された変数の小さなサブセット上で近似的に正しい分布」というのを学習してしまった場合であっても、その後は劇的に学習が遅くなる。

<font color="LightSteelBlue">**目標の分布からサンプルを取り出す方式**</font>

* いくつかの手法は確率分布を明示的に定義しない。むしろ生成モデルが目標の分布からサンプルを取り出すように訓練する。この手法は、モデルをバックプロパゲーションで訓練できるように設計できるという利点がある。最近では**generative stochastic network(GSN)[5]**、これは**denoising auto-encoders[4]**を一般化したものであり、どちらも**parameterized**なMarkov chainを定義していると見なせる。<font color="LightSteelBlue">このparametrizedは媒介変数表示っていう意味でいいんだろうか</font>
つまり、生成的Markov chainの１ステップを実行するようなモデルのパラメータを学習するというものである。**GSNsと比べて、adversarial netsはサンプリングにMarkov chainを必要としない。** adversarial netsは生成中にフィードバックループがいらないので、要素ごとに線形なユニット(relu)[19, 9, 10]をうまく利用できる。<font color="LightSteelBlue">reluはループがあるとまずい？値が発散するからか。勾配消失。</font>
生成モデルをバックプロパゲーションで訓練するもっと最近の例は**auto-encoding variational Bayes [20]**<font color="LightSteelBlue">VAE</font> や **stochastic backpropagation [24]**。

## 3. Adversarial nets
敵対的モデリングフレームワークはモデルが両方多層パーセプトロンだと一番単純。Gのデータ$x$上の分布$p_g$を学習するために、入力ノイズ変数上の事前分布$p_z(z)$を定義する。次にデータ空間へのマッピングを$G(z;\theta_g)$で表す。ここでGはパラメータ$\theta_g$を持つ多層パーセプトロンで表現される微分可能な関数。もう一つ、スカラー１個を出力する多層パーセプトロンを$D(x; \theta_d)$で定義する。$D(x)$は$x$が$p(g)$<font color="LightSteelBlue">(Gによる分布)</font>ではなくデータから来た確率を表す。
訓練サンプルとGから来たサンプル両方に対して正しいラベルを出力する確率を最大化するようにDを訓練する。同時に、$log(1-D(G(z)))$を最小化するようにGを訓練。

つまり、**DとGは利得関数をV(G,D)として次のような２人ミニマックスゲームをプレイする。**<font color="LightSteelBlue">利得関数は各プレイヤの戦略を入力して、あるプレイヤが得ることができる利得を出力する関数だと理解している。ここではD,G両方について同時に１つの式で書いている</font>

```math
\underset{G}{min}  \underset{D}{max} V(D, G) = E_{x \sim p_{data(x)}}[logD(x)] + E_{z \sim p_z(z)} [log(1-D(G(z)))] \tag{1}

```
<font color="LightSteelBlue">G(z)で生成したデータをD()に入力。その出力結果が1にちかければ、log(0)に近づき、つまり$-\infty$に近づく。これはGにとって望ましい（Gの目的は最小化）。
逆にDの出力が0に近ければ、log(1)に近づき、つまり0に近づく。Dにとってはこちらが望ましい。(Dの目的は最大化)</font>
<font color="LightSteelBlue">
Dは本物検出器であり、本物を入力した時に1を出力したい。
第１項はDに本物を入力した場合で、解釈は上記同様。
</font>

本章では理論的解析を行い、GとDが十分な容量があれば、つまりnon-parametricな極限において、この訓練基準がデータの生成分布を復元することを示す。
<font color="LightSteelBlue">non-parametricな極限・・・ターゲットの分布を仮定しなくても訓練を無限に繰り返せば、ということかな</font>

もっと簡単な説明は**図１**参照。実践では、繰り返しの数値的アプローチでゲームを実装する。訓練の内側のループでDの最適化を完了させようとするのは計算量的に難しく、有限のデータセットでは過学習を起こす。代わりにkステップDを最適化、その後1ステップGを最適化というのを繰り返した。これによりGが十分ゆっくりと変化する限り、Dはその最適解の近傍に維持される。この戦略は**SML/PCD[31, 29]**の訓練が、学習の内部ループの一部としてマルコフ連鎖が焼却されるのを避けるために、１つの学習ステップから次までマルコフ連鎖からのサンプルを保持することと似ている。<font color="LightSteelBlue">よくわからないが、訓練ループ中でDを先に収束させたりマルコフ連鎖を何回もサンプルしてはまずいので、１ループ内では適量にするという意味に見える。</font>
手順は**Algorithm 1**参照。

><img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/b6deac06-e9fc-46f8-21a7-5c129f543070.png>
**図1**
敵対的生成ネットは識別分布がデータ生成分布(黒, 点線)$p_x$からのサンプルを<font color="LightSteelBlue">Gによる</font>生成分布$p_g(G)$(緑、実線)からのものと識別できるように、識別分布(D, 青, 破線)を同時に更新することで訓練される。<font color="LightSteelBlue">識別分布というのは識別境界のようなものだろう。
Gは自分の生成分布(緑)を（黒）と一致させたい。Dは識別分布（青）をデータ生成分布(黒)と一致させたい(?)。Dはこの図ではどうなれば理想的なんだろう。偽物に対して１を出力するので黒と逆向きのU字のようなグラフだろうか？</font>
下側の水平線は$z$がサンプルされるドメインで、このケースでは一様分布。
上の水平線は$x$のドメインの一部。上向きの矢印はマッピング$x=G(z)$がどのように変換されたサンプルに一様ではない分布$p_g$をもたらすかを示す。<font color="LightSteelBlue">変換されたサンプル＝x,例えば画像。ノイズzは一様分布だが、変換後の画像は$p_g$(緑)の分布になっている</font>
$G$は$p_g$が高密度の領域では収縮し、低密度の領域では膨張する。<font color="LightSteelBlue">？</font>
(a)：収束近くの敵対的ペアを考えている。($p_g$は$P_{data}$に似ており、Dは部分的に正しい分類器になっている)。
(b)：アルゴリズムの内部ループでDはデータから来たサンプルを識別するように訓練され、$D^*(x)= \frac{p_{data}(x)}{p_{data}(x)+ p_g(x)}$に収束する。<font color="LightSteelBlue">なぜこの式なんだろう。$p_{data}$と$p_g$が一致した時に$\frac{1}{2}$になることはわかる。</font>
(c)：Gを更新したあと、Dの勾配はもっと<font color="LightSteelBlue">正解</font>データとして分類されやすい領域を流れるようにG(z)をガイドした。<font color="LightSteelBlue">GはDの誤差の勾配を使って訓練されることを言っている</font>
(d)：数ステップ後、GとDが十分な容量をもっているなら、$p_g=p_{data}$であるために両者ともそれ以上改善できないポイントに到達する。
そのときDは２つの分布を識別できない。つまり$D(x)=\frac{1}{2}$

### 4. 論理的結果 

$z \sim p_z$のとき、GはサンプルG(z)の分布として明示的に確率分布$p_g$を定義する。ゆえに、十分な容量と訓練時間があるなら、$p_{data}$をよく推定するようにアルゴリズム１が収束してほしい。<font color="LightSteelBlue">単に、$p_g$と$p_data$が近くなってほしい。容量(capacity)というのは多層パーセプトロンのユニット数のことで、つまりモデルのパラメータ数のことを指す。多いほどモデルの表現力が高い。</font>
本章の結果はノンパラメトリックなセッティングで行われる。つまり確率密度空間での収束を調べることにより、無限の容量を持つモデルを示す。<font color="LightSteelBlue">後述されるはず。</font>

4.1: ミニマックスゲームが$p_g=p{data}$についてグローバル最適解を持つことを示す
4.2: それゆえに式1を最適化するアルゴリズム1が望ましい結果を得ることを示す

>**アルゴリズム１**
generative adversarial netsのミニバッチ確率的勾配降下法トレーニング。Dの訓練に使うステップ数であるkがハイパーパラメータ。実験では最もコスト<font color="LightSteelBlue">(計算コスト</font>の低いk=1を使った。

> * for 訓練イテレーション数 do
    * for k ステップ数 do
        * m個のノイズサンプルのミニバッチ{z1, ..., zm} をノイズの事前分布p_g(z)からサンプルする　
        * m個のサンプル{x1, ..., xm} をデータ生成分布(本物データ)p_data(x)からサンプルする　
        * Dを次の確率的勾配の上昇で更新する
        * $\nabla_{\theta_d} \frac{1}{m}\Sigma_{i=1}^{m} \bigl[ log D\bigl(x^{i}\bigr) + log \bigl(1-D(G(z^{(i)}))\bigr)$         
    * end for
    * m個のノイズサンプルのミニバッチ{z1, ..., zm} をノイズの事前分布p_g(z)からサンプルする　
    * Gを次の確率勾配の下降により更新する 
    * $\nabla_{\theta_d} \frac{1}{m}\Sigma_{i=1}^{m} log \bigl(1-D(G(z^{(i)}))\bigr)$ 
* end for
>
勾配ベースの更新は通常の勾配ベース学習規則なら何でも良い。実験ではmomentumを使った。

### 4.1. p<sub>g</sub>=p<sub>data</sub>となるグローバル最適解

任意のGに対する最適なDを考える
#### 命題 1.
固定のGに対して、最適なDは次である

```math
D_{G}^{*}(\boldsymbol{x}) = \frac{p_{data}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})} \tag{2}
```
#### 証明
任意のGに対して、Dの訓練基準はV(G, D)の最大化である

```math
\begin{align}
V(G,D) &=\int_{x} p_{data}(\boldsymbol{x}) log(D(\boldsymbol{x})) dx +\int_{x} p_{z}(\boldsymbol{z}) log(1- D(g(\boldsymbol{z}))) dz  \\
&= \int_{x} p_{data}(\boldsymbol{x}) log(D(\boldsymbol{x})) + p_{g}(\boldsymbol{x}) log(1- D(\boldsymbol{x}) dx  \tag{3}

\end{align}
```
すべての$(a,b) \in \mathbb{R}^{2} \setminus (0,0)$について、関数$y \rightarrow{a log(y)} + b log(1-y)$は区間$[0,1]$において、$\frac{a}{a+b}$のとき最大値に達する。Dは$Supp(p_{data}) \cup Supp(p_{g})$の外で定義される必要はない。証明終。□

><font color="LightSteelBlue">[メモ]
利得関数の定義$ V(D, G) = E_{x \sim p_{data(x)}}[logD(x)] + E_{z \sim p_z(z)} [log(1-D(G(z)))] \tag{1}
$を連続で考えると式(3)が得られる。
その次に述べられている$alog(y)+blog(1-y)$の性質で、aが$p_{data}$, bが$p_{g}$に対応し、yはD(x)に対応する。
したがって最適なDは式(2)となる。<br>
$Supp(p_{data}) \cup Supp(p_{g})$の外で定義される必要がないのは、Dに入力されるデータはそのどちらかの分布からかならず来るので、それ以外が現れて式(2)の分母が0になり、定義できなくなる心配はないということ。Supp(p)はpのサポート（台）で、pの確率分布が０にならない点の集合。<br>
$alog(y)+blog(1-y)$が$\frac{a}{a+b}$のとき最大値に達することは、yについて微分して0とおいて求められる。</font>
>
```math
\begin{align}
f(y) &=alog(y)+blog(1-y) \\
f'(y) &= a\frac{1}{y} - b \frac{1}{1-y} = 0\\ 
(1-y)a &= by \\
a -ay &=by \\
(a+b)y &=a \\
y &= \frac{a}{(a+b)}
\end{align} 
```
<font color="LightSteelBlue">
メモここまで。
</font>

Dの訓練の目的は条件付き確率$P(Y=y|\boldsymbol{x})$を推定するための対数尤度の最大化とも見なせる。Yはxが$p_{data}$から来た($y=1$)か$p_g$から来た($y=0$)かを示す変数。<font color="LightSteelBlue">
やはりDは本物が来た時に1を出したい。
</font>
式(1)のミニマックスゲームは次のように定式化できる。

```math
\begin{align}
C(G) &= \underset{D}{max} V(D, G) \\
&= E_{x \sim p_{data}}[logD_{G}^{*}(\boldsymbol{x})] + E_{z \sim p_z} [log(1-D_{G}^{*}(G(\boldsymbol{z})))] \\
&= E_{x \sim p_{data}}[logD_{G}^{*}(\boldsymbol{x})] + E_{x \sim p_g} [log(1-D_{G}^{*}(\boldsymbol{x}))] \\
&= E_{x \sim p_{data}} \Bigl[log\frac{p_{data}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})} \Bigr] + E_{x \sim p_g} \Bigl[log \frac{p_{g}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})} \Bigr] 
\end{align} 

```
<font color="LightSteelBlue">
式(2)の最適なDを代入する。
最後の行の第二項は前の行の第二項内にある$1-D_{G}^{*}(\boldsymbol{x})$が$1-\frac{p_{data}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})}$になることを使用。
</font>

#### 定理1.
仮想の訓練基準C(G)のグローバル最小値は$p_g=p_{data}$であるときのみ達成される。その点において、C(G)の値は$- log 4$となる。

#### 証明
式(2)より、$p_g=p_{data}$のとき、$D_{G}^{*}(\boldsymbol{x}) = \frac{1}{2}$である。
<font color="LightSteelBlue">最適なDが$\frac{p_{data}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})}$であるため。
</font>

ゆえに、$D_G^{*}=\frac{1}{2}$として式(4)を見ると、$C(G)=log \frac{1}{2} +log \frac{1}{2} = -log 4$である。これが$p_g=p_{data}$のときだけ到達できるC(G)の可能な最も良い値であることは次のようにわかる。

```math
\mathbb{E}_{x \sim p_{data}}\bigl[ -log2 \bigr] + \mathbb{E}_{x \sim p_{g}}[ -log2 \bigr] =-log4 
```
$C(G)=V(D_G^*, G)$からこれを引いて<font color="LightSteelBlue">(この値を引くことで、あとでJSダイバージェンスの式に変形できる)</font>、次が得られる

```math
C(G)=-log(4) + KL \bigl( p_{data} \parallel  \frac{p_{data} + p_g}{2}  \bigr) + KL \bigl( p_{g} \parallel  \frac{p_{data} + p_g}{2}  \bigr) \tag{5}
```
><font color="LightSteelBlue">[メモ]<br>式(4)より、</font>
>
```math
C(G)= E_{x \sim p_{data}} \Bigl[log\frac{p_{data}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})} \Bigr] + E_{x \sim p_g} \Bigl[log \frac{p_{g}(\boldsymbol{x})}{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})} \Bigr]
``` 
<font color="LightSteelBlue">であり、</font>
>
```math
C(G)= E_{x \sim p_{data}} \Bigl[ log p_{data}(\boldsymbol{x})- log[ p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})] \Bigr] + E_{x \sim p_g} \Bigl[log p_{g}(\boldsymbol{x}) -log[{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})}] \Bigr] \tag{*}
``` 
<font color="LightSteelBlue">と変形できる。ここでC(G)の可能な最も良い値である、</font>
>
```math
\mathbb{E}_{x \sim p_{data}}\bigl[ -log2 \bigr] + \mathbb{E}_{x \sim p_{g}}[ -log2 \bigr] =-log4 
```
<font color="LightSteelBlue">を式(*)から引くと、</font>
>
```math
\begin{align}
C(G) - (-log4) &= E_{x \sim p_{data}} \Bigl[ log p_{data}(\boldsymbol{x})- log[ p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})] + log2\Bigr] + E_{x \sim p_g} \Bigl[log p_{g}(\boldsymbol{x}) -log[{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})}] + log2 \Bigr] \\
&= E_{x \sim p_{data}} \Bigl[ log p_{data}(\boldsymbol{x})- \frac{log[ p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})]}{2} \Bigr] + E_{x \sim p_g} \Bigl[log p_{g}(\boldsymbol{x}) -\frac{log[{p_{data}(\boldsymbol{x}) + p_{g}(\boldsymbol{x})}]}{2} \Bigr] 
\end{align}
```
<font color="LightSteelBlue">ここからKLダイバージェンスの定義より式(5)が得られる。
KLダイバージェンス:$D_{KL}(P \parallel Q)  =  \mathbb{E}_{x \sim P}[log P(x) - log Q(x)] $</font>



ここでKLはKullback-Liebler divergence。式(5)内にモデルの分布とデータ生成過程の間のJensen-Shannon divergenceを見いだせるので、

```math
C(G)= -log(4) +2 \cdot JSD(p_{data} \parallel p_{g}) \tag{6}
```
<font color="LightSteelBlue">
JSダイバージェンス:$ D_{JS}= \frac{1}{2}D_{KL}(P \parallel \frac{P + Q}{2}) +\frac{1}{2}D_{KL}(Q \parallel 
 \frac{P + Q}{2}) $
</font>

２つの分布間のJensen-Shannon divergenceは常に非負で、２つが等しい場合のみ0となるので、$C^*=-log(4)$が$C(G)$のグローバル最小値であり、それをもたらす解は$p_g=p_{data}$、つまり生成モデルが完全にデータ生成過程をコピーできた時だけであることが示された。□


### 4.2. アルゴリズム１の収束

#### 命題2. 
GとDが十分な容量を持ち、アルゴリズム１の各ステップで、DがGに対する最適に到達でき、$p_g$が次の基準を改善するように更新されるならば

```math
\mathbb{E}_{x \sim p_{data}}[log D_G^{*}(\boldsymbol{x})]+ \mathbb{E}_{x \sim p_{g}}[log (1-D_G^{*}(\boldsymbol{x}))]
```
$p_g$は$p_{data}$に収束する。
<font color="LightSteelBlue">
Gはつねに最適なDに対して式(1)で更新する
</font>

#### 証明
$V(G,D)=U(p_g, D)$を上記の基準のように$p_g$の関数と考える。$U(p_g, D)$は$p_g$において凸である。凸関数の上限(supremum)の劣微分(subderivatives)は最大値が達成される点の関数の微分を含む。言い換えると、もし$f(x)=sup_{a \in A} f_{\alpha}(x)$であり、すべての$\alpha$について$f_{\alpha}(x)$がxにおいて凸関数ならば、$\beta = arg sup_{\alpha \in A}f_{\alpha}(x)$であるなら$\partial{f_\beta}(x) \in \partial{f}$である。
これは対応するGを与えられた最適なDにおいて、$p_g$に関する勾配降下法の更新を計算することと等価である。$sup_{D}U(p_g, D)$は定理１で示したように、$p_g$において凸であり一つのグローバル最適解があり、ゆえに$p_g$の十分に小さな更新によって$p_g$は$p_x$に収束する。証明終わり。□
<font color="LightSteelBlue">
関数の集合$f_{\alpha}(x)$等は最適じゃないものを含めたDのことで、最適なDは$sup_{a \in A}f_{\alpha}(x)$になるはず。「関数の上限の劣微分が最大値が達成される点の微分を含む」のは劣微分が微分の一般化であり、関数の上限=最適なDという関数と考えれば理解できる。Dの微分なので勾配法になる。
$sup_{D}U(p_g, D)$は定理1の通り最適なDを使った訓練基準。
</font>

実際には、adversarial netsは関数$G(z;\theta_g)$経由で$p_g$の分布の有限な族を表現し、最適化は$p_g$そのものではなく$\theta_g$に対して行う。Gの定義に多層パーセプトロンを使うことはパラメータ空間に複数の臨界点(critical points)を導入する。しかし、実践における多層パーセプトロンの優れた性能は、それらに理論的な保証がなくとも妥当なモデルであることを示している。

<font color="LightSteelBlue">
[上限(supremum)](https://mathtrain.jp/supmax):　$sup A=c \Leftrightarrow x \leq c (x \in A) $ かつ、cより小さい任意の実数rに対して$r<x$なる$x \in A$が存在する。(Aの要素はみなcより小さいが、cより少しでも小さい物を持ってくると、それよりは大きいものが存在する。)

<font color="LightSteelBlue">
[劣微分](https://ja.wikipedia.org/wiki/%E5%8A%A3%E5%BE%AE%E5%88%86):微分の概念を微分不可能な関数に拡張したもの。微分不可能な点を通り、その近傍の点とは接するか、あるいは下を通るような直線の集合を考えることができる．この直線それぞれの傾きの集合が劣微分の値となる。
[臨界点](https://ja.wikipedia.org/wiki/%E8%87%A8%E7%95%8C%E7%82%B9_(%E6%95%B0%E5%AD%A6)):微分が 0となる定義域内の任意の値。
</font>

## 5. 実験

* **MNIST[23], the Toronto Face Database
(TFD) [28], CIFAR-10 [21]**でadversarial netsを訓練した。
* Gは**relu[19, 9]とsigmoid**の混合、Dは**maxout[10]**を活性化関数に使った。
* Dはdropout[17]も使った。
* 理論的にはdropoutやそれ以外のノイズをGの中間レイヤに入れても構わないが今回は入力(一番下のレイヤ)だけにした。

* Gが生成したサンプルに対して**Gaussian Parzen window**をfittingすることで$p_g$のもとでのテストデータの確率を推定し、分布$p_g$のもとでの対数尤度を示す。<font color="LightSteelBlue">Gの生成サンプルでGaussian Parzen windowをフィッティングして、フィットした結果の$p_g$からテストデータが出てきそうかどうか(本物のデータの分布$p_{data}$に近づいていれば「出てきそう」となる)を対数尤度で示す。</font>

>**表1**:Parzen window-based 対数尤度の推定
MNISTの数値はテストセットのサンプルの対数尤度の平均で、平均の標準偏差(standard error)はサンプルをまたいで計算。TFDは、データセットの各foldのバリデーションセットを使って異なるσを選び、データセットのfoldsをまたいで標準偏差を計算。TFDでは、σは各foldでクロスバリデーションされ各foldの平均対数尤度が計算される。MNISTについては、二値ではなく実数のデータセットを使った異なるモデルに対して比較している。<font color="LightSteelBlue">他のモデルは実数のMNISTを使った？</font>
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/5327d2c3-13d2-f480-5ae1-59bd7c3f455d.png>
<font color="LightSteelBlue">尤度であるので高いほうが良い。高いほうが訓練データの分布を捉えられている。</font>


* ガウス分布の$\sigma$はバリデーションセットでのクロスバリデーションで決めた。この方法は**Breuleux et al. [8]**で導入され、exactな尤度が計算できない生成モデルで使われている[25, 3, 5]。<font color="LightSteelBlue">Gの入力のことか、Parzenのことか、</font>
この手法で尤度推定すると分散が大きくなり高次元空間ではうまくいかないが、現状では最も良い手法。
尤度の推定はできず、サンプルできる生成モデルというこの進歩は、そのようなモデルに対する評価手法の研究をさらに進める動機となる。

* **図2と3**で訓練後のGから得られたサンプルを示す。既存手法より良いサンプルとは言わないが、最低でも、そこそこ良い手法と互角だろう。adversarialフレームワークの潜在能力を示している。
><img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/3fe3d309-4ba7-3122-ad47-6507f8ba13d2.png>
**図2**：モデルからのサンプル
右端の列は、隣のサンプルに最も近い訓練サンプルであり、モデルが訓練データを丸暗記していないことを示している。サンプルの選択はランダムであり恣意的ではない。多くのディープ生成モデルの場合と異なり、これらの画像はモデルの分布からの実際のサンプルであり、隠れ層のユニットからのサンプルによる条件付き平均ではない。
さらに、これらはMarkov chain mixingに依存しないので、サンプルが共起していない(uncorrelated)。
a) MNIST, b) TFD, c) CIFAR-10 (fully connected model), d) CIFAR-10 (convolutional D and “deconvolutional” G)

><img src= https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/3eb68776-c501-09ac-1eaf-b0db876c0aa3.png>
**図3**
完全なモデルのz空間における座標の間を線形補間することで得られる数字。<font color="LightSteelBlue">入力のzをある値からある値へと線形補完で変えた時にモデルから得られる出力サンプル。</font>


## 6. 利点と欠点
**欠点：**

1. $p_g(\boldsymbol{x})$の明示的な表現がないこと
2. DがGと同期しないといけない(Dを更新せずにGの訓練が進みすぎてはならない。特に"ヘルベチカシナリオ"(Gが$p_{data}$のモデリングに多様性をもたせようと、多くのzを同じxに対応させてしまう)を避けるために。これはBoltzmann machineのnegative chainsが学習ステップ間で更新され続けなければならないことと同様。<font color="LightSteelBlue">モードコラプスのこと</font>

**利点：**

1. Markov chainがいらない。勾配を得るのにバックプロップだけ使用し、学習中に推定(inference)がいらない。(主に計算量的な利点である)
2. モデルに多様な関数を使える。**表２**に本手法とその他の生成モデルを比較する
3. 本手法はGがデータから直接更新されるのではなく、Dを通した勾配のみで更新されるため統計的な利点があるかもしれない(**入力の要素が直接Gのパラメータにコピーされることがない**)。
4. 縮退した分布(degenerate distributions)であってもシャープな表現ができる。（マルコフ連鎖ベースではchainがモードの間をmixできるようにぼやけた分布である必要がある）<font color="LightSteelBlue">縮退した分布というのは、混ざった、不明な分布ということだろうか。人工データでない場合は多くのデータが混ざった分布だと思う。</font>

**表2**
生成モデルの挑戦
モデルを伴う主要な手法と、deep生成モデルが直面する困難の概要。
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296108/bd9a605b-1ce3-186d-833a-1158932bc9e1.png>