GAN階段性小結(損失函數、收斂性分析、訓練技巧、應用「高解析度、domain2domain」、研究方向)
對於GAN的研究已經有了一段時間,有以下感覺:
1.感覺趕了一個晚班車,新思路很難找到了,再往下研究就需要很深入了2.在圖像領域已經有了大量的工作,效果很不錯;而在自然語言領域,目前來說效果並不顯著(當然目前CV本來發展就領先於NLP)
3.接下來會結合實驗室的優勢,在與強化學習的結合、對話生成、VQA上做進一步研究
4.我會對GAN領域的各個方面逐步寫總結,做一個類似tutorial的文檔,幫助大家快速了解GAN,感覺它已經是一個基本的組件一樣,不用那麼高大上
以前看論文總是在PDF上草草總結,時間一久基本就都忘了,只能記個大概,這是做研究的大忌,也是老師經常強調的一點,接下來我們定期把看過的論文總結髮布在知乎專欄,用來督促自己
總結的時候,我會把別人的總結精簡,再加上我自己的理解,這樣站在巨人的肩膀上速度會快一些,分析也會更加深入一些,同時該有的引用和參考我都把原作者的鏈接放在下面
希望可以交流分享,督促自己,方便別人
這篇文章是發給老師和師兄後,再次進行了充實,之前寫的很簡陋,如有問題多多交流
GAN相對RBMs、DBMs、DBMs、VAE的優勢
RBMs, DBNs and DBMs all have the difficulties of intractable partition functions or intractable posterior distributions, which thus use the approximation methods to learn the models.
Variational Autoencoders (VAE), a directed model, which can be trained with gradient-based optimization methods. But VAEs are trained by maximizing the variational lower bound, which may lead to the blurry problem of generated images.
GAN為何備受關注
第一,從理論上來講,生成模型是用來逼近真實數據分布,傳統的生成模型如貝葉斯模型、變分自動編碼器等,但在過去十多年,這些技術還是沒辦法逼近真實的、維度很高的數據分布,圖像生成仍是一個很難的任務,一直到 GAN 的出現。
第二個影響就是讓研究人員在研究 AI 時有了更新的思路,「它教育了我們這一批研究者,是不是在一系列深度學習演算法的設計中考慮引入對抗式思想、怎麼引入、又該如何適當的引入,進而提高傳統 AI 演算法執行任務的表現。」
第三個就是可以基於少量數據進行半監督的學習。大家都知道要訓練神經網路需要龐大的數據量,GAN 提供了一個新的思路—訓練GAN 來模擬真實數據分布。在有些情況下,研究人員會遇到真實數據不夠,或是難以取得數據的情況,此時可以試圖訓練 GAN 來模擬真實數據分布,如果模擬得夠好,GAN 就可以生成更多的訓練數據,這有助於解決深度學習小數據量的難題
GAN的應用
一是完全從無到有的生成:輸入隨機產生的雜訊變數,輸出人、動物等各種圖像,這類應用難度較高;另一個則是利用 GAN 來改進已有或傳統的 AI 應用,例如超解析度、照片自動美化、機器翻譯等,難度相對較低,效果也很實用。
參考:
GAN在2017年實現四大突破,未來可能對計算機圖形學產生衝擊1.GAN的損失函數(或稱目標函數)
[1] Generative adversarial network. NIPS 2014
[2] f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization. NIPS 2016
[3] Least Squares Generative Adversarial Networks. ICCV 2017
[4] Towards Principled Methods for Training Generative Adversarial Networks. ICLR 2017
[5] Improved Training of Wasserstein GANs. NIPS 2017
[6] Energy-based Generative Adversarial Network. ICLR 2017
[7] MAGAN: Margin Adaptation for Generative Adversarial Networks. Arxiv 2017
[8] Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities. Arxiv 2017
[9] BEGAN: Boundary Equilibrium Generative Adversarial Networks. Arxiv 2017
GAN:
由定義的判別器loss可得到最優判別器,而在最優判別器下,生成器loss可等價變化為最小化真實分布Pr和生成分布Pg之間的JS散度。當我們越訓練判別器的時候,它就越接近最優,最小化生成器loss就越接近於最小化兩個分布之間的JS散度。GAN就是通過這種方式使生成器生成的樣本更加接近真實樣本,無論在真實性上還是多樣性上。
JS散度存在一個問題:當兩個分布有所重疊且重疊不可忽略時,兩個分布越接近,它們之間的JS散度越小。當它們之間完全沒有重疊部分或者重疊部分可以忽略不計的時候,它們的JS散度是一個固定常數log2。而兩個分布都是高維數據,不重疊或者重疊部分可以忽略不計的可能性很大,這就導致無論它們相距多遠,JS散度都是常數log2,最終導致生成器的梯度近似為0,梯度消失。【註:此處需要一些測度論、拓撲學知識】
這就說明判別器訓練的太好,準確地說一開始訓練的太好會導致梯度為0問題, Ian goodfellow之後提出一個新的損失函數公式:Ex~Pg[-logD(x)],為得是避免判別器一開始就訓練地太好導致生成器的更新梯度為0,但是通過分析,在最優判別器下,生成器loss是KL(Pg||Pr)-2JS(Pr||Pg),由此帶來兩個問題:一是兩個散度一個要拉近分布,一個要拉遠分布,導致梯度很不穩定;二是KL散度不對稱,KL(Pg||Pr)和KL(Pr||Pg)重視的損失不一致,前者更加重視準確性輕視多樣性,後者更加重視多樣性而輕視準確性,這就說明KL散度本身對多樣性和準確性懲罰不平衡,前一種KL散度會導致mode collapse問題。
參考:
鄭華濱:令人拍案叫絕的Wasserstein GANf-GAN:
證明生成對抗網路是變分散度估計方法(variational divergence estimation)的一種特例,任何f-divergence都可以用來訓練基於神經網路的生成模型。分析了各種散度在訓練複雜度和生成樣本質量的情況。
參考:
深度學習筆記十:生成對抗網路再思考f-GAN - CSDN博客LS-GAN(least square GAN):
The relation between LSGANs and f-divergence:在最優判別器下,生成器loss的優化相當於最小化Pd + Pg和2Pg的the Pearson X2 divergence(if a, b, and c satisfy the condtions of b - c = 1 and b - a = 2.此處a、b、c是生成器loss公式中的常量)。
本文認為普通GAN使用sigmoid cross entropy loss function作為判別器loss,得到的決策邊界會使一些生成樣本處於決策邊界positive side,而這些生成樣本其實仍舊離真實樣本存在比較遠的距離,所以用這些被判別器判別為真實樣本的生成樣本更新生成器會產生梯度彌散。本文通過引入the least square loss function,可以移動生成樣本到決策邊界,因為the least square loss function會懲罰那些處於決策邊界positive side且距離決策邊界很遠的生成樣本,即使是正確分類到negative side,但是如果距離決策邊界遠,仍舊會往被決策邊界拉。主要貢獻:通過引入the least square loss function來減弱梯度彌散,但是並未解決mode collapse問題。
Towards Principled Methods for Training Generative Adversarial Networks:
解釋了以下四個問題(是WGAN、WGAN-GP的前作):
- Why do updates get worse as the discriminator gets better? Both in the original and the new cost function. ?
- Why is GAN training massively unstable? ?
- Is the new cost function following a similar divergence to the JSD? If so, what are its ?properties? ?
- Is there a way to avoid some of these issues? ?
WGAN-GP:
Wasserstein距離又叫Earth-Mover(EM)距離,相對於KL散度、JS散度的優越性在於,即使兩個分布沒有重疊,Wasserstein距離仍然能夠反映它們的遠近。KL散度和JS散度是突變的,要麼最大要麼最小,Wasserstein距離卻是平滑的,如果我們要用梯度下降法優化這個參數,前兩者根本提供不了梯度,Wasserstein距離卻可以。類似地,在高維空間中如果兩個分布不重疊或者重疊部分可忽略,則KL散度和JS散度既反映不了遠近,也提供不了梯度,但是Wasserstein距離卻可以提供有意義的梯度。
根據Wasserstein距離推導出來的公式如下:
通過gradient penalty來實現對判別器進行Lipschitz限制(體現為在整個樣本空間上,要求判別器函數D(x)梯度的Lp- Norm不大於一個有限的常數K,但是整個樣本空間上採樣,由於所謂的維度災難問題,如果要通過採樣的方式在圖片或自然語言這樣的高維樣本空間中估計期望值,所需樣本量是指數級的,實際上沒法做到。論文作者提出,其實沒必要在整個樣本空間上施加Lipschitz限制,只要重點抓住生成樣本集中區域、真實樣本集中區域以及夾在它們中間的區域就行了),得到如下公式(簡單取K為1):
解決的問題:
- 極大的「在數值上」減弱了梯度消失的問題,而且其損失函數的值可以用來指示訓練過程(此處我說「在數值上」是因為在考慮是否可以做「探索梯度組成和意義的研究,進而想到新的梯度來源和更精細、更準確的梯度更新機制,比如哪層更新哪層」);
- 雖然在同樣的架構下WGAN-GP與DCGAN生成的圖片效果差不多,但是WGAN-GP更具健壯性,別的距離產生的損失函數針對不同的數據集需要精心設計架構、使用技巧和G-D訓練比例,否則會崩潰,但是WGAN-GP基本上都可以訓練好,這個也是WGAN-GP在工程實現上更加流行的原因,相比於其他論文結果復現能力和泛化能力更加強大;
- 至於mode collapse,論文中作者僅僅提及根據實驗結果應該是解決了
注意:
- 判別器最後一層去掉sigmoid函數。因為原始GAN的判別器做的是真假二分類任務,所以最後一層是sigmoid,但是現在WGAN-GP中的判別器做的是近似擬合Wasserstein距離,屬於回歸任務,所以要把最後一層的sigmoid拿掉。
- 判別器的模型架構中不能使用Batch Normalization,由於我們是對每個樣本獨立地施加梯度懲罰,Batch Normalization會引入同個batch中不同樣本的相互依賴關係。如果需要的話,可以選擇其他normalization方法,如Layer Normalization、Weight Normalization和Instance Normalization,這些方法就不會引入樣本之間的依賴。論文推薦的是Layer Normalization。
參考:
生成式對抗網路GAN有哪些最新的發展,可以實際應用到哪些場景中?Energy-based GAN:
Energy-based GAN將Discriminator視作一個energy function(negative evaluation function),即這個函數值越小代表data越真實。利用自編碼器AE作為discriminator(energy function)。
EBGAN的generator與其他gan網路都一樣,不同的是其discriminator是一個AE。EBGAN將discriminator的輸入輸出求一個rescontruction error,那這個error就是discriminator的輸出,也即所說的energy。我們希望對於真實data的重建誤差小,即energy小,即discriminator的輸出小,而同時希望由generaor生成的圖片的energy小。這與之前的gan的判別器希望真圖輸出大,假圖大正好相反。
損失函數公式如下:
D的損失函數要最大化D(G(z)), 也就是要抬高下圖中的藍色點對應的曲線,但是如果沒有margin的約束,可以無限制的抬高,所以我們需要一個m,即margin,就是當抬高到m這個距離後就沒有懲罰了,所以此時loss就將不再忙著抬高,而是去將real對應的曲線也即D(x)拉小。generator做的事情就很好理解了,因為real對應的energy是小的,所以希望生成的圖片的energy也是小的。
Pulling-away(用於訓練生成器,希望它可以生成多樣性的樣本)。具體來說對於一個batch中的樣本xi和xj,我們將其帶入discriminator的編碼器得到編碼後的結果ei和ej,然後比較其餘弦相似度,希望這個相似性越小越好。
解決的問題:
- 從能量函數角度對GAN做了解釋,文章指出如此解釋,基於能量函數的理論和技巧就可以引入過來,但是就實驗結果來看生成的圖片質量相對於DCGAN並沒有提升,尤其指出可生成高清圖片,但是高清圖片內容不具辨識性
- 提出了度量樣本多樣性的指標,進而促進生成器生成的樣本更具多樣性,解決mode collapse問題
MAGAN:
紅、綠線分別表示EBGAN中m取值為70和30的情況。橫軸為迭代次數,縱軸為energy取對數。上面圖為真實圖片energy,下面圖為生成圖片energy。生成圖中上下兩條黑線分別為m=log70和m=log30結果。Discriminator希望生成圖的energy高,而從生成圖看出EBGAN確實做到了這件事,使得生成圖的energy在黑線的上下遊走。然後觀察真實圖在前面幾個epoch中energy並沒有下降太多。
從能量函數角度解釋,參照energy-based GAN,使m變為一個浮動的值,作用:隨著m的逐步減小,無論真實圖片還是生成圖片的能量函數值都在減小。
LSGAN:
同樣從能量函數角度解釋,希望真實圖片能力小,生成圖片能量大,如下圖所示,當真實圖片和生成圖片差異大的時候(可以用hidden layer來量相似度),就需要訓練判別器使生成圖片的能量大,當真實圖片和生成圖片差異小的時候,判別器輸出生成圖片的能量就需要小一些。
BE-GAN:
最開始Kt 為0,模型只想把真圖的energy下降,那什麼時候想把生成圖的energy拉高呢?即當
的時候,γ是一個超參數。就是說當生成圖的energy / 真實圖的energy 小於γ時,Discriminator才想要將生成圖的energy變大。所以不會一直考慮生成圖的reconstruction error,而是當生成圖的reconstruction error太小的時候,discriminator才考慮將生成圖的reconstruction error變大。γ調整如下:
參考:
Hung-yi Lee2.收斂的理論分析及訓練技巧
[10] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks. DCGAN
[11] Improved Techniques for Training GANs. NIPS 2016
[12] Unrolled Generative Adversarial Networks. ICLR 2017
[13] Mode Regularized Generative Adversarial Networks. ICLR 2017
[14] Generalization and Equilibrium in Generative Adversarial Nets (GANs). ICML 2017
[15] Gradient descent GAN optimization is locally stable. NIPS 2017
[16] Approximation and Convergence Properties of Generative Adversarial Learning. NIPS 2017
[17] Stabilizing Training of Generative Adversarial Networks through Regularization. NIPS 2017
[18] Spectral Normalization for Generative Adversarial Networks. ICLR 2018
DCGAN:
對判別器和生成器的激活函數、架構進行大量實驗,最終找到一組效果好、訓練穩定的設置來提升訓練效果,但是實際上是治標不治本,沒有徹底解決問題。如添加batchnorm、修改生成器和判別器的激活函數等
Improved Techniques for training GANs:
Feature matching:利用中間層feature map增加了一個新的損失函數,加速了平衡的收斂
minibatch discrimination:解決mode collapse問題
historical averaging:使參數更新時候不會忘了之前由其他樣本得出的經驗
one-sided label smoothing:reduce the vulnerability of neural networks to adversarial examples
virtual batch normalization:batch normalization的缺陷是造成神經網路對於輸入樣本的輸出值極大依賴於在同一個batch中的其他樣本,該技巧選擇了固定的batch生成statistics來normalize輸入樣本
Unrolled GAN:
這篇論文做的更加理論一點,它們提出了一種新的 loss。這種 loss 並不是通過改變模型 architecture 來引入的,也不是一種新的 metric,而是一種 gradient-based loss。如果說我們過去做 gradient descent training 時候,是讓 gradient 進行改變,讓其他模型參數保持不變的話;那麼他們提出的這種 loss,被叫做 surrogate loss,則是要能基於一階 gradient 改變後的其他模型參數的變化再去改變二階甚至高階 gradient——從而是一種 gradient dynamics 信息。這件事其實並不是很常見,因為在我們大部分神經網路和機器學習的訓練中,我們都只會用到一階導數信息。然而,二階或者高階導數的出發點其實是我們真正的不 approximate 的求解就應該是不斷的 unroll 出 gradient 的或者是 exact solution 的。而這件事就是非常難算的。所以可以認為,這篇論文提出的這種 loss 是一種中間態,tradeoff。所以這篇論文我認為最重要的貢獻就是,它指出了也強調了高階信息在神經網路或者在機器學習中的重要性(主要是神經網路)。順著這個思路思考下去,應該也能為其他模型和其他任務帶來一些新的解決方法。
Mode regularized GAN:
主要貢獻是提出了兩種 regularizers 去提高訓練穩定性和解決 missing modes。這兩種 regularizers 可以很方便地用在任何 GAN 網路中(不比如 DCGAN,或者 Goodfellow 原版的 MLP GAN)。
第一個 regularizer 是:與其讓生成網路 G 直接從 noise vector z 映射到樣本空間,我們可以讓 z 從一個樣本空間先映射過來,也就是有一個 z = encoder(X) 的過程,從而再,G(encoder(X))。這樣的好處是,reconstruction 過程會增加額外的學習信息,使得生成網路生成出來的 fake data(generated sample)不再那樣容易被判別網路 D 一下子識別出來。這樣 D 和 G 就都能一直有 loss/gradient 去將訓練過程較為穩定地進行下去,從而達到了讓 GAN 訓練更加穩定的效果。另一方面,因為 encoder(X) 保證了 X 和映射後的 X 的空間的對應性,也就可以保證了生成網路能覆蓋所有樣本空間的樣本 modes,也就理論上保證了 missing modes 問題的減少。
第二個 regularizer 是在此基礎上,我們提出了一種 manifold-diffusion GAN(MDGAN),它將 reconstruction loss 提取成單獨的一步去訓練——第一步 manifold step 就是去做 G(Enc(X)) 和 X 的訓練,減少這兩者之間的差別;第二步 diffusion 就是讓 G(Enc(X)) 再和 G(z) 做拉近。這樣從模型訓練的過程,形象的理解就是,先把兩個分布的 「形狀」 調整好,再把兩個分布的距離拉近。
為了能評價我們的 regularizers 的效果,我們在 inception score 的基礎上提出了一種 MODE score。我們發現,Inception score 有一種很不好的現象是,即使 GAN 的網路訓練塌了(即會產生完全是噪音,肉眼根本不 perceptual 的圖片),inception score 的分數也會很高(很高應該代表的是圖片非常像真實樣本)。這是不 make sense 的。而我們提出的 MODE score,將塌了的情況用一種額外的 metric 衡量進來——從而使得最終的 MODE score 是基於樣本質量和樣本 mode(塌了的話,mode 就非常差),兩個角度。
以上兩篇參考:
ICLR 2017 有什麼值得關注的亮點?3.GAN圖像領域的應用(構建適應應用的神經網路結構)
3.1 圖像超解析度
[19] Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks. NIPS 2015
[20] Stacked Generative Adversarial Networks. CVPR 2017 (該論文未讀,之後再總結)
[21] Progressive growing of GANs for improved quality,stability,and variation. ICLR 2018
LAPGAN:
從低解析度起步,通過不斷生成高解析度下的殘差,累加得到高解析度。圖中z1,z2,z3是不同解析度的輸入。網路結構圖如下:
PG-GAN:
先訓一個小解析度的圖像生成,訓好了之後再逐步過渡到更高解析度的圖像。然後穩定訓練當前解析度,再逐步過渡到下一個更高的解析度。更具體點來說,當處於fade in(或者說progressive growing)階段的時候,上一解析度(4*4)會通過resize+conv操作得到跟下一解析度(8*8)同樣大小的輸出,然後兩部分做加權,再通過to_rgb操作得到最終的輸出。這樣做的一個好處是它可以充分利用上個解析度訓練的結果,通過緩慢的過渡(w逐漸增大),使得訓練生成下一解析度的網路更加穩定。網路結構圖如下:
上面展示的是Generator的growing階段。下圖是Discriminator的growing,它跟Generator的類似,差別在於一個是上採樣,一個是下採樣。
解決的問題:除了解決了解析度的問題,還提出了一些不引入新參數的tricks(如解決mode collapse、normalization增加訓練穩定性)
參考:
Gapeng:Progressive Growing GANs簡介+PyTorch復現3.2 Domain2Domian (隱變數、標籤、短句、圖像)
[22] InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets. NIPS 2016
[23] Coupled Generative Adversarial Networks. NIPS 2016
[24] Unsupervised Image-to-Image Translation Networks. NIPS 2017 CoupleGANVAE
Domain2DomainPDF百度網盤鏈接:
鏈接:https://pan.baidu.com/s/1Pm-MeZKNprczhO17ZiP9dA 密碼:c32p
InfoGAN:
Domain2domain的PDF中
CoupleGAN:
Domain2domain的PDF中
CoupleGANVAE:
Domain2domain的PDF中
[25] Image-to-Image Translation with Conditional Adversarial Networks. CVPR 2017 Pix2Pix
[26] Conditional Image Synthesis with Auxiliary Classifier GANs. ICML 2017
[27] CVAE-GAN: Fine-Grained Image Generation through Asymmetric Training. ICCV 2017
[28] CGANS with projection discriminator. ICLR 2018
pix2pix:
Domain2domain的PDF中
CVAE-GAN:
未寫待續
[29] Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial Networks. ICCV 2017
[30] Unsupervised Dual Learning for Image-to-Image Translation. ICCV 2017
[31] Learning to Discover Cross-Domain Relations with Generative Adversarial Networks. ICML 2017 DiscoGAN
CycleGAN、DualGAN、DiscoGAN是一套網路結構和思想:
Domain2domain的PDF中
[32] Generative Semantic Manipulation with Contrasting GAN. CMU. Eric. Xing
[33] High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs. Nvidia. Arxiv. 2017
Contrasting GAN:
做到了實例替換(替換前後實例動作不變),但是存在諸多問題,比如替換後的實例大小無法改變、替換後的實例邊緣有十分明顯的切割痕迹,這是由於文章採用的方法造成的,無法避免
HR-CGAN:
這篇文章採用multi-scale的Discriminator和coarse2fine的Generator能夠有效幫助提升生成的質量,同時增加instance map解決同類object之間邊緣不清晰的問題
[34] Adversarially learned inference. ICLR 2017
[35] Adversarial feature learning. ICLR 2017
AIL、BiGAN是一套網路結構和思想
Domain2domain的PDF中
[36] Tag Disentangled Generative Adversarial Network for Object Image Re-rendering. IJCAI 2017
[37] StackGAN: Text to Photo-Realistic Image Synthesis with Stacked Generative Adversarial Networks. ICCV 2017
[38] Plug & Play Generative Networks: Conditional Iterative Generation of Images in Latent Space. CVPR 2017
[39] Triple Generative Adversarial Nets. NIPS 2017
[40] Triangle Generative Adversarial Networks. NIPS 2017
TD-GAN:
Domain2domain的PDF中
PPGAN:
未完待續
TripleGAN:
Domain2domain的PDF中
TriangleGAN:
Domain2domain的PDF中
參考:
Gapeng:GAN做圖像翻譯的一點總結4. GAN的對抗思想被其他深度學習應用引入(目標檢測、對抗攻擊、信息檢索、貝葉斯理論、Capsule、強化學習、離散輸出「NLP」、自編碼器、半監督學習。上學期主要研究的方向是domain2domain,以下方向尚未涉獵)
[41] Perceptual Generative Adversarial Networks for Small Object Detection. CVPR 2017
[42] Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey. Arxiv. 2018.2.26
[43] IRGAN: A Minimax Game for Unifying Generative and Discriminative Information Retrieval Models. SIGIR 2017
[44] Bayesian GAN. NIPS 2017
[45] CapsuleGAN: Generative Adversarial Capsule Network. Arxiv. 2018.2.17
[46] Generative Adversarial Imitation Learning. NIPS 2016
[47] SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient. AAAI 2017
[48] Boundary Seeking GANs. ICLR 2018
推薦閱讀:
TAG:生成對抗網路GAN | 深度學習DeepLearning | 計算機視覺 |