天天看點

GAN階段性小結(損失函數、收斂性分析、訓練技巧、應用“高分辨率、domain2domain”、研究方向)

gan階段性小結(損失函數、收斂性分析、訓練技巧、應用“高分辨率、domain2domain”、研究方向)

對于gan的研究已經有了一段時間,有以下感覺:

1.感覺趕了一個晚班車,新思路很難找到了,再往下研究就需要很深入了

2.在圖像領域已經有了大量的工作,效果很不錯;而在自然語言領域,目前來說效果并不顯著(當然目前cv本來發展就領先于nlp)

3.接下來會結合實驗室的優勢,在與強化學習的結合、對話生成、vqa上做進一步研究

4.我會對gan領域的各個方面逐漸寫總結,做一個類似tutorial的文檔,幫助大家快速了解gan,感覺它已經是一個基本的元件一樣,不用那麼高大上

以前看論文總是在pdf上草草總結,時間一久基本就都忘了,隻能記個大概,這是做研究的大忌,也是老師經常強調的一點,接下來我們定期把看過的論文總結釋出在知乎專欄,用來督促自己

總結的時候,我會把别人的總結精簡,再加上我自己的了解,這樣站在巨人的肩膀上速度會快一些,分析也會更加深入一些,同時該有的引用和參考我都把原作者的連結放在下面

希望可以交流分享,督促自己,友善别人

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 的出現。

第二個影響就是讓研究人員在研究 ai 時有了更新的思路,“它教育了我們這一批研究者,是不是在一系列深度學習算法的設計中考慮引入對抗式思想、怎麼引入、又該如何适當的引入,進而提高傳統 ai 算法執行任務的表現。”

第三個就是可以基于少量資料進行半監督的學習。大家都知道要訓練神經網絡需要龐大的資料量,gan 提供了一個新的思路—訓練gan 來模拟真實資料分布。在有些情況下,研究人員會遇到真實資料不夠,或是難以取得資料的情況,此時可以試圖訓練 gan 來模拟真實資料分布,如果模拟得夠好,gan 就可以生成更多的訓練資料,這有助于解決深度學習小資料量的難題

一是完全從無到有的生成:輸入随機産生的噪聲變量,輸出人、動物等各種圖像,這類應用難度較高;另一個則是利用 gan 來改進已有或傳統的 ai 應用,例如超分辨率、照片自動美化、機器翻譯等,難度相對較低,效果也很實用。

[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

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問題。

f-gan:

證明生成對抗網絡是變分散度估計方法(variational divergence estimation)的一種特例,任何f-divergence都可以用來訓練基于神經網絡的生成模型。分析了各種散度在訓練複雜度和生成樣本品質的情況。

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。

參考:

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變大。γ調整如下:

[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 就非常差),兩個角度。

[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增加訓練穩定性)

[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百度網盤連結:

infogan:

domain2domain的pdf中

couplegan:

coupleganvae:

[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:

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 201​​7 discogan

cyclegan、dualgan、discogan是一套網絡結構和思想:

[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是一套網絡結構和思想

[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:

ppgan:

未完待續

triplegan:

trianglegan:

[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