GAN 简介
GAN
原理:
?GAN 的主要靈感來源于博弈論中零和博弈的思想,應用到深度學習神經網絡上來說,就是通過生成網絡 G(Generator)和判別網絡 D(Discriminator)不斷博弈,進而使 G 學習到數據的分布,如果用到圖片生成上,則訓練完成后,G 可以從一段隨機數中生成逼真的圖像。
- G 是一個生成網絡,其輸入為一個隨機噪音,在訓練中捕獲真實數據的分布,從而生成盡可能真實的數據并讓 D 犯錯
- D 是一個判別網絡,判別生成的數據是不是“真實的”。它的輸入參數是 x,輸出 D(x) 代表 x 為真實數據的概率,如果為 1,就代表 100% 是真實的數據,而輸出為 0,就代表不可能是真實的數據
為了從數據 x 中學習到生成器的分布 pgp_gpg?,我們定義一個輸入噪音變量 pz(z)p_z(z)pz?(z),然后將其映射到數據空間得到 G(z;θg)G(z;\theta_g)G(z;θg?)。D(x;θd)D(x; \theta_d)D(x;θd?) 輸出是一個數,代表 xxx 來自真實數據而不是 pgp_gpg? 的概率。
min?Gmax?DV(D,G)=Ex~pdata(x)[log(D(x))]+Ez~pz(z)[log(1?D(G(z)))]①訓練D來最大化辨別能力:max?DV(D,G)=Ex~pdata(x)[log(D(x))]+Ez~pz(z)[log(1?D(G(z)))]②訓練G來最小化log(1?D(G(z))):min?GV(D,G)=Ez~pz(z)[log(1?D(G(z)))]③\begin{aligned} &\min_G \max_D V(D,G) = E_{x~p_{data}(x)}[log(D(x))]+E_{z~p_{z}(z)}[log(1?D(G(z)))] \qquad ①\\ &訓練 D 來最大化辨別能力:\quad \max_D V(D,G)=E_{x~p_{data}(x)}[log(D(x))]+E_{z~p_z(z)}[log(1?D(G(z)))]\qquad② \\ &訓練 G 來最小化log(1?D(G(z))):\quad \min_G V(D,G)=E_{z~p_z(z)}[log(1?D(G(z)))]\qquad③ \\ \end{aligned} ?Gmin?Dmax?V(D,G)=Ex~pdata?(x)?[log(D(x))]+Ez~pz?(z)?[log(1?D(G(z)))]①訓練D來最大化辨別能力:Dmax?V(D,G)=Ex~pdata?(x)?[log(D(x))]+Ez~pz?(z)?[log(1?D(G(z)))]②訓練G來最小化log(1?D(G(z))):Gmin?V(D,G)=Ez~pz?(z)?[log(1?D(G(z)))]③?
注:max?D\max_DmaxD? 表示令 D(x)D(x)D(x) 盡可能大以便找出真實數據,而令 D(G(z))D(G(z))D(G(z)) 盡可能小以便區分出偽造數據,最后導致 ② 式盡可能大;min?G\min_GminG? 表示令 D(G(z))D(G(z))D(G(z)) 盡可能大從而混淆判別器,最后導致 ③ 式盡可能小。訓練早期,G 的擬合程度很低,D 可以被訓練得很好,導致 log(1-D(G(z))) 趨于 0,進而使回傳梯度很小,導致訓練效果不行。因此,比起 minimize log(1-D(G(z))),maximize log(D(G(z))) 會更好。
注:將隨機噪音 z 映射到 x 上(x = G(z)),使 x 盡可能擬合真實數據 data 的分布。綠色實線為生成的數據 p_g,黑色點為真實數據 p_data,藍色虛線為判別器 D。每次訓練 G 都使 p_g 盡可能擬合 p_data,而判別器 D 則會調整從而盡可能將 p_g 和 p_data 區分開。當 D(x) = 0.5 時,判別器將無法區分真假。
算法:
小結:
命題1:當 G 被固定住時,最優的辨別器 D 如下
DG?(x)=pdata(x)pdata(x)+pg(x)=12∈[0,1]D_G^*(x) = \frac{p_{data}(x)}{p_{data}(x)+p_g(x)} = \frac{1}{2} \in [0, 1] DG??(x)=pdata?(x)+pg?(x)pdata?(x)?=21?∈[0,1]
證明:
Ex~pf(x)=∫xp(x)f(x)dxx=g(z)V(G,D)=∫xpdata(x)log?(D(x))dx+∫zpz(z)log?(1?D(g(z)))dz=∫xpdata(x)log?(D(x))+pg(x)log?(1?D(x))dx記:V(G,D)=∫xa?log?(y)+b?log?(1?y)dx則函數y→a?log?(y)+b?log?(1?y)在[0,1]里最大值為:aa+b=pdata(x)pdata(x)+pg(x)\begin{aligned} &E_{x~p}f(x) = \int_xp(x)f(x)dx \qquad x = g(z) \\ &V(G, D) = \int_x p_{data}(x)\log{(D(x))}dx + \int_zp_z(z)\log{(1-D(g(z)))}dz = \int_x p_{data}(x)\log{(D(x))} + p_g(x)\log{(1-D(x))}dx\\ &記:V(G, D) = \int_x a \cdot \log(y) + b \cdot \log{(1-y)} dx\qquad \\ &則函數 \quad y \rightarrow a \cdot \log(y) + b \cdot \log{(1-y)} 在 [0, 1]里最大值為:\quad \frac{a}{a+b} = \frac{p_{data}(x)}{p_{data}(x)+p_g(x)} \end{aligned} ?Ex~p?f(x)=∫x?p(x)f(x)dxx=g(z)V(G,D)=∫x?pdata?(x)log(D(x))dx+∫z?pz?(z)log(1?D(g(z)))dz=∫x?pdata?(x)log(D(x))+pg?(x)log(1?D(x))dx記:V(G,D)=∫x?a?log(y)+b?log(1?y)dx則函數y→a?log(y)+b?log(1?y)在[0,1]里最大值為:a+ba?=pdata?(x)+pg?(x)pdata?(x)??
定理1:當且僅當 pgp_gpg? = pdatap_{data}pdata? 時, C(G) 取得全局最小值,為 -log4
C(G)=max?DV(G,D)=Ex~pdata[log(DG?(x))]+Ez~pz[log(1?DG?(G(z)))]=Ex~pdata[log(DG?(x))]+Ex~pg[log(1?DG?(x)]=Ex~pdata[logpdata(x)pdata(x)+pg(x)]+Ex~pg[logpg(x)pdata(x)+pg(x)]\begin{aligned} C(G) &= \max_DV(G, D) = E_{x~p_{data}}[log(D_G^*(x))]+E_{z~p_z}[log(1?D_G^*(G(z)))]\\ &= E_{x~p_{data}}[log(D_G^*(x))]+E_{x~p_g}[log(1?D_G^*(x)] = E_{x~p_{data}}[log\frac{p_{data}(x)}{p_{data}(x)+ p_g(x)}]+E_{x~p_g}[log\frac{p_g(x)}{p_{data}(x)+ p_g(x)}]\\ \end{aligned} C(G)?=Dmax?V(G,D)=Ex~pdata??[log(DG??(x))]+Ez~pz??[log(1?DG??(G(z)))]=Ex~pdata??[log(DG??(x))]+Ex~pg??[log(1?DG??(x)]=Ex~pdata??[logpdata?(x)+pg?(x)pdata?(x)?]+Ex~pg??[logpdata?(x)+pg?(x)pg?(x)?]?
KL 散度:KL(p||q) = Ex~plog?p(x)q(x)E_{x~p}\log{\frac{p(x)}{q(x)}}Ex~p?logq(x)p(x)?
證明:
Ex~pdata[?log?2]+Ex~pg[?log?2]=?log?4,則C(G)=?log?(4)+KL(pdata∣∣pdata+pg2)+KL(pg∣∣pdata+pg2)=?log?(4)+2?JSD(pdata∣∣pg)由于JSD非負,且僅當其兩個參數相等時才為0,故,當pdata=pg時C(G)取最小值為?log?(4)\begin{aligned} &E_{x~p_{data}}[-\log2] + E_{x~p_g}[-\log2] = -\log4,則 \\ &C(G) = -\log(4) + KL(p_{data} || \frac{p_{data} + p_g}{2}) + KL(p_g || \frac{p_{data} + p_g}{2}) = -\log(4) + 2 \cdot JSD(p_{data} || p_g) \\ &由于 JSD 非負,且僅當其兩個參數相等時才為 0,故,當 p_{data} = p_g 時 C(G) 取最小值為 -\log(4) \end{aligned} ?Ex~pdata??[?log2]+Ex~pg??[?log2]=?log4,則C(G)=?log(4)+KL(pdata?∣∣2pdata?+pg??)+KL(pg?∣∣2pdata?+pg??)=?log(4)+2?JSD(pdata?∣∣pg?)由于JSD非負,且僅當其兩個參數相等時才為0,故,當pdata?=pg?時C(G)取最小值為?log(4)?
命題2:當 G 和 D 有足夠容量,且算法 1 中我們允許每一步 D 是可以達到他的最優解。那么如果我們對 G 的優化是去迭代下面這一步驟,則 p_g 會收斂到 p_{data}
Ex~pdata[log?DG?(x)]+Ex~pg[log?(1?DG?(x))]E_{x~p_{data}}[\log{D_G^*(x)}] + E_{x~p_g}[\log{(1 - D_G^*(x))}] Ex~pdata??[logDG??(x)]+Ex~pg??[log(1?DG??(x))]
優缺點:
特點:
- 相比較傳統的模型,GAN 存在兩個不同的網絡,而不是單一的網絡,并且訓練方式采用的是對抗訓練方式
- GAN 中 G 的梯度更新信息來自判別器 D,而不是來自數據樣本
優點:
- GAN 是一種生成式模型,相比較其他生成模型(玻爾茲曼機和GSNs)只用到了反向傳播,而不需要復雜的馬爾科夫鏈
- 相比其他所有模型, GAN 可以產生更加清晰、真實的樣本
對 f 期望的求導等價于對 f 自己求導 => 通過誤差的反向傳遞對 GAN 進行求解:lim?σ→0?xE?~N(0,σ2I)f(x+?)=?xf(x)\lim_{\sigma\rightarrow0}\nabla_xE_{\epsilon~N(0, \sigma^2I)}f(x+\epsilon) = \nabla_xf(x)limσ→0??x?E?~N(0,σ2I)?f(x+?)=?x?f(x)
- GAN 采用的是一種無監督學習方式訓練,可以被廣泛用在無監督學習和半監督學習領域。但卻用一個有監督學習的損失函數來做無監督學習,在訓練上會高效很多
- 相比于變分自編碼器(VAE),GANs 沒有引入任何決定性偏置( deterministic bias),變分方法引入決定性偏置。因為他們優化對數似然的下界,而不是似然度本身,這導致了 VAEs 生成的實例比 GANs 更模糊
- 相比 VAE,GANs 沒有變分下界,如果鑒別器訓練良好,那么生成器可以完美的學習到訓練樣本的分布。換句話說,GANs 是漸進一致的,而 VAE 是有偏差的
😥由于 GAN 的無監督,在生成過程中,G 就會按照自己的意思天馬行空生成一些“詭異”的圖片,可怕的是 D 還可能給一個很高的分數。這就是無監督目的性不強所導致的,所以在同年的NIPS大會上,有一篇論文 conditional GAN 就加入了監督性進去,將可控性增強,表現效果也好很多
缺點:
- 訓練GAN需要達到納什均衡,有時候可以用梯度下降法做到,但有時候做不到。我們還沒有找到很好的達到納什均衡的方法,所以訓練 GAN 相比 VAE 或者 PixelRNN 是不穩定的,但我認為在實踐中它還是比訓練玻爾茲曼機穩定的多
- GAN 不適合處理離散形式的數據,比如文本
- GAN 存在訓練不穩定、梯度消失、模式崩潰的問題(目前已解決)
🙄GAN 的目的是在高維非凸的參數空間中找到納什均衡點,GAN 的納什均衡點是一個鞍點,但是 SGD 只會找到局部極小值,因為 SGD 解決的是一個尋找最小值的問題,GAN 是一個博弈問題。同時,SGD容易震蕩,容易使GAN訓練不穩定。因此,GAN 中的優化器不常用 SGD
補充:Generative Adversarial Net、GAN(生成對抗神經網絡)原理解析、簡單理解與實驗生成對抗網絡GAN、blogs from CSDN
總結
- 上一篇: 【无标题】基于51单片机和DHT11的温
- 下一篇: android gravity 代码,a