1. 程式人生 > >乾貨 | Generative Adversarial Networks(GAN)的現有工作

乾貨 | Generative Adversarial Networks(GAN)的現有工作

今天想與大家分享的是影象生成中一些工作。這些工作都基於一大類模型,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》

GAN

既然是影象生成,就要考慮 generative models。過去的兩三年中出現的 generative models 主要可被歸於兩類。一類是基於 Variational AutoEncoder(VAE),其優點是改變了 AutoEncoder 中很容易過擬合的 reconstruction error based learning 的方法,將學習的目標變成去儘可能滿足某個預設的先驗分佈的性質。然而,可以看出,這種需要“假設先驗分佈”的方式仍然有侷限。而第二類 generative models,

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


從上面的描述中可以看出,GAN 這種競爭的方式不再要求一個假設的資料分佈,也就是說我們不用 formulate p(x),而是直接進行 sampling,從而真正達到了理論上可以完全逼近真實資料。這也是 GAN 最大的優勢

然而,everything has a price. 這種不需要預先建模的方式的缺點就是在於它太過自由了,對於較大的圖片,較多的 pixel 的情形,基於簡單 GAN 的方式就不太可控了。在 GAN[1] 中,每次學習引數的更新過程,被設為 D 更新 k 回,G 才更新 1 回,也是出於類似的考慮。


CGAN

為了解決 GAN 太過自由的這個問題,一個很自然的思想便是給 GAN 加上一點點束縛,於是便有了 Conditional Generative Adversarial Nets(CGAN)[2]。這篇工作的改進非常 straightforward,就是在 D 和 G 的建模中分別加入 conditional 變數 y。後來這一方式也被證明非常有效。


LAPGAN

另一方面,為了改進 GAN 太自由的問題,還有一個想法就是不要讓 GAN 一次完成全部任務,而是一次生成一部分,分多次生成一張完整的圖片。Sounds familiar?對啊,就是去年 DeepMind 大火的一個工作 DRAW 的思想咯。DRAW 中指出,我們人類在完成一幅圖畫時,都不一定是一筆完成的,我們又為何要求機器能做到呢?所以 DRAW 用了一種 sequential VAE 的模型,讓機器一點點“寫”出了一個個數字。於是 Facebook 等人提出的 LAPGAN[3] 則是採用了這樣的思想,在 GAN 基礎上做出了改進。LAPGAN[3] 這個工作既有 project page,也有開原始碼,是非常值得重視的工作。

在實現 sequential version 的方式上,LAPGAN[3] 這個工作採用的是一種幾十年前的Laplacian Pyramid 的方式,也因此起名做 LAPGAN。

這個方式主要的操作便是 downsample 和 upsample,而優勢是每次只考慮樣本和生成影象之間的殘差的學習效果,某種程度上和 Residual Network 的思想是一樣的。針對殘差的逼近和學習,相對更加容易。於是,在這個思想上,便有了如下 LAPGAN 的學習過程:


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

DCGAN

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

比如他們提出既然之前已經被提出的 strided convolutional networks 可以從理論上實現和有 pooling 的 CNN 一樣的功能和效果,那麼 strided 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 都 show 了出來,可以看出影象逐漸演變的過程。


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


GRAN

今天要推薦的倒數第二篇論文[5] 也和 DRAW 有著非常多的相似點。之前已經說了,在改進 GAN 時,可以考慮 sequential version。Sequential models 的好處便是可以讓下一步的 model 利用上一步得到的結果,在之前的結果上做出修改,類似於一種 conditional 的方式。為了讓 GAN 也擁有這種 sequential 的能力,這篇論文[5] 將把 GAN 和 LSTM 結合,稱為GRAN,使其分割成了 step by step 的過程。每一個 step 中,就像 LSTM 的 cell 一樣,都有一個 C_t,這個決定的是 what to draw,也就是畫的 content,也是每一個 step 的 output;同時,就像 LSTM 中的 hidden states 一樣,這裡也有 h_{c,t}。與簡單的 LSTM 不同的是,這裡決定每個 cell 內容,也就是  的不僅僅是 hidden states,還有一個 “hidden of prior”,是專屬於 GAN 中的生成模型 G 的一個先驗 ,h_z。 h_z 和 h_{c,t} 拼接(concatenate)之後共同決定當前 step 的 update——what to draw。


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

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

最後說說缺點吧,現階段來看這個模型的可擴充套件性還不是那麼好,儘管說是 step by step 的,在最後的實驗中也只用了幾個 discrete step 做實驗,[1,3,5] 這樣。

VAEGAN

上面說的都是通過變成 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。可以看出,這個思想還是很有可擴充套件性的。

今天的論文全部介紹完畢,其實基於博弈論的競爭思想,還發展處了 Adversarial AutoEncoder 等工作,但是思想上大同小異,大家有興趣可以自己再去閱讀啦。