1. 程式人生 > >GAN(Generative Adversarial Nets)研究進展

GAN(Generative Adversarial Nets)研究進展

想與大家分享的是影象生成中一些工作。

這些工作都基於一大類模型,Generative Adversarial Networks(GAN)。從模型名稱上甚至都可以看出一些發展軌跡:GAN->CGAN->LAPGAN->DCGAN->GRAN->VAEGAN 等等。所以,在今天的分享中,我會盡量以梳理論文和論文之間的聯絡、區別為主。

會涉及的論文有:

1.《Generative Adversarial Nets》

2.《Conditional Generative Adversarial Nets》

3.《Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks》

4.《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》

5.《Autoencoding beyond pixels using a learned similarity metric》

6.《Generating Images with Recurrent Adversarial Networks》

重要文獻:

1.《Generative Adversarial Nets》

2.《Conditional Generative Adversarial Nets》

3.《Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks》

4.《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》

5.《Generating Images with Recurrent Adversarial Networks》

6.《Autoencoding beyond pixels using a learned similarity metric》

GAN[1]->CGAN[2]->LAPGAN[3]->DCGAN[4]->GRAN[5]->VAEGAN[6]

影象生成最重要的是生成模型的構建,當今的影象生成模型主要可分為兩類:

一類是基於Variational AutoEncoder(VAE),其優點是改變了AutoEncoder中很容易過擬合的reconstruction error based learning的方法,將學習目標定為儘可能滿足某個預設的先驗分佈的性質。然而這種需要“假設先驗分佈”的方式仍然有侷限。

第二類生成模型Generative Adversial Networks(GAN)則較好地避開了這個問題,GAN啟發自博弈論中的納什均衡,其包含一對模型——一個生成模型G和一個判別模型D。用一個很經典的比喻就是,生成模型G就像小偷,要儘可能地提高自己的偷竊手段去欺騙身為警察的判別模型D,而D也要儘可能地訓練總計的火眼金睛去防止被欺騙。所以,真正的學習過程就變成了一種生成模型G和判別模型D之間的競爭過程——隨機從真實樣本和由生成模型G生成出的“假樣本”中取一個,讓判別模型D去判斷是否為真。

從上面的描述可以看出,GAN這種競爭的方式不再要求一個假設的資料分佈,也就是說不需要構想p(x)再作修正,而是直接進行取樣,從而真正達到了理論上可以完全逼近真實資料,這也是GAN最大的優勢。但這種不需要於先建模的方式的缺點就在於太過自由,對於較大的圖片,較多畫素點的情形,基於簡單的GAN的方式就太不可控了,在GAN[1]中,每次學習引數的更新過程,被設定為D更新k回,G才更新1回,也是出於類似的考慮。



為了解決GAN太過自由的這個問題,比較直接的想法就是給GAN加上一些約束,於是便有了Conditional Generative Adversarial Nets(CGAN)[2]。這篇文章的工作就是在D和G的建模當中分別加入條件變數y,後來這一方式也被證明非常有效。

為了改進GAN太過自由導致對較大圖片,較多畫素點處理的劣勢,另外一個想法是不要讓GAN一次完成全部任務,而是一次生成一部分,分多次生成一張完整的圖片。這跟2015年DeepMind大火的一個工作DRAW的思路一致。DRAW提出一種sequential VAE的模型,讓機器一點點“寫”出一個數字。於是LAPGAN[3]採用了這個思想,在GAN基礎上做出了改進。在實現sequential version的方式上,LAPGAN採用的是Laplacian Pyramid的方式,因此起名為LAPGAN。這個方式主要的操作是downsample與upsample,優勢在於每次只考慮樣本和生成影象之間的殘差的學習效果,某種程度上與Residual Network的思想一致。針對殘差的逼近和學習,相對更加容易。LAPGAN的學習過程如下:


如上圖,當影象畫素點較多時,便需要進行Laplacian Pyramid過程,並且在每個process step時(每一個Pyramid level),傳給D的只是針對殘差的compare。另一方面,當pixel足夠小的時候,也就是最後邊的step,則不再需要進行upsample和downsample的過程,這時給D的傳送則是未經處理的樣本和生成的影象了。Facebook指出,這樣的sequential方式減少了每一次GAN需要學習的內容,也就從而增大了GAN的學習能力。值得注意的是,LAPGAN其實也是LAPCGAN,都是conditional的。另外,每一步的GAN都是independent trained。與此同時,這篇論文還總結出了許多工程上的經驗,都在他們的project page中。

DCGAN【4】這篇論文的提出看似並沒有很大創新,但其實它的開原始碼現在被使用和借鑑的頻率最高。這一切必須歸功於這篇工作中比LAPGAN更robust的工程經驗分享。也就是說,DCGAN,Deep Convolutional Generative Adversarial Networks,這個工作【4】,只出了許多對於GAN這種不穩定學習方式重要的架構設計和針對CNN這種網路的特定經驗,重點來看:

比如他們提出既然之前已經被提出的stride convolutional networks作為一個可以fully differentiable的generator G,在GAN中會變現得更加可控和穩定。又比如,本來Facebook的LAPGAN中指出Batch Normalization(BN)被用在GAN中的D上會導致整個學習的collapse,但是DCGAN中則成功將BN用在了G和D上。這些工程性的突破無疑是更多人選擇DCGAN這一工作作為base的重要原因。


另一方面,他們在visualize generative models也有許多貢獻。比如他們學習了ICLR 2016論文《Generating Sentences From a Continuous Space》中的interpolate space的方式,將生成圖片中的hidden states都展示出來,可以看出影象逐漸演變的過程。

與此同時,他們也將Vector Arithmatic運用在了影象上,得到了如下的一些結果:


論文【5】與DRAW也有許多相似點。上文提到,在改進GAN時,可以考慮sequential version。Sequential models的好處便是可以讓下一步的model利用上一步得到的結果,在之前的結果上作出修改,類似於一種conditional的方式。為了讓GAN也擁有這種sequential的能力,論文【5】將GAN與LSTM結合,稱為GRAN,使其分割成了step by step的過程。每一個step中,就像LSTM中的hidden state一樣,這裡也有h_{c,t}。與簡單的LSTM不同的是,這裡決定每個cell內容的不僅僅是hidden states,還有一個“hidden of prior”,是專屬於GAN中的生成模型G的一個先驗h_z。h_z和h_{c,t}拼接之後共同決定當前step的update——what to draw。


並且,因為完美利用了gradient of convolutional的性質,這個改造後的GRAN可以將每次的求導看作一次decoding過程,而每次的convolution等操作變成encoding過程,也就可以因此對應到DRAW中的decoder和encoder部分。而GAN和DRAW最大的不同之處在於。GAN中在計算loss時是在hidden space中,而DRAW是在原始input space中。

在實驗中,這篇論文也確實證明了sequential models(multi-step)生成的影象比single step的要好。只不過,generative models的評估標準還比較模糊,所以實驗結果上並不能很好地和以前的GAN或者相關方法做比較。這篇論文的另一個創世便是提出了一種GAN這種特殊generative models的評價方法。過去用於評價generated image的Parzen windows或者manual evaluation等方法都各有各的缺點。這篇論文提出,既然本來就是競爭模型,可以讓兩組GAN互相“競爭”評價。互為評委,互為選手。


最後說一下缺點,現階段來看這個模型的可擴充套件性還不是很好,儘管說是step by step的,在最後的實驗中也只用了幾個discrete step做實驗。

上文說的都是通過程式設計sequential versions來減弱GAN的自由性。但是還有一篇工作【6】是反其道而行之的,將GAN中學出來的feature重新運用在VAE的reconstruction objective中,從而結合了GAN和VAE的優點,於是這個工作被稱為VAEGAN。



具體的,因為在以前的reconstruction objective中,都用到的是element-wise distance metrics。這種metrics其實對於很多hidden feature/space的學習並不好。這篇論文的根本idea就是利用GAN中Discriminator D,使其當作learned similarity measure,來替代/彌補reconstruction objective中的這種similarity measure component。D學習到的similarity measure便可以被認為是一種high-level representation中的measurement。這個思想還是很有擴充套件性的。