在 GAN 中我們用隨機的 z 來生成資料,這樣的問題是我們無法透過控制 z 來控制生成的資料特徵。下圖為 InfoGAN 文章 [1] 中的例子:
右上角的圖是調整 z 的第一個維度的結果,而我們完全看不出來有什麼區別。另外三張圖是 InfoGAN 的結果,可以看出每個維度都能控制生成的手寫數字特徵。
與 GAN 不同的是 generator 的輸入分成了 z (noise) 跟 c (code),再加上一個 classifier Q 來判斷生成的圖片對應的是哪一個 code。這麼做的目的是讓 generator 在生成資料時能夠將此 code 也考慮進去,從資訊理論的角度來說就是要讓 code c 與生成的圖片 G(z, c) 的 mutual information I(c; G(z,c)) 越大越好,也就是說 loss function 為以下式子:
\[
\underset{G}{min}\ \underset{D}{max}\ V(D, G) - \lambda I (c; G(z,c))
\]下面一段簡單推導此 mutual information 與 InfoGAN 架構的關係。
Mutual information 及 InfoGAN 架構
我們假設 generator G 生成的資料為 y,也就是 G(z,c) = y。接下來我們要從 mutual information I(c; G(z,c)) = I(c;y) 開始推導:
\[
I(c;y) = H(y) - H(c|y)
\\
= \int p(y,c)\ log(\frac{p(y,c)}{p(y)})\ dydc + H(y)
\\
= \int p(y)p(c|y)\ log(p(c|y) \frac{q(c|y)}{q(c|y)})\ dydc + H(y)
\\
= \int p(y)p(c|y)\ log(\frac{p(c|y)}{q(c|y)})\ dydc + \int p(y)p(c|y)\ log(q(c|y))\ dydc + H(y)
\\
= E_{y \sim p(y)}[D_{KL}(p(c|y) || q(c|y)))] + E_{y \sim p(y), c \sim p(c)}[log(q(c|y))] + H(y)
\\
\geq E_{y \sim p(y), c \sim p(c)}[log(q(c|y))] + H(y)
\]
因此我們只要能夠最佳化 \(E_{y \sim p(y), c \sim p(c)}[log(q(c|y))] + H(y)\),便能最佳化 mutual information I(c; G(z,c))。
這個網站可以找到詳細的原始碼,我們可以看出在 mutual_info_loss 函數中,輸入為 c 以及 c_given_x,而 c_given_x 的機率便是 q(y|c),也就是 Q 這個網路的輸出。
參考資料
[1] InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets, Xi Chen, Yan Duan, Rein Houthooft, John Schulman, Ilya Sutskever, Pieter Abbeel, 2016