2020年6月7日 星期日

從 Divergence 的選擇談找出最好的 Discriminator 判別網路(生成對抗網路 Generative Adversarial Network 簡介)

本文內容主要取自於 Ian Goodfellow 的著作 Generative Adversarial Nets [1]。

生成對抗網路 Generative Adversarial Network 的數學模型

生成對抗網路的數學模型為以下式子: \[ \underset{G}{min}\ \underset{D}{max}\ V(G,D) = E_{x\sim p_{data}(x)}[log\ D(x)] + E_{z\sim p_{z}(z)}[log(1 - D(G(z)))] \] 式子中 D(x) 為 Discriminator,而 G(z) 是生成網路 Generator,上式的概念是要讓 Discriminator 能判別出其輸入 x 究竟是真正的資料還是由 Generator 生成出的資料 G(z),因此 \(\underset{D}{max}\ V(D,G)\) 的意思就是要讓 Discriminator 將 x 與 G(z) 分得最開,也就是 x 與 G(z) 兩個分布的距離最遠。

最佳的判別網路 Discriminator

從上式中可看出最佳的 Discriminator 為以下式子: \[ arg\ \underset{D}{max}\ V(G,D) = arg\ \underset{D}{max}\ E_{x\sim p_{data}(x)}[log\ D(x)] + E_{z\sim p_{z}(z)}[log(1 - D(G(z)))] \\ V(G,D) = E_{x\sim p_{data}(x)}[log\ D(x)] + E_{z\sim p_{z}(z)}[log(1 - D(G(z)))] \\ = \int_{x} p_{data}(x)\ log D(x) dx + \int_{z} p(z)\ log(1-D(G(z)))dz \\ = \int_{x} p_{data}(x)\ log D(x) dx + \int_{x} p_g(x)\ log(1-D(x))dx \\ = \int_{x} [p_{data}(x)\ log D(x) + p_g(x)\ log(1-D(x))]dx \] 上式中 \(p(z)\) 可以被 \(p_g(x)\) 代換是因為 z 是 Generator 的隨機生成種子,而生成出來的東西跟 x 是屬於同一種類型的資料(像是圖片、文字等等)。

上面的式子可以簡化成這種形式: \[ f(D) = a\ log(D) + b\ log(1-D) \] 導數求極值: \[ \frac{df(D)}{dD} = \frac{a}{D} - \frac{b}{1-D} = 0 \\ D^* = \frac{a}{a+b} = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)} \] 得到 \(D^*\) 以後我們把它代回 V(G,D): \[ V(G, D^*) = E_{x\sim p_{data}(x)}[log\ D^*(x)] + E_{x\sim p_{g}(x)}[log(1 - D^*(x))] \\ = E_{x\sim p_{data}(x)}[log\ \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}] + E_{x\sim p_{g}(x)}[log(1 - \frac{p_{data}(x)}{p_{data}(x) + p_g(x)})] \\ = E_{x\sim p_{data}(x)}[log\ \frac{p_{data}(x)}{p_{data}(x) + p_g(x)}] + E_{x\sim p_{g}(x)}[log(\frac{p_{g}(x)}{p_{data}(x) + p_g(x)})] \\ = \int_{x} p_{data}(x)\ log \frac{p_{data}(x)}{p_{data}(x) + p_g(x)} dx + \int_{x} p_{g}(x)\ log \frac{p_{g}(x)}{p_{data}(x) + p_g(x)} dx \\ = \int_{x} p_{data}(x)\ log \frac{p_{data}(x) / 2}{(p_{data}(x) + p_g(x)) / 2} dx + \int_{x} p_{g}(x)\ log \frac{p_{g}(x)/2}{(p_{data}(x) + p_g(x))/2} dx \\ = -2log2 + D_{KL}(p_{data}\parallel (\frac{p_{data}+p_g}{2})) + D_{KL}(p_{g}\parallel (\frac{p_{data}+p_g}{2})) \\ = -2log2 + 2 D_{JS}(p_{data} \parallel p_g) \] 上式中的 \(D_{JS}\) 為 Jensen-Shannon Divergence。我們的結論是在 GAN 中找最佳的 Discriminator 時,我們其實是想要讓 \(p_{data}\) 與 \(p_g\) 的 Jensen-Shannon Divergence 最小。

不同 Divergence 選擇的差別

在這一段我們想要比較三種 Divergence 的區別:Kullback-Leibler Divergence、Reverse Kullback-Leibler Divergence、以及 Jensen-Shannon Divergence。需要複習 Kullback-Leibler Divergence 的讀者可以先看我以前的文章。以下先列出三種 Divergence 的定義: \[ D_{KL}(p\parallel q) = E_{x\sim p}[ln(\frac{p}{q})] \\ D_{reverse-KL}(p\parallel q) = D_{KL}(q\parallel p) = E_{x\sim q}[ln(\frac{q}{p})] \\ D_{JS}(p || q) = \frac{1}{2} D_{KL}(p\parallel \frac{p+q}{2}) + \frac{1}{2} D_{KL}(q\parallel \frac{p+q}{2}) \] 在這裡拿 Ian Goodfollow 的 Deep Learning 書中的內容來解釋 Kullback-Leibler Divergence 與 Reverse Kullback-Leibler Divergence 的差別。先看以下這張書中 3.13 的截圖:

KL divergence vs. reverse KL divergence

這張是個示意圖表示當 p(x) 為兩個 Gaussian distribution 組成時,而 q(x) 為一個 Gaussian distribution。當目標是最小化 p 與 q 的 Kullback-Leibler Divergence 時,我們想要盡量在 p(x) 大的時候讓 q(x) 也大,因此會形成上面左圖的樣子,也就是 q 反而在 p(x) 小的時候機率比較高。這或許可以解釋為什麼在 GAN 以前生成模型中,如果目標是讓 KL Divergence 最小時,生成出來的圖片都是比較模糊的。另一方面當選擇 Reverse KL Divergence 時,我們會盡量在 p(x) 小的時候讓 q(x) 也小,因此結果會向上面右圖,q(x) 只去近似其中一個 Gaussian distribution。

GAN 選擇了 Jensen-Shannon Divergence 可以看成是上面兩者的折衷方案;但後續許多團隊研究了很多不同的 Divergence 發現不管怎麼選擇仍然尚未找到完美的選擇。最後用 Ian Goodfellow 在 2016 NIPS tutorial [2] 中的一段話做結:
I've realized that it's possible to use other divergences, and several papers by other people have been published on how to use other divergences. Now I no longer think that the choice of divergence explains why we get really good samples and don't get good likelihood.

參考資料

[1] Generative Adversarial Nets, Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio
[2] Ian Goodfellow: Generative Adversarial Networks

沒有留言:

張貼留言