天天看點

深入淺出 GAN·原理篇文字版(完整)| 幹貨

常見GAN

最後,作為 GAN 專題的結尾,我們列舉一下目前常見的 GAN 模型(可以根據 arxiv id 去尋找、下載下傳文獻),歡迎補充。

GAN - Ian Goodfellow, arXiv:1406.2661v1

DCGAN - Alec Radford & Luke Metz, arxiv:1511.06434

CGAN - Mehdi Mirza, arXiv:1411.1784v1

LAPGAN - Emily Denton & Soumith Chintala, arxiv: 1506.05751

InfoGAN - Xi Chen, arxiv: 1606.03657

PPGAN - Anh Nguyen, arXiv:1612.00005v1

WGAN - Martin Arjovsky, arXiv:1701.07875v1

LS-GAN - Guo-Jun Qi, arxiv: 1701.06264

SeqGAN - Lantao Yu, arxiv: 1609.05473

EBGAN - Junbo Zhao, arXiv:1609.03126v2

VAEGAN - Anders Boesen Lindbo Larsen, arxiv: 1512.09300

......

此外,還有一些在特定任務中提出來的模型,如本期介紹的 GAN-CLS、GAN-INT、SRGAN、iGAN、IAN 等等,這裡就不再列舉。

代碼

LS-GAN

Torch 版本:https://github.com/guojunq/lsgan

SRGAN

TensorFlow 版本:https://github.com/buriburisuri/SRGAN

Torch 版本:https://github.com/leehomyc/Photo-Realistic-Super-Resoluton

Keras 版本:https://github.com/titu1994/Super-Resolution-using-Generative-Adversarial-Networks

iGAN

Theano 版本:https://github.com/junyanz/iGAN

IAN

Theano 版本:https://github.com/ajbrock/Neural-Photo-Editor

Pix2pix

Torch 版本:https://github.com/phillipi/pix2pix

TensorFlow 版本:https://github.com/yenchenlin/pix2pix-tensorflow

GAN for Neural dialogue generation

Torch 版本:https://github.com/jiweil/Neural-Dialogue-Generation

Text2image

Torch 版本:https://github.com/reedscot/icml2016

TensorFlow+Theano 版本:https://github.com/paarthneekhara/text-to-image

GAN for Imitation Learning

Theano 版本:https://github.com/openai/imitation

SeqGAN

TensorFlow 版本:https://github.com/LantaoYu/SeqGAN

參考文獻

Qi G J. Loss-Sensitive Generative Adversarial Networks onLipschitz Densities[J]. arXiv preprint arXiv:1701.06264, 2017.

Li J, Monroe W, Shi T, et al. Adversarial Learning for NeuralDialogue Generation[J]. arXiv preprint arXiv:1701.06547, 2017.

Sønderby C K, Caballero J, Theis L, et al. Amortised MAPInference for Image Super-resolution[J]. arXiv preprint arXiv:1610.04490, 2016.

Ravanbakhsh S, Lanusse F, Mandelbaum R, et al. Enabling DarkEnergy Science with Deep Generative Models of Galaxy Images[J]. arXiv preprintarXiv:1609.05796, 2016.

Ho J, Ermon S. Generative adversarial imitationlearning[C]//Advances in Neural Information Processing Systems. 2016:4565-4573.

Zhu J Y, Krähenbühl P, Shechtman E, et al. Generative visualmanipulation on the natural image manifold[C]//European Conference on ComputerVision. Springer International Publishing, 2016: 597-613.

Isola P, Zhu J Y, Zhou T, et al. Image-to-image translationwith conditional adversarial networks[J]. arXiv preprint arXiv:1611.07004,2016.

Shrivastava A, Pfister T, Tuzel O, et al. Learning fromSimulated and Unsupervised Images through Adversarial Training[J]. arXivpreprint arXiv:1612.07828, 2016.

Ledig C, Theis L, Huszár F, et al. Photo-realistic singleimage super-resolution using a generative adversarial network[J]. arXivpreprint arXiv:1609.04802, 2016.

Nguyen A, Yosinski J, Bengio Y, et al. Plug & playgenerative networks: Conditional iterative generation of images in latentspace[J]. arXiv preprint arXiv:1612.00005, 2016.

Yu L, Zhang W, Wang J, et al. Seqgan: sequence generativeadversarial nets with policy gradient[J]. arXiv preprint arXiv:1609.05473,2016.

Lotter W, Kreiman G, Cox D. Unsupervised learning of visualstructure using predictive generative networks[J]. arXiv preprintarXiv:1511.06380, 2015.

Reed S, Akata Z, Yan X, et al. Generative adversarial textto image synthesis[C]//Proceedings of The 33rd International Conference onMachine Learning. 2016, 3.

Brock A, Lim T, Ritchie J M, et al. Neural photo editingwith introspective adversarial networks[J]. arXiv preprint arXiv:1609.07093,2016.

Pfau D, Vinyals O. Connecting generative adversarialnetworks and actor-critic methods[J]. arXiv preprint arXiv:1610.01945, 2016.

這次的内容主要是想梳理 GAN 從 NIPS 2014 被提出,到 2017年5月,都有哪些重要的從原理和方法上的重要研究。一共覆寫了25篇重要論文(論文清單見本文最下方)。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

引言:GAN的驚豔應用 首先來看看 GAN 現在能做到哪些驚豔的事呢?

深入淺出 GAN·原理篇文字版(完整)| 幹貨

GAN 可以被用來學習生成各種各樣的字型——也就是說,以後字迹辨認這種偵查手段很可能就不靠譜啦!這個工作還有很多動圖,在 GitHub 上搜 zi2zi 這個 project 就可以。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

有了GAN,以後就不怕靈魂畫手了!左邊這麼簡單的“簡筆畫”,居然也可以直接生成出對應的蘊含豐富含義的完整圖畫呢。這個工作來自[24],同時還可以用來做一些修正,比如可以把春天的山變成被白雪覆寫尖端的山——而這一切隻需要一點點白色的塗抹(可以參考這個工作[24]的官方頁面)。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

有了GAN,不僅僅可以在有輔助的情況下作畫,還可以在無輔助的情況下完成很多修飾!比如從分割圖變成真實照片,從黑白圖變成彩色圖,從線條畫變成富含紋理、陰影和光澤的圖……這些都是用 pix2pix[21] 裡的方法生成的。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

去年非常火爆的應用,臉萌當然也難不倒 GAN!想擁有自己的專屬Q版定制頭像嗎?快去看看[22] 吧(這篇工作以前也已經寫過哦)

深入淺出 GAN·原理篇文字版(完整)| 幹貨

當然還少不了前段時間刷爆社交網絡的“莫奈在春天醒來”、“馬變斑馬”、“四季更疊”的工作啦。來自依然也寫過的 CycleGAN[9]。傳送門在下面二維碼中。 背景知識:GAN基礎和優點 這些驚豔的工作基本都是2016年8月甚至10月以後的,也就是 GAN 被提出兩年後。這是因為,雖然 GAN 有非常吸引人的性質,想要訓練好它并不容易。經過兩年的摸索、思考與嘗試,才有了如今的積累和突破。 那麼這個非常吸引人的 GAN 是什麼樣呢。其實 GAN 最初讓人“哇”的地方在于,作為一個生成模型,GAN 就像魔術師變魔術一樣,隻需要一個噪音(噪音向量),就可以生成一隻兔子!

深入淺出 GAN·原理篇文字版(完整)| 幹貨

而想要成為一個成功的欺騙觀衆的魔術師并不容易,GAN 也是在不斷地失敗、穿幫、磨練技藝中成長起來的!要知道,觀衆們見過很多兔子,如果變出來的東西根本不像兔子,或者變不出來,這個魔術就很失敗,觀衆就不會買賬。在這樣反複的練習中,作為魔術師的 GAN 扮演的是生成模型的角色,目的是要不斷地提高自己的魔術水準,進而變出更活靈活現的兔子;而觀衆扮演的是一種判别模型的角色,目的是考察和激勵魔術師提高自己的水準。但是這種激勵是通過批評或者懲罰的方式完成的。 嚴格來說,一個GAN 架構,最少(但不限于)擁有兩個組成部分,一個是生成模型 G,一個是判别模型 D。在訓練過程中,會把生成模型生成的樣本和真實樣本随機地傳送一張(或者一個 batch)給判别模型 D。判别模型 D 的目标是盡可能正确地識别出真實樣本(輸出為“真”,或者1),和盡可能正确地揪出生成的樣本,也就是假樣本(輸出為“假”,或者0)。這兩個目标分别對應了下方的目标函數的第一和第二項。而生成模型的目标則和判别模型相反,就是盡可能最小化判别模型揪出它的機率。這樣 G 和 D 就組成了一個 min-max game,在訓練過程中雙方都不斷優化自己,直到達到平衡——雙方都無法變得更好,也就是假樣本與真樣本完全不可區分。 通過這樣的巧妙設計,GAN 就擁有了一個非常吸引人的性質。GAN 中的 G 作為生成模型,不需要像傳統圖模型一樣,需要一個嚴格的生成資料的表達式。這就避免了當資料非常複雜的時候,複雜度過度增長導緻的不可計算。同時,它也不需要 inference 模型中的一些龐大計算量的求和計算。它唯一的需要的就是,一個噪音輸入,一堆無标準的真實資料,兩個可以逼近函數的網絡。 訓練難點一:過于自由 但是天下沒有免費的午餐,這樣簡單的要求使得 GAN 的自由度非常大。換句話說,GAN 的訓練就會很容易失去方向,變得野蠻生長。于是,早期的 GAN 經常出現如下讓人崩潰的現象:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這些現象其實是 GAN 中存在的三個難點或者說問題交織導緻的。個人覺得,首當其中的難點一就是,深度神經網絡自身的難訓練和不穩定。雖然原始 GAN 的理論中,并不要求 G 和 D 都是神經網絡,隻需要是能拟合相應生成和判别的函數就可以。但是這恰好是深度神經網絡擅長的事情嘛,是以大家就都用神經網絡作為 G 和 D 了。但是神經網絡的選擇、設計和訓練還充滿了藝術的驚喜與生活的不确定性,這也直接為 GAN 的訓練帶來了困難。加之本來 GAN 就缺乏指導,是以就有了一系列可以被歸結為解決這一方向問題的工作。我将這類工作概括為 Partial Guidance, Fine-Grained Guidance 和 Special Architecture。 解決方案一:Partial Guidance 先來看,Partial Guidance。Partial Guidance 中我概括的幾個重要工作,都是為原始 GAN 加上一些顯式的外部資訊,比如使用者的額外輸入,比如類别資訊等等。包含的工作有:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

Conditional GAN[15],也叫 CGAN,幾乎是原始 GAN[2] 後的第一份工作,想法非常簡單,既然你的資訊不夠,我就把你原始的生成過程變成基于某些額外資訊的生成。這樣就相當于給你提供了一些 hint,是以公式如下: 可以看到,D 和 G 去拟合的分布都變成了條件機率分布。在 CGAN 的工作中,這個額外的 y 資訊,是通過在輸入層直接拼接樣本與 y 資訊的向量而實作的。具體使用的 y 資訊有 one-hot vector,也有圖像(也就是基于另一個圖像去生成)。這個 y 資訊的選擇其實十分靈活,在後期的工作中也依然很常見,畢竟是一種非常直覺有效的加入 label 資訊的方式。 第二個這方面的工作是由 OpenAI 提出的 Improved GAN[19],其中重點提出了兩個訓練 GAN 的技巧,feature matching 和 minibatch discrimination。feature matching 是指,既然 G 和 D 的訓練不夠穩定,常常 D 太強,G 太弱,那麼不如就把 D 網絡學到的特征直接“傳”給 G,讓 G 不僅能知道 D 的輸出,還能知道 D 是基于什麼輸出的。是以就有了如下的新的目标函數: 也就是說,現在的 D 直接就是神經網絡的某一個中間層了。這個方法在實驗中發現對于訓練的穩定度提升非常有幫助。與此同時,他們還提出了第二個方法,叫 minibatch discrimination:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這其實是讓 D 在判斷目前傳給它的樣本是真是假的同時,不要隻關注目前的,也要關注其他的樣本。這會增加 D 判斷樣本時候的多樣性,進而增加了 G 生成樣本的多樣性,因為它不再會隻基于一種“逼真”樣本的方向來改進自己。 第三個工作是來自 UC Berkeley 的 iGAN/GVM[24],也是開篇介紹 GAN 應用中的解放靈魂畫手的工作。他們的工作中蘊含了兩種指導資訊,一個是使用者的輸入,比如藍色的筆觸,比如綠色的線條,比如圖像改變的方向和程度(拉伸、變形)。但是如果隻利用這樣的資訊,生成的圖像往往比較模糊,比如鞋子的紋理變得不夠清晰。為此它們的解決辦法是為在生成的鞋子的形狀上“貼”上原始真實圖檔中的高清紋理。是以難點就是如何讓“貼”的過程變得可靠,不能“貼”出區域,也不能“貼”少了。他們在此利用了內插補點空間中的光場資訊,進而能捕捉到相鄰內插補點空間中的點對點映射關系,也就可以基于這樣的映射,疊代“貼”上紋理,直到最後一步:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

iGAN 的工作之後,他們又繼續做了 pix2pix 的工作[21],用于生成一些圖像兩兩之間的“變換”。也就是開篇介紹的,“從分割圖變成真實照片,從黑白圖變成彩色圖,從線條畫變成富含紋理、陰影和光澤的圖”,還有第一個 zi2zi 的字型變換,也是基于這個 pix2pix 的工作[21]。pix2pix 裡,将 D 的輸出從一張圖檔變成了一對圖檔,是以 D 的任務就變成了去判斷目前的兩張圖檔是否是一個“真實”的“變換”。比如我們的需求是給一個黑白的 Hello Kitty 上色,那麼 pix2pix 的架構大概如下:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

而Partial Guidance 中的最後一個重要任務就是非常新的 GP-GAN[25],目标是将直接複制粘貼過來的圖檔,更好地融合進原始圖檔中,做一個 blending 的事情。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這個過程非常像 iGAN,也用到了類似 iGAN 中的一些限制,比如 color constraint。另一方面,這個工作也有點像 pix2pix,因為它是一種有監督訓練模型,在 blending 的學習過程中,會有一個有監督目标和有監督的損失函數。 解決方案一:Fine-grained Guidance 除了Partial Guidance 這種非常顯式的“半監督”(不是嚴格意義上的半監督)資訊,過去也有很多工作讓GAN 的生成過程拆解到多步,進而實作“無監督”的 Fine-grained Guidance。個人總結了以下一些重要工作:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

第一篇 LAPGAN 是來自 Facebook[16],是第一篇将階層化或者疊代生成的思想運用到 GAN 中的工作。在原始 GAN[2] 和後來的 CGAN[15] 中,GAN 還隻能生成 16*16, 28*28, 32*32 這種低像素小尺寸的圖檔。而這篇工作[16] 是首次成功實作 64*64 的圖像生成。思想就是,與其一下子生成這麼大的(包含資訊量這麼多),不如一步步由小轉大,這樣每一步生成的時候,可以基于上一步的結果,而且還隻需要“填充”和“補全”新大小所需要的那些資訊。這樣資訊量就會少很多:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

而為了進一步減少資訊量,他們甚至讓 G 每次隻生成“殘差”圖檔,生成後的插值圖檔與上一步放大後的圖檔做加法,就得到了這一步生成的圖檔。 第二篇 Fine-grained Guidance 方面的工作[18]讨論的是從 Text 生成 Image,比如從圖檔标題生成一個具體的圖檔。這個過程需要不僅要考慮生成的圖檔是否真實,還應該考慮生成的圖檔是否符合标題裡的描述。比如要标題形容了一個黃色的鳥,那麼就算生成的藍色鳥再真實,也是不符合任務需求的。為了捕捉或者限制這種條件,他們提出了 matching-aware discriminator 的思想,讓本來的 D 的目标函數中的兩項,擴大到了三項:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

第三篇這方面的工作[20]可以粗略認為是 LAPGAN[16] 和 matching-aware[18] 的結合。他們提出的 StackGAN[20] 做的事情從标題生成鳥類,但是生成的過程則是像 LAPGAN 一樣階層化的,進而實作了 256*256 分辨率的圖檔生成過程。StackGAN 将圖檔生成分成兩個階段,階段一去捕捉大體的輪廓和色調,階段二加入一些細節上的限制進而實作精修。這個過程效果很好,甚至在某些資料集上以及可以做到以假亂真:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

最後一個這方面的工作[26],當時也因為效果逼真和工作夯實,引發了社交網絡上和學術圈的廣泛關注,那就是去年年底的 PPGN[26],現在已被 CVPR 2017 接收。PPGN 也主張不要一次生成一張完整的圖檔,而是要用一個疊代過程不斷地調整和完善。與 LAPGAN 和 StackGAN 不同的是,PPGN 使用了 Denoising AutoEncoder(DAE)的過程實作疊代,并在其網絡結構中也多次展現了疊代和階層化的思想。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

解決方案三:Special Architecture 針對GAN 的第一大難點,也就是神經網絡本身訓練的不穩定和難調參,也有許多工作提出了一些特殊結構,來改善這些情況。 将GAN 成功從 MNIST 的多層感覺機(MLP)結構擴充到卷積神經網絡結構的就是DCGAN 這篇工作[17]。這篇工作中,他們提出了一組卷積神經網絡,不僅使得可以 GAN 可以在 celebA 和 LSUN 這種現實世界的真實大規模資料集上訓練,還使得 batchnorm 等 trick 也被成功運用。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

雖然DCGAN 的一度成為了 GAN 工作的标準,統治了大半年的江湖。但是随後出現的效果非常驚豔的 pix2pix[21] 中卻指出了 U-Net 結構的優勢。pix2pix 中 G 和 D 使用的網絡都是 U-Net 結構,是一種 encoder-decoder 完全對稱的結構,并且在這樣的結構中加入了 skip-connection 的使用。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這個結構對于生成效果至關重要,其也被後續的一些工作采用[9][11] 。skip-connection 不僅使得梯度傳導更通暢,網絡訓練更容易,也因為這類工作多數是要學習圖檔之間的映射,那麼讓 encoder 和 decoder 之間一一對應的層學到盡可能比對的特征将會對生成圖檔的效果産生非常正面的影響。類似的讨論可以見 [11]。 最後要指出的也是剛才就提到的 GP-GAN[25] 的工作。在這個工作中,它們提出了 blending GAN 的子產品,雖然也是基于 encoder-decoder 的結構,但是略有不同的地方是,在兩者中間加入了一個 fully-connected layer:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這個全連接配接層的特殊之處在于,并不是卷積神經網絡中的 channel-wise FCN,而是徹底全連接配接。這樣的好處是可以傳遞更多的全局資訊,使得有監督學習變得更加有效。 訓練難點二:原始目标函數沒意義 其實,GAN 訓練之難,更多的源于它 GAN 目标函數自身。GAN 的 D 的目标函數上文已經提過: 而G 的目标函數相應的是: 也就是說,G 需要最小化讓 D 識别出自己生成的假樣本的機率。但其實,在 GAN 原始論文[2] 中,作者就指出使用如上的 G 的目标函數會給訓練造成問題。從形象化的角度來了解,在訓練的早期,G 生成的假樣本品質還非常差,與真實樣本相距過遠。這會知道 D 非常容易識别出 G 的假樣本,進而使得 D 的訓練幾乎沒有損失,也就沒有有效的梯度資訊回傳給 G 讓 G 去優化自己。這樣的現象叫做 gradient vanishing,梯度消失問題。 從偏理論的角度來了解,梯度消失的問題實際上更“複雜”一些。想要了解它需要先了解 GAN 的 min-max game 的平衡條件。當 G 和 D 的對抗訓練達到平衡時,可以認為取得了最優的 D(和最優的 G),此時最優的 D* 應該是兩個分布的比值:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

有了最優的 D* 的表達,就可以将它帶入原始的 D 的目标函數,進而得到上頁 slides 中的等價表達。也就是說,在 GAN 原始論文[2] 中就已經給出了,優化這樣一個目标函數等價于優化 JS 散度(因為 2log2 是常數)。 然而,問題就出在了這個 JS 散度上。在論文[1] 中,作者指出當兩個分布(比如這裡的真實資料分布 P_r 和 生成資料分布 P_g 之間幾乎不重合或者重合部分可忽略不計時,JS 散度也是個常數!而這在由神經網絡拟合的分布中是非常常見的!也就是說,原始的 GAN 目标函數幾乎是常數,是以也就不難了解為什麼梯度幾乎消失了。 訓練難點三:替代目标函數不合理 針對梯度消失問題,原始 GAN 論文[2] 就提出了一個啟發性的替代目标函數: 這一函數相比原始的目标函數,相當于從最小化 D 揪出自己的機率,變成了最大化 D 抓不到自己的機率。雖然直覺上感覺是一緻的,但其實并不在理論上等價,也更沒有了理論保證在這樣的替代目标函數訓練下,GAN 還會達到平衡。 即使如此,論文[1] 依然指出,就算是這個替代的目标函數,也同樣有問題!他們證明了,去優化這樣一個目标函數等價于最小化 KL 散度的同時最大化 JS 散度。 可是,KL 散度和 JS 散度是同向的:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

也就是說,如果要最小化其中一個的同時卻要最大化另一個,這隻會導緻優化目标不一緻和訓練不穩定,也就是 gradient unstable issue。不過,既然在難點二中分析了,JS 散度在這種情況下經常為常數,不提供資訊,那麼隻看 KL 散度行不行呢。答案依然是不行。即使我們隻考慮優化 KL 散度,因為 KL 散度是不對稱的,也會導緻問題。也就是說,當生成器無法生成真實圖像和生成了非常不真實的圖像,這兩種情況下,它得到的懲罰是不一樣的。這會導緻,生成器 G 為了得到更少的懲罰,隻得選擇懲罰最小的政策,也就是生成盡可能多的看起來真實的圖檔而不考慮這些圖檔是不是一樣!也就是說,隻要它生成了一張判别器認為還面前湊合的圖檔,它就不會再願意冒險去嘗試新的圖檔,因為這種冒險會帶來更多的懲罰。是以隻優化一個不對稱的 KL 散度,就會導緻一個叫mode missing 的問題,這個在我們以前也專門分析過,點我傳送。 解決方法二:Encorder-Incorporated 為了解決上述 mode missing 的問題,有非常多的工作其實可以歸為一大類。那就是在原始 G 和 D 之上再加上一個自動編碼器 encoder。比如比較有代表性的工作[3],就是讓真實圖檔通過一個編碼器 E 得到一個隐空間的表達 z,再在此基礎上用生成器 G 生成最後的圖檔。是以,對于編碼器的目标函數是: 而對于加入了編碼器的生成器的目标函數就會變成: 在一個模拟實驗上可以看到,沒有編碼器的原始 GAN 會非常難以拟合多個分散的 mode,而加入了編碼器的 regularized GAN 則非常容易:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

同時期還有許多相似的工作,比如 EBGAN[4] 和 BEGAN[5]。兩篇工作非常相似,EBGAN 将能量函數作為判别器 D 的輸出;而 BEGAN 則将這一條件“簡化”。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

解決方法二:Noisy Input 雖然介紹了這些加入了編碼器的工作,但是他們為什麼就能解決 mode missing 的問題呢。這主要還是因為加入了編碼器後,就可以盡量讓生成資料的分布 P_g 和真實資料的分布 P_r 更相近,重合的可能性和程度更高。進而緩解 JS 散度幾乎為常數導緻的梯度無意義的問題。 然而其實有更簡單的一些技巧和方法來實作相似的目的:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

在論文[1] 中,作者們就指出,如果給 P_g 和 P_r 都加入非常小的噪音,那麼它們從完全不重合到重合,進而其 JS 散度也會變得有意義。雖然這篇論文[1] 到2016年底才被提出,但相似的技巧早在之前的工作中就被人運用過。比如在 G 和 D 的神經網絡中間層中加入噪音[4],或者直接在圖檔輸入加入噪音[6] 等等。 解決方法二:Encoders-Constrained 但是上述工作其實并沒有完全解決 mode missing 的問題。這是為什麼呢?在最近介紹過的 DiscoGAN[22] 中,有針對 mode missing 的更深入的分析。關于DiscoGAN 的詳細介紹點我傳送。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

在上圖中,(a) 代表理想狀态下學習到的生成規則,(b) 是普通 GAN 會學習到的規則,(c) 是隻加了一個 encoder,隻做一次 reconstruction constraint 時候的 GAN 的情況。可以粗略地将剛才提到的 RegGAN[3] EBGAN[4] 和 BEGAN[5] 都歸為情況 (c)。可以看到,雖然情況 (c) 會比 (b) 好一些,但并不能完全避免 mode missing 的問題,而是在兩種 mode 之間“震蕩”。 對此,近期有三篇想法相似的工作可以從理論上完全避免 mode missing 的問題。這三篇工作就是前陣子專門為大家推薦過的 CycleGAN [9], DiscoGAN [10]和 DualGAN[11],點我傳送。 CycleGAN[9] 就是開篇的“莫奈從春天醒來”、“馬變斑馬”、“四季更疊”背後的模型。它的論文開頭非常優美和引人入勝,先是放出了這些 impressive 的 result;同時用一種帶逛博物館的語氣寫了 Introduction:“當莫奈在一個和煦的春天的早上,站在河畔畫下這幅畫時,他眼前究竟是怎樣的景象呢?如果莫奈站在一個清爽的夏天的早上,又會看到怎樣的景象,畫出怎樣的作品呢?” 作者的寫作功底可見一斑。 作者用這樣的開頭,引出了一個 motivation:我們雖然沒有辦法真的穿越時空,站在莫奈身邊看到他當時看到的景象,但是我們卻可以通過他的畫作,想象當時的場景;同時也可以根據他的作品(和他的畫風),想象他畫出的其他場景會是怎樣的。也就是說,我們沒有 paired data 卻可以實作這種 “翻譯” 或者說映射。那麼我們是否也可以讓機器做到這件事呢? 我們人類之是以可以做到這件事,作者假設,在兩個領域(X,Y)之間,是存在一種底層的關系的,或者說隐含的關聯——這種隐含的關聯可能是,對于同一個事物,有兩種不同的映射後的表達,那麼這兩種表達之間就是針對這同一個事物的一種關聯。如果我們僅用一個映射把 G: X->Y 進行單向映射,那麼我們無法保證這個 G 是單一的。或者說,我們無法保證 X 中的所有樣本 x 和 Y 領域中的所有樣本 y 是合理對應的。這也就(可能)導緻 mode collpase 的問題。對于這個問題的描述,在 CycleGAN 中,作者用了 meaningful 這個詞;而在 DiscoGAN 中,作者強調了我們希望的是 one-to-one mapping, rather than many-to-one mapping。 通過這樣的分析,很容易看出,一種自然的解決方案就是,我們不僅要求一個單向映射,而更要求一種雙向映射。在CycleGAN 中,這個問題被形式化為:我們有 G: X->Y, F: Y->X 兩個映射或者說翻譯器,我們希望 F(G(x)) ≈ x, G(F(y)) ≈ y. 在 DiscoGAN 中,作者直接把這個映射用 GAN 中的 generator 代表,是以為了實作這樣的雙向映射,DiscoGAN 中指出我們需要兩個 G,并且讓盡量 G1(G2(x)) = x,反之同理。DualGAN 的形式化與 DiscoGAN 相似。不過,三篇論文分别用了三種不同的術語來實作這樣的限制或者說目标。CycleGAN 中,作者用了 vision 中被應用多次的cycle consistency loss,CycleGAN 也是以得名;DiscoGAN 則是因為直接強調了一一映射,是以用了bijective map來闡述;DualGAN 因為是從去年 NIPS 2016 Dual Learning for MT 的 paper 受到啟發的,是以是從closed loop角度來寫的。因為 CycleGAN 的模型示意圖比較簡潔,是以這裡以它為示例:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

上圖中紅色箭頭指向的就是兩個方向對應的各自的 cycle-consistency loss。在這篇工作中,它們還實作了一種基于畫家風格的風格轉換。這種風格轉換不再是基于某一幅圖畫的風格,是以可以了解為批量風格轉換。比如梵高的《星夜》和其《向日葵》的風格就很不相似:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

那麼CycleGAN[9] 和 DiscoGAN[10] 等用雙向映射(也就是兩個編碼器)的思想,對于 mode missing problem 到底解決得如何呢?來看看下圖的實驗結果:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

上圖中的 BiGAN[13] 和 CoGAN 雖然也是雙向映射,但是映射空間是在隐空間。從實驗結果來看,這樣的不同使得其效果大打折扣:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

DiscoGAN[10] 則在這個問題的可視化分析上做得更好:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

上圖中 (a) 是原始資料分布,(b) 是普通 GAN,(c) 是加了單向映射的 GAN,(d) 是 DiscoGAN。(c) (d) 都區分出了一定程度的 mode,但 (c) 還是 miss 掉了一些(右上角綠色背景的)。而 (d) 則完美地區分了10個 mode,并且從背景色來看(背景色代表判别器 D 的輸出),判别器對于同一種 mode 的輸出非常一緻,幾乎沒有漸變色,這也說明了 DiscoGAN 的訓練優勢。綜上,這些基于編碼器的工作都可以認為幾乎解決了 GAN 訓練難點三:替代目标函數不合理,一定程度解決了 JS 散度在兩個分布幾乎不重疊時候的問題。 解決方法三:Wasserstein Distance 其實從根本上講,GAN 目标函數的問題都是 KL 散度和 JS 散度衡量兩個分布時候的不足造成的。那麼有沒有辦法直接用其他分布度量來為 GAN 這種對抗遊戲提供優化目标呢?為此就有了論文[1] 的眼神,Wasserstein GAN[7],目前已被 ICML 2017 錄用。 Wasserstein GAN,簡稱 WGAN 基于的是 Wasserstein Distance,也叫 Earth-Mover Distance,推土機距離。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這個距離可以形象的了解為,将一個分布變成另一個分布所需要的消耗。如果用一個直覺的了解就是,把一個沙堆推到另一個地方,形成另一堆可能長得不一樣的沙堆所需要的“距離”。而這種“轉變”并不是唯一的,是以很可能有些“路徑”消耗大,有些消耗小。用比較嚴謹的說法,Wasserstein 距離表示的是“最有規劃路徑”下的最短距離。

深入淺出 GAN·原理篇文字版(完整)| 幹貨

這個距離有很多優良的性質,其中最最最重要的一條就是它可以在兩個分布毫無重疊的情況下依然給出有效的度量。也就是說,用它作為優化目标則不需要擔心梯度無意義或者梯度消失的問題。但是 Wasserstein Distance 中的“求下界”的操作無法準确高效計算,是以作者用了 Kantorovich-Rubinstein 對偶将其變換了一下,就得到了 WGAN 的目标函數: 但是這樣的變換要求符合一個先決條件,也就是判别器 D 拟合的函數需要是 1-Lipschitz 連續函數。Lipschitz 連續實際上是要求一個連續函數的導函數的絕對值不大于某個常數,也就是說,它限制了一個連續函數的最大局部變動幅度。這個對于由神經網絡來拟合的函數來講,導數可以粗暴了解為神經網絡的權重。是以在 WGAN[7] 中他們采取了 weight clipping,梯度剪裁的方式,将“導數”限制在 [-c,c] 範圍内。也就是每次更新 D 的參數後,超過這個範圍的都拉回來。 從上圖可以看到,WGAN 的 D 的導數很平滑(也就是所謂的 WGAN Critic,淺藍色線),而原始的 GAN 的梯度消失很嚴重(紅色線)。也就是說,有了基于 Wasserstein distance 的 WGAN,原始 GAN 中的難點二,梯度消失問題就解決了。 同時,他們還發現基于由于現在的 WGAN 中的 D 不再是做二分類任務,而是做一個“回顧”任務去拟合 Wasserstein distance,這個 distance 從實驗上發現,與生成的圖檔品質呈負相關: 梯度裁剪的問題以及改進 雖然WGAN 在實驗中展現了自己比原始 GAN 穩定的一面,但它依然遺留了一個問題。也就是通過 weight clipping,梯度裁剪這種方法選擇的那個超參 c 對于實驗結果的影響有多大?其實這個問題在原始 WGAN[7] 的論文中作者就有讨論。當 c 太大時,會出現梯度爆炸問題;過小也會導緻梯度消失問題。 基于此,就有了 Improved WGAN[14] 這篇工作。他們首先分析了,到底基于梯度裁剪方式,會導緻什麼樣的問題。首先在 Section 2.3 中他們證明,用這樣的方式實際上也存在一個最優的判别器 D,當達到這個最優判别器時,D 的所有權重都會傾向于等于c,如下:

深入淺出 GAN·原理篇文字版(完整)| 幹貨

而這樣的一個缺點就是,會導緻學出來的網絡過于簡單,對于複雜函數的拟合能力或者說對于分布的模組化能力會明顯下降。比如下面的模拟實驗中,就可以看到基于梯度裁剪的方法拟合分布,會忽略掉高階動量。 為此,[14] 提出了一種新的方式去滿足 WGAN 目标函數的額外要求,也就是 Lipschitz 連續性。他們指出既然最優的判别器的權重會傾向于一個常數,不如就把這個常數當成“目标”,把目前的權重與這個常數的距離,當成一種懲罰項或者正則項,加入WGAN 的目标函數中: 也是以,這個方法被叫做 gradient penalty,這樣的 WGAN 就叫 WGAN-GP [14]。WGAN-GP 比原始 WGAN 的收斂速度更快,訓練也更穩定,得到的生成結果的品質也更好。 結語及資源 本文主要總結了 GAN 發展過程中的一些重要模型。這些模型的出現有些甚至甚至早于理論上的發展,但是當理論發展到一定程度,回過頭再去看這些模型就會有一些新的了解。如果大家對 GAN 很感興趣,也想自己上手試試,優先推薦以下的一些模型和技巧: 最後再次附上這份文字版幹貨對應的完整 slides 和回顧視訊。隻要公衆号背景回複“原理篇”就可以擷取126頁完整 PDF 和分享視訊啦! 參考文獻 [1] Arjovsky and Bottou, “Towards Principled Methods for Training Generative Adversarial Networks”. ICLR 2017.[2] Goodfellow et al., “Generative Adversarial Networks”. ICLR 2014.[3] Che et al., “Mode Regularized Generative Adversarial Networks”. ICLR 2017.[4] Zhao et al., “Energy-based Generative Adversarial Networks”. ICLR 2017.[5] Berthelot et al., “BEGAN: Boundary Equilibrium Generative Adversarial Networks”. arXiv preprint 2017.[6] Snderby, et al., “Amortised MAP Inference for Image Super-Resolution”. ICLR 2017.[7] Arjovsky et al., “Wasserstein GANs”. ICML 2017.[8] Villani, Cedric. “Optimal transport: old and new”, volume 338. Springer Science & Business Media, 2008.[9] Jun-Yan Zhu*, Taesung Park*, Phillip Isola, Alexei A. Efros. “Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks”. arXiv preprint 2017.[10] Taeksoo Kim, Moonsu Cha, Hyunsoo Kim, Jung Kwon Lee, Jiwon Kim. “Learning to Discover Cross-Domain Relations with Generative Adversarial Networks”. ICML 2017.[11] Zili Yi, Hao Zhang, Ping Tan, Minglun Gong. “DualGAN: Unsupervised Dual Learning for Image-to-Image Translation”. arXiv preprint 2017.[12] Jeff Donahue, Philipp Krhenbühl, Trevor Darrell. “Adversarial Feature Learning”. ICLR 2017.[13] Vincent Dumoulin, Ishmael Belghazi, Ben Poole, Olivier Mastropietro, Alex Lamb, Martin Arjovsky, Aaron Courville. “Adversarially Learned Inference”. ICLR 2017.[14] Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin, Aaron Courville. “Improved Training of Wasserstein GANs”. arXiv preprint 2017.[15] Mehdi Mirza, Simon Osindero. “Conditional Generative Adversarial Nets”. arXiv preprint 2014.[16] Emily Denton, Soumith Chintala, Arthur Szlam, Rob Fergus. “Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks”. arXiv preprint 2015.[17] Alec Radford, Luke Metz, Soumith Chintala. “Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks”. ICLR 2016.[18] Scott Reed, Zeynep Akata, Xinchen Yan, Lajanugen Logeswaran, Bernt Schiele, Honglak Lee. “Generative Adversarial Text to Image Synthesis”. ICML 2016.[19] Tim Salimans, Ian Goodfellow, Wojciech Zaremba, Vicki Cheung, Alec Radford, Xi Chen. “Improved Techniques for Training GANs”. arXiv preprint 2016.[20] Han Zhang, Tao Xu, Hongsheng Li, Shaoting Zhang, Xiaolei Huang, Xiaogang Wang, Dimitris Metaxas. “StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks”. arXiv preprint 2016.[21] Phillip Isola, Jun-Yan Zhu, Tinghui Zhou, Alexei A. Efros. “Image-to-Image Translation with Conditional Adversarial Networks”. CVPR 2017.[22] Yaniv Taigman, Adam Polyak, Lior Wolf. “Unsupervised Cross-Domain Image Generation”. ICLR 2017.[23] Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio. “Generative Adversarial Nets”. NIPS 2014.[24] Jun-Yan Zhu, Philipp Krhenbühl, Eli Shechtman and Alexei A. Efros. “Generative Visual Manipulation on the Natural Image Manifold”, ECCV 2016.[25] Huikai Wu, Shuai Zheng, Junge Zhang, Kaiqi Huang. “GP-GAN: Towards Realistic High-Resolution Image Blending”. arXiv preprint 2017.[26] Anh Nguyen, Jeff Clune, Yoshua Bengio, Alexey Dosovitskiy, Jason Yosinski. “Plug & Play Generative Networks: Conditional Iterative Generation of Images in Latent Space”. CVPR 2017.