論文まとめ：Learning Plannable Representations with Causal infoGAN

# はじめに  
NIPS2018にacceptされている T. Kurutach らの「Learning Plannable Representations with Causal infoGAN」をまとめてみた。

NIPSの該当ページはこちら。
https://nips.cc/Conferences/2018/Schedule?showEvent=11834

開催前なので論文は貼られてないが、arXivには既にあがってる。
https://arxiv.org/abs/1807.09341

# 概要  
1. infoGANの仕組みを使ってロボットなどの軌跡を推定するモデル



# まずはinfoGANのまとめ 
### infoGANの特徴
MNISTのデータで考える。

vanilaなGANではノイズzからMNISTの０〜９を生成するものの、zをどういった値にしたら特定の数字（例えば５）を生成できるかは、いろいろ試さないとわからない。

(0.3, 4.5, -2.2)にしたら５っぽい。(0.2, 4.5, -2.2)にしたら更に５っぽくなった・・・etc。

infoGANではzのそれぞれの次元が数字の１、２、・・・５、・・・９に対応するように学習させることが目的。

### GANのminmaxな式 
まずGANでお決まりの minmax な式。

```math
\min_G \max_D V(G,D) = \min_G \max_D \mathbb{E}_{o \sim P_{data}} [\log D(o)] + \mathbb{E}_{z \sim P_{noise}} [\log (1 - D(G(z)))]
```

### infoGANのminmaxな式
infoGANではこれに正則化項を加える。まず入力をノイズzと状態 $s \sim P(s)$ に分離した上で

```math
\min_G \max_D V(G,D) - \lambda I (s;G(z,s))
```

とする。

ここで $I (s;G(z,s))$ は相互情報量で

```math
I (s;G(z,s)) = H(s) - H(s \ | \ G(z,s)) = H(G(z,s)) - H(G(z,s) \ | \ s)
```

一番右側で考えると、$G(z,s)$ のエントロピーと、s を知った後の $G(z,s)$ のエントロピーとの差。

# 相互情報量項の意味するところ  

例えば、s を指定せずに $(z,s)$ をGeneratorに入力すると、出力される $G(z,s)$ は以下の図のように分布の広がりが大きくなる。

<img width="540" alt="c_infogan_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/116706/bc9145d9-7347-cdf7-b3d8-d129ad760fbe.png">


一方、 s を指定して $G(z, s_i)$ をGeneratorに入力すると、出力する $G(z,s_i)$ の分布は下図のように限定された領域になる。

<img width="555" alt="c_infogan_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/116706/984068eb-a4ea-42f5-cbf1-4524f0ca1af1.png">

そうすると s を指定した場合のエントロピー $H(G(z,s) \ | \ s)$ は s を指定しない場合のエントロピー $H(G(z,s))$ より大きくなるだろう。

見方を変えると、前者と後者のエントロピーの差

```math
I (s;G(z,s)) = H(G(z,s)) - H(G(z,s) \ | \ s)
```

を大きくするには、入力 s によって出力の $G(z, s)$ がある限定された領域になればなるほどいい。

s を10種類の値にすると、それぞれの $s_i$ がMNISTの数字に相当するように学習されるだろう。

# 変分な相互情報量  

```math
I (s;G(z,s)) = H(s) - H(s \ | \ G(z,s))
```

で考える。$H(s \ | \ G(z,s))$ が直接求まらないので、代わりに変分な値を使う。<font color='blue'>（数式間違ってたら連絡下さい）</font>

```math
\begin{eqnarray}
I (s;G(z,s)) &=& H(s) - H(s \ | \ G(z,s)) \\
  &=& \mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log P(s'|x)]] + H(s) \\
 &=& \mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log \frac{P(s'|x)}{Q(s'|x)} Q(s'|x) ]] + H(s) \\
 &=& \mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log \frac{P(s'|x)}{Q(s'|x)} + \log Q(s'|x) ]] + H(s) \\
 &=& \mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log \frac{P(s'|x)}{Q(s'|x)}] + \mathbb{E}_{s' \sim P(s|x)}[\log Q(s'|x) ]] + H(s) \\
 &=& \mathbb{E}_{x \sim G(z,s)}[D_{KL}(P(\cdot | x) \ \| \ Q(\cdot | x)) + \mathbb{E}_{s' \sim P(s|x)}[\log Q(s'|x) ]] + H(s) \\
\end{eqnarray}
```

ここで KL-divergenceは正なので、これを取っ払って

```math
\begin{eqnarray}
I (s;G(z,s)) &=&  \mathbb{E}_{x \sim G(z,s)}[D_{KL}(P(\cdot | x) \ \| \ Q(\cdot | x)) + \mathbb{E}_{s' \sim P(s|x)}[\log Q(s'|x) ]] + H(s) \\
&\geq&  \mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log Q(s'|x) ]] + H(s) \\
\end{eqnarray}
```

$H(s)$ をとりあえず固定して考えると $I (s;G(z,s))$ を最大化させるには 

```math
\mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log Q(s'|x) ]]
```

を最大化させればいい。 結局

```math
\begin{eqnarray}
I (s;G(z,s)) &\geq& \mathbb{E}_{x \sim G(z,s)}[\mathbb{E}_{s' \sim P(s|x)}[\log Q(s'|x) ]] + H(s) \\
&=& L_I (G,Q)
\end{eqnarray}
```

となるので、変分下限 $L_I (G,Q)$ を最大化させることで $I (s;G(z,s))$ を最大化させる。

$Q(s'|x)$ は実用上、Discriminatorから分岐させたモデルとする。



# causal infoGAN の目的関数  


# reference  
[1] Xi. Chen, et. al. "InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets"

[2] L. Maaten, et. al. "Visualizing Data using t-SNE"

<font color='red'>書きかけ</font>