李宏毅學習筆記35.GAN.05.fGAN: General Framework of GAN

簡介

上節在講原文GAN的時候,提到我們實際是在用Discriminator來衡量兩個數據的分佈之間的JS divergence,那能不能是其他類型的divergence來衡量真實數據和生成數據之間的差距?又如何進行衡量?(雖然在實作上用不同divergence結果沒有很大差別)
公式輸入請參考:在線Latex公式

f-divergence

任意的divergence都可以用來衡量真實數據和生成數據之間的差距,用f-divergence進行衡量的算法就叫fGAN。先來看看f-divergence的概念:
PP and QQ are two distributions. p(x)p(x) and q(x)q(x) are the probability of sampling xx.
Df(PQ)=xq(x)f(p(x)q(x))dx,f is convex, f(1)=0D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx,\text{f is convex, }f(1)=0
如果兩個分佈相同,那麼f-divergence的值應該相等,我們來驗證一下:
p(x)=q(x) for all xp(x)=q(x) \text{ for all } x
Df(PQ)=xq(x)f(p(x)q(x))dx=0D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx=0
因爲:p(x)q(x)=1,f(1)=0\cfrac{p(x)}{q(x)}=1,f(1)=0,所以divergence爲0,是最小的f-divergence。證明如下:
Because f is convex,因此有(右邊是左邊的lower bound):
Df(PQ)=xq(x)f(p(x)q(x))dxf(xq(x)p(x)q(x)dx)D_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx\ge f\left(\int_xq(x)\cfrac{p(x)}{q(x)}dx\right)
f(xq(x)p(x)q(x)dx)=f(xp(x)dx)=f(1)=0f\left(\int_xq(x)\cfrac{p(x)}{q(x)}dx\right)=f\left(\int_xp(x)dx\right)=f(1)=0
如果ff是不同的函數,就得到不同的divergence,例如:f(x)=xlogxf(x)=xlogx
Df(PQ)=xq(x)p(x)q(x)log(p(x)q(x))dx=xp(x)log(p(x)q(x))dxD_f(P||Q)=\int_xq(x)\cfrac{p(x)}{q(x)}log\left(\cfrac{p(x)}{q(x)}\right)dx\\ =\int_xp(x)log\left(\cfrac{p(x)}{q(x)}\right)dx
這個是KL divergence。
例如:f(x)=logxf(x)=-logx
Df(PQ)=xq(x)(log(p(x)q(x)))dx=xq(x)log(q(x)p(x))dxD_f(P||Q)=\int_xq(x)\left(-log\left(\cfrac{p(x)}{q(x)}\right)\right)dx\\ =\int_xq(x)log\left(\cfrac{q(x)}{p(x)}\right)dx
這個是Reverse KL divergence。
例如:f(x)=(x1)2f(x)=(x-1)^2
Df(PQ)=xq(x)(p(x)q(x)1)2dx=x(p(x)q(x))2q(x)dxD_f(P||Q)=\int_xq(x)\left(\cfrac{p(x)}{q(x)}-1\right)^2dx\\ =\int_x\cfrac{\left(p(x)-q(x)\right)^2}{q(x)}dx
這個是Chi Square divergence。

Fenchel Conjugate

每一個ff凸函數都有一個Conjugate函數記爲ff^*,公式如下:
f(t)=maxxdom(f){xtf(x)}f^*(t)=\underset{x\in dom(f)}{\text{max}}\{xt-f(x)\}
窮舉所有的t,xt,x,然後找到能使得xtf(x)xt-f(x)最大的t,xt,x
比較笨的窮舉法如下:
在這裏插入圖片描述
另外一種方法:函數xtf(x)xt-f(x)是直線,我們帶不同的xx得到不同的直線,例如下面有三條直線:
在這裏插入圖片描述
然後找不同的t對應的最大值。(就是所有直線的upper bound)
在這裏插入圖片描述
上面的紅線無論你如何畫,最後都是convex的。
看例子,假設:f(x)=xlogxf(x)=xlogx,把x=0.1,x=1,x=10x=0.1,x=1,x=10,圖片如下:
在這裏插入圖片描述
紅線最後接近
f(t)=exp(t1)f^*(t)=exp(t-1)
下面是數學證明,假設f(x)=xlogxf(x)=xlogx
則:
f(t)=maxxdom(f){xtf(x)}=maxxdom(f){xtxlogx}(1)f^*(t)=\underset{x\in dom(f)}{\text{max}}\{xt-f(x)\}=\underset{x\in dom(f)}{\text{max}}\{xt-xlogx\}\tag1
令上式中xtxlogx=g(x), Given t, find x maximizing g(x)xt-xlogx=g(x)\text{, Given }t\text{, find }x\text{ maximizing }g(x)
求極值,就是對xx求導數等於0:
g(x)=tlogx1=0x=exp(t1)g'(x)=t-logx-1=0\\ x=exp(t-1)
把上面內容代入公式(1):
f(t)=xtxlogx=exp(t1)×texp(t1)×(t1)=exp(t1)f^*(t)=xt-xlogx=exp(t-1)\times t-exp(t-1)\times(t-1)=exp(t-1)
一般化後:
(f)=f(f^*)^*=f
講這麼多,下面看下上面兩節內容和GAN的關係

Connection with GAN

通過上面的推導我們知道f(t)f^*(t)f(x)f(x)互爲Conjugate,寫爲:
f(t)=maxxdom(f){xtf(x)}f(x)=maxtdom(f){xtf(t)}f^*(t)=\underset{x\in dom(f)}{\text{max}}\{xt-f(x)\}\leftarrow\rightarrow f(x)=\underset{t\in dom(f^*)}{\text{max}}\{xt-f^*(t)\}
這兩個相互Conjugate的convex的函數有什麼特別?我們繼續看。
Df(PQ)=xq(x)f(p(x)q(x))dx=xq(x)(maxtdom(f){p(x)q(x)tf(t)})dxD_f(P||Q)=\int_xq(x)f\left(\cfrac{p(x)}{q(x)}\right)dx\\ =\int_xq(x)\left(\underset{t\in dom(f^*)}{\text{max}}\left\{\cfrac{p(x)}{q(x)}t-f^*(t)\right\}\right)dx
我們用函數D(x)D(x)代替tt,使得輸入x,輸出爲t,使得上面{}中的值最大,替換後,就找到了Df(PQ)D_f(P||Q)的lower bound
Df(PQ)xq(x)(p(x)q(x)D(x)f(D(x)))dx=xp(x)D(x)dxxq(x)f(D(x))dxD_f(P||Q)\ge\int_xq(x)\left(\cfrac{p(x)}{q(x)}D(x)-f^*(D(x))\right)dx\\ =\int_xp(x)D(x)dx-\int_xq(x)f^*(D(x))dx
當我們找的函數D(x)D(x)是最好的,那麼就可以逼近Df(PQ)D_f(P||Q)
Df(PQ)maxDxp(x)D(x)dxxq(x)f(D(x))dxD_f(P||Q)\approx\underset{D}{\text{max}}\int_xp(x)D(x)dx-\int_xq(x)f^*(D(x))dx
積分可以寫成期望值:
=maxD{ExP[D(x)]ExQ[f(D(x))]}=\underset{D}{\text{max}}\{E_{x\sim P}[D(x)]-E_{x\sim Q}[f^*(D(x))]\}
接下來我們把P=Pdata,Q=PGP=P_{data},Q=P_G,則有:
Df(PdataPG)=maxD{ExPdata[D(x)]ExPG[f(D(x))]}D_f(P_{data}||P_G)=\underset{D}{\text{max}}\{E_{x\sim P_{data}}[D(x)]-E_{x\sim P_G}[f^*(D(x))]\}
把上面的式子可以帶回求Generator的公式:
G=argminGDf(PdataPG)=argminGmaxD{ExPdata[D(x)]ExPG[f(D(x))]}=argminGmaxDV(G,D)\begin{aligned}G^* &=arg\underset{G}{\text{min}}D_f(P_{data}||P_G)\\ &=arg\underset{G}{\text{min}}\underset{D}{\text{max}}\{E_{x\sim P_{data}}[D(x)]-E_{x\sim P_G}[f^*(D(x))]\}\\ &=arg\underset{G}{\text{min}}\underset{D}{\text{max}}V(G,D)\end{aligned}
也就是說我們可以優化不同的divergence(https://arxiv.org/pdf/1606.00709.pdf)
在這裏插入圖片描述
在這裏插入圖片描述
可以用來解決Mode Collapse

Mode Collapse

當我們的GAN模型Training with too many iterations……
有些人臉就會比較像,除了一些顏色不太一樣
在這裏插入圖片描述

從數學上說就是我們的生成對象的分佈越來越小了
在這裏插入圖片描述

Mode Dropping

就是真實數據有兩簇或者多簇,但是生成數據只能生成其中一簇:
在這裏插入圖片描述
例如下面的人臉,一個循環只有白種人,一個循環只有黃種人,一個循環中只有黑人。
在這裏插入圖片描述

問題分析

傳統的做法類似MLE實際上是最小化KL divergence,可以看到生成數據的分佈是在真實數據中間,這也是爲什麼真實數據這麼模糊
在這裏插入圖片描述
如果換成Reverse KL Divergence:
在這裏插入圖片描述
可以看到解決了模糊的問題,但是會出現Mode Dropping的問題。
因此選擇不同的divergence對於GAN很重要。

解決Mode Collapse

Unsemble:訓練多個generator,然後隨機調一個generator來生成圖片,這樣結果就會比較diverse。
Train a set of generators: {G1,G2,,GN}\{G_1,G_2,…,G_N\}
To generate an image Random pick a generator GiG_i. Use GiG_i generate the image.
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章