2020年8月22日 星期六

InfoGAN 簡介

在 GAN 中我們用隨機的 z 來生成資料,這樣的問題是我們無法透過控制 z 來控制生成的資料特徵。下圖為 InfoGAN 文章 [1] 中的例子:

 
右上角的圖是調整 z 的第一個維度的結果,而我們完全看不出來有什麼區別。另外三張圖是 InfoGAN 的結果,可以看出每個維度都能控制生成的手寫數字特徵。

InfoGAN 的架構

下圖取自 UC Berkeley 的 CS294-158 Lecture 5 & 6 Implicit Models

InfoGAN Architecture

與 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