「從頭開始GAN」Goodfellow開山之作到DCGAN等變體
1新智元推薦
前言
GAN的火爆想必大家都很清楚了,各種GAN像雨後春筍一樣冒出來,大家也都可以名正言順的說髒話了[微笑臉]。雖然目前GAN的酷炫應用還集中在圖像生成上,但是GAN也已經拓展到NLP,Robot Learning上了。與此同時,在與NLP的結合過程中,我們很驚訝的發現,GAN和增強學習的Actor-Critic有曲藝同工之妙呀!Deepmind 的大神Oriol Vinyals也特地寫了篇文章Connecting Generative Adversarial Networks and Actor-Critic Methods 來倡議大家研究一下兩者的結合。這大大引起了我對GAN的興趣,感覺條條大路通AI呀。GAN和RL有點像當年的量子力學和相對論,那麼是不是會有一個GAN和RL的統一場論呢?這顯然值得期待。
因此,好好從頭分析一下GAN還是很有必要的。
Generative Adversarial Nets
既然是從頭開始GAN,那麼要說的第一篇文章必須是GAN的開篇,也就是2014年Ian Goodfellow的這篇開山之作。
在這篇paper,我們發現其實Ian Goodfellow僅用一段話就說完了GAN:
簡單的說GAN就是以下三點:
(1)構建兩個網路,一個G生成網路,一個D區分網路。兩個網路的網路結構隨意就好.
(2)訓練方式。G網路的loss是,而D的loss是注意這裡並不是Cross Entropy。
(3)數據輸入。G網路的輸入是noise。而D的輸入則混合G的輸出數據及樣本數據。
那麼我們來分析一下這樣的訓練會產生什麼情況?G網路的訓練是希望趨近於1,這樣G的loss就會最小。而D網路的訓練就是一個2分類,目標是分清楚真實數據和生成數據,也就是希望真實數據的D輸出趨近於1,而生成數據的輸出即趨近於0。OK,這就是GAN兩個網路相互對抗的本質。
那麼,這樣相互對抗會產生怎樣的效果呢?Ian Goodfellow用一個簡單的圖來描述:
我們也好好說一下上面這幾個圖。第一個圖是一開始的情況,黑色的線表示數據x的實際分布,綠色的線表示數據的生成分布,我們希望綠色的線能夠趨近於黑色的線,也就是讓生成的數據分布與實際分布相同。然後藍色的線表示生成的數據x對應於D的分布。在a圖中,D還剛開始訓練,本身分類的能力還有限,因此有波動,但是初步區分實際數據和生成數據還是可以的。到b圖,D訓練得比較好了,可以很明顯的區分出生成數據,大家可以看到,隨著綠色的線與黑色的線的偏移,藍色的線下降了,也就是生成數據的概率下降了。
那麼,由於綠色的線的目標是提升概率,因此就會往藍色線高的方向移動,也就是c圖。那麼隨著訓練的持續,由於G網路的提升,G也反過來影響D的分布。假設固定G網路不動,訓練D,那麼訓練到最優,
因此,隨著趨近於, 會趨近於0.5,也就是到圖d,是最終的訓練結果。到這裡,G網路和D網路就處於平衡狀態,無法再進一步更新了。
作者在文章中花了很大的篇幅證明整個網路的訓練最終會收斂到
,我們這裡就不探討了,還是看看具體的演算法及實現。
這裡面包含了一些重要的trick及訓練方法:
(1)G和D是同步訓練的,但是兩者的訓練次數不一樣,G訓練一次,D訓練k次。這主要還是因為初代的GAN訓練不穩定。
(2)注意D的訓練是同時輸入生成的數據和樣本數據計算loss,而不是cross entropy分開計算。實際上為什麼GAN不用cross entropy是因為,使用cross entropy會使D(G(z))變為0,導致沒有梯度,無法更新G,而GAN這裡的做法D(G(z))最終是收斂到0.5。
(3)在實際訓練中,文章中G網路使用了RELU和sigmoid,而D網路使用了Maxout和dropout。並且文章中作者實際使用來代替,從而在訓練的開始使可以加大梯度信息,但是改變後的loss將使整個GAN不是一個完美的零和博弈。
在這篇開山之作的最後,作者就分析了GAN的優缺點。GAN可以任意採樣,可以使用任意的可微模型(也就是任意神經網路都可以)。GAN生成的圖像更加sharp,也就是work更好,這個是最關鍵的,意味著它值得推廣。當然了,作者也直接說了GAN不好訓練這一bug。
在Future work中,作者也提到了使用GAN的各種可能性,包括conditional GAN,半監督學習等等。也許Ian Goodfellow在發表這篇文章的時候就已經意識到這將開創一個新的領域了。
DCGAN ( Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks)
GAN開始出名恐怕是因為DCGAN這篇文章。該文章做出了讓人難以置信的效果如上圖所示。這是GAN在圖像生成上的第一次非常成功的應用,也從此開始,一大堆和圖像生成相關的paper就出來了。
那麼這篇paper對GAN做了什麼改造呢?核心可以說就一點,就是使用卷積神經網路,並且實現有效訓練:
GAN在開山之作中就提出了,不好訓練。那麼DCGAN不但訓練成功了,還拓展了維度,這就比較厲害了。DCGAN一共做了一下幾點改造:
(1)去掉了G網路和D網路中的pooling layer。
(2)在G網路和D網路中都使用Batch Normalization
(3)去掉全連接的隱藏層
(4)在G網路中除最後一層使用RELU,最後一層使用Tanh
(5)在D網路中每一層使用LeakyRELU。
文章中作者也沒有說為什麼就這麼做,只是因為看起來效果好。就是純粹工程調出來了一個不錯的效果。
那麼具體說一下DCGAN的網路模型:
(1)G網路:100 z->fc layer->reshape ->deconv+batchNorm+RELU(4) ->tanh 64x64
(2)D網路(版本1):conv+batchNorm+leakyRELU (4) ->reshape -> fc layer 1-> sigmoid
D網路(版本2):conv+batchNorm+leakyRELU (4) ->reshape -> fc layer 2-> softmax
G網路使用4層反卷積,而D網路使用了4層卷積。基本上G網路和D網路的結構正好是反過來的。那麼D網路最終的輸出有兩種做法,一種就是使用sigmoid輸出一個0到1之間的單值作為概率,另一種則使用softmax輸出兩個值,一個是真的概率,一個是假的概率。兩種方法本質上是一樣的。
網上最出名的復現當屬 carpedm20/DCGAN-tensorflow,而另一個極簡版本是sugyan/tf-dcgan
下面我們來說說經過GAN訓練後的網路學到了怎樣的特徵表達。
首先是用DCGAN+SVM做cifar-10的分類實驗,從D網路的每一層卷積中通過4x4 grid的max pooling獲取特徵並連起來得到28672的向量然後SVM,效果比K-means好。然後將DCGAN用在SVHN門牌號識別中,同樣取得不錯的效果。這說明D網路確實無監督的學到了很多有效特徵信息。
然後就是比較有意思的了,看G可以通過改變z向量,生成怎樣不同的圖片。不同的z向量可以生成不同的圖像,那麼,z向量可以線性加減,然後就可以輸出新的圖像,前面的圖就是這種演示。非常神奇,說明z向量確實對應了一些特別的特徵,比如眼鏡,性別等等。這也說明了G網路通過無監督學習自動學到了很多特徵表達。
總的來說,DCGAN開創了圖像生成的先河,讓大家看到了一條嶄新的做深度學習的路子,如何更好的生成更逼真的圖像成為大家爭相研究的方向,而這一路到BEGAN,已經可以生成超級逼真的圖像了,真是難以置信。
CGAN(Conditional Generative Adversarial Nets)
GAN中輸入是隨機的數據,沒有太多意義,那麼我們很自然的會想到能否用輸入改成一個有意義的數據,最簡單的就是數字字體生成,能否輸入一個數字,然後輸出對應的字體。這就是CGAN要做的事。
做法是非常的簡單的:
就是在G網路的輸入在z的基礎上連接一個輸入y,然後在D網路的輸入在x的基礎上也連接一個y:
改變之後,整個GAN的目標變成:
訓練方式幾乎就是不變的,但是從GAN的無監督變成了有監督。只是大家可以看到,這裡和傳統的圖像分類這樣的任務正好反過來了,圖像分類是輸入圖片,然後對圖像進行分類,而這裡是輸入分類,要反過來輸出圖像。顯然後者要比前者難。
基於這樣的演算法,作者做了兩個任務:一個是MNIST的字體生成任務,另一個是圖像多標籤任務。這裡就談MNIST字體生成任務,要求輸入數字,輸入對應字體。那麼這裡的數字是處理成one hot的形式,也就是如果是5,那麼對應one hot就是[0,0,0,0,0,1,0,0,0,0]。然後和100維的z向量串聯輸入。
然後大家可以發現,這樣的訓練通過調整z向量,可以改變輸出。這樣就解決了多種輸出問題:
可以看到可以生成不同形狀的字體,只是生成質量還是有待改進,但是這已經足夠驗證CGAN的有效性了。
InfoGAN
有了CGAN,我們可以有一個單一輸入y,然後通過調整z輸出不同的圖像。但是CGAN是有監督的,我們需要指定y。那麼有沒有可能實現無監督的CGAN?這個想法本身就比較瘋狂,要實現無監督的CGAN,意味著需要讓神經網路不但通過學習提取了特徵,還需要把特徵表達出來。對於MNIST,如何通過無監督學習讓神經網路知道你輸入y=2時就輸出2的字體?或者用一個連續的值來調整字的粗細,方向?感覺確實是一個非常困難的問題,但是InfoGAN就這麼神奇的做到了。
怎麼做呢?作者引入了資訊理論的知識,也就是mutual information互信息。作者的思路就是G網路的輸入除了z之外同樣類似CGAN輸入一個c變數,這個變數一開始神經網路並不知道是什麼含義,但是沒關係,我們希望c與G網路輸出的x之間的互信息最大化,也就是讓神經網路自己去訓練c與輸出之間的關係。mutual information在文章中定義如下:
其中的H為c的entropy熵,也就是log(c)*c,Q網路則是反過來基於X輸出c。基於I,整個GAN的訓練目標變成:
有了這樣的理論之後,就具體如何訓練的問題了。
相比CGAN,InfoGAN在網路上做了一定改變:
(1)D網路的輸入只有x,不加c。
(2)Q網路和D網路共享同一個網路,只是到最後一層獨立輸出。
說明
這是很早之前寫的,因為覺得寫的1w字貌似也還有點用,還是發出來吧。由於時間有限加上知乎上也已經有大量GAN的分析解讀,本來打算把GAN最新的文章也拿來分析分析,決定還是算了,望見諒。
本文來自知乎用戶Flood Sung。
※「值得收藏的深度學習思維導圖」全面梳理基本概念與11大模型關係
※「IJCAI 2017」最佳學生論文屬華人,領域主席歐美中三分天下
※復旦、清華和英特爾中國研究院ICCV新作:完全脫離預訓練模型的目標檢測方法
※自然語言處理頂會EMNLP最佳論文3項出爐:Facebook智能體創造「語言」獲獎
※「獨家」寒武紀A輪融資1億美元,成全球AI晶元首個獨角獸,阿里參投
TAG:新智元 |
※老爺鐘的開山鼻祖——Seth Thomas鐘錶
※TOPS的El Chete開山刀——EDC很孤單,所以我給它找了個伴!
※蘋果進軍大屏手機市場的開山之作,永遠的經典——iphone 6 plus
※全視曲面屏開山之作,換一種方式看世界 Galaxy S8+
※品牌故事 | 沉浸式環繞聲技術開山鼻祖!法國頂級環繞聲處理前級品牌Trinnov Audio的崛起!
※托普斯El Chete開山刀,讓你告別戶外荊棘
※開山之作!史上最暢銷iPhone手機徹底停產:永遠的大屏經典
※Beyond的開山之作,如今網路上幾乎找不到這首歌了
※ATX3.0開山之作 鑫谷開元 K1裝機體驗
※語義分割領域開山之作:Google提出用神經網路搜索實現語義分割
※號稱SUV開山鼻祖,上市就降4萬塊,實惠硬派SUV來襲!
※MOTO 刀鋒系列開山之作,曾被奸商炒到萬元高價
※山東已成小Boss?多支球隊在最後一輪為避開山東故意輸球
※跳躍MOBA開山作《跳跳大咖》10月17日開測
※榮耀10發布:AI2.0開山之作+漸變配色
※國產B級車的開山之作。15萬元1.8T發動機,買什麼帕薩特!
※通用機槍的開山製作,希特勒電鋸的前身-德國MG34通用機槍
※這部LOL同人國漫,是一部開山之作,彈幕:還可以
※全面屏「開山鼻祖」回歸中國市場!搭載高通630+64GB售價僅千元
※新十年開山力作,力克行業旗艦短板、堅持創新之路的OPPO再度出發