生成對抗網路(GAN)相比傳統訓練方法有什麼優勢?

生成對抗網路(GAN)被Yann LeCun稱為"過去十年機器學習界最有趣的idea",從14年Ian Goodfellow提出此觀點,這兩年關於GAN的論文層出不窮.很多研究人員把GAN引入到傳統的端到端(end to end)的訓練任務中,比如文字生成圖像,圖像超解析度,圖像場景轉變,如下圖的幾個實例:

Ian Goodfellow在GAN開創論文中也提到,GAN相比傳統方法,生成器(G)的參數更新不是直接來自數據樣本,而是來自鑒別器(D)的反向傳播,訓練不需要馬爾科夫鏈.也有論文提出它可以提高泛華精度,可是,它也有很多缺點,比如生成模型的分布沒有顯示的表達,比較難訓練.我想知道使用GAN同時訓練生成器和鑒別器兩個網路,與直接訓練一個端到端的網路相比,還有沒有其他優勢?例如我們可以直接根據真實數據訓練一個圖像超解析度的深度模型,為什麼還使用GAN這種隱式的方法訓練生成器來做超解析度.

GAN有什麼優勢讓它這麼火熱?


自問自答一下吧,我搜索了一下Quora,發現有兩個類似問題,都是Ian Goodfellow親自回答的,我整理了一下,發表了一篇博客 ,地址為:知乎專欄

答案也複製一份吧~

自2014年Ian Goodfellow提出生成對抗網路(GAN)的概念後,生成對抗網路變成為了學術界的一個火熱的研究熱點,Yann LeCun更是稱之為」過去十年間機器學習領域最讓人激動的點子」.生成對抗網路的簡單介紹如下,訓練一個生成器(Generator,簡稱G),從隨機雜訊或者潛在變數(Latent Variable)中生成逼真的的樣本,同時訓練一個鑒別器(Discriminator,簡稱D)來鑒別真實數據和生成數據,兩者同時訓練,直到達到一個納什均衡,生成器生成的數據與真實樣本無差別,鑒別器也無法正確的區分生成數據和真實數據.GAN的結構如圖1所示.

圖1. 生成對抗網路的基本架構

近兩年來學術界相繼提出了條件生成對抗網路(CGAN),信息生成對抗網路(InfoGAN)以及深度卷積生成對抗網路(DCGAN)等眾多GAN的變種,下圖2來自於去年一篇Image-to-Image Translation with Conditional Adversarial Nets論文,我們可以看到GAN已經被引入到了各種以往深度神經網路的任務中,例如從分割圖像恢復原圖像(左上角第一對),給黑白圖片上色(右上角第一對),根據紋理圖上色(右下角第一對),另外,GAN還可以做圖像超解析度,動態場景生成等,關於GAN的更多應用請見另一篇博客深度學習在計算機視覺領域的前沿進展.

圖2.Image to image圖像翻譯

仔細想來,這些任務,其實都是傳統的深度神經網路可以做的,例如自編碼器(AutoEncodor)和卷積反卷積架構可以做到的,我們不禁要想,GAN相比傳統的深度神經網路,它的優勢在哪裡?前段時間,我也一直比較迷惑,中文能查到的資料,就是Ian Goodfellow在生成對抗網路(GAN)論文最後總結的幾點,如下:

優點

  • 模型只用到了反向傳播,而不需要馬爾科夫鏈
  • 訓練時不需要對隱變數做推斷
  • 理論上,只要是可微分函數都可以用於構建D和G,因為能夠與深度神經網路結合做深度生成式模型
  • G的參數更新不是直接來自數據樣本,而是使用來自D的反向傳播(這也是與傳統方法相比差別最大的一條吧)

缺點

  • 可解釋性差,生成模型的分布 Pg(G)沒有顯式的表達
  • 比較難訓練,D與G之間需要很好的同步,例如D更新k次而G更新一次

上面只是一個比較簡單的解釋,很幸運,我在Quora上查到了兩個個類似問題,GAN與其他生成模型相比有什麼優勢,這個問題只有一個人回答,很幸運的是,他就是Ian Goodfellow,GAN的發明人,他在Quora上的簽名就是」I invented generative adversarial networks」. 而另一個問題是GANs的優缺點是什麼?, 良心大神Goodfellow也做了回答! 我把他的兩個回答翻譯如下:

分割線

—————————————————————————————————–

原問題1:What is the advantage of generative adversarial networks compared with other generative models?

生成對抗網路相比其他生成模型的優點?

Ian Goodfellow回答:

—————————————————————————————————–

相比其他所有模型,我認為

  • 從實際結果來看,GAN看起來能產生更好的生成樣本
  • GAN框架可以訓練任何生成網路(理論上,然而在實踐中,很難使用增強學習去訓練有離散輸出的生成器),大多數其他架構需要生成器有一些特定的函數形式,就像輸出層必須是高斯化的. 另外所有其他框架需要生成器整個都是非零權值(put non-zero mass everywhere),然而,GANs可以學習到一個只在靠近真實數據的地方(神經網路層)產生樣本點的模型( GANs can learn models that generate points only on a thin manifold that goes near the data.)
  • 沒有必要遵循任何種類的因子分解去設計模型,所有的生成器和鑒別器都可以正常工作
  • 相比PixelRNN, GAN生成採樣的運行時間更短,GANs一次產生一個樣本,然而PixelRNNs需要一個像素一個像素的去產生樣本;
  • 相比VAE, GANs沒有變分下界,如果鑒別器訓練良好,那麼生成器可以完美的學習到訓練樣本的分布.換句話說,GANs是漸進一致的,但是VAE是有偏差的
  • 相比深度玻爾茲曼機, GANs沒有變分下界,也沒有棘手的配分函數,樣本是一次生成的,而不是重複的應用馬爾科夫鏈來生成的
  • 相比GSNs, GANs產生的樣本是一次生成的,而不是重複的應用馬爾科夫鏈來生成的;
  • 相比NICE和Real NVE,GANs沒有對潛在變數(生成器的輸入值)的大小進行限制;

    說實話, 我認為其他的方法也都是很了不起的,他們相比GANs也有相應的優勢.

    —————————————————————————————————–

原問題2: What are the pros and cons of using generative adversarial networks (a type of neural network)?

生成對抗網路(一種神經網路)的優缺點是什麼?

It is known that facebook has developed a means of generating realistic-looking images via a neural network. They used 「GAN」 aka 「generative adversarial networks」. Could this be applied generation of other things, such as audio waveform via RNN? Why or why not?

facebook基於神經網路開發了一種可以生成現實圖片的方法,他們使用GAN,又叫做生成對抗網路,它能應用到其他事物的生成嗎,例如通過RNN生成音頻波形,可以嗎?為什麼?

Ian Goodfellow回答:

—————————————————————————————————–

優勢

  • GANs是一種以半監督方式訓練分類器的方法,可以參考我們的NIPS paper和相應代碼.在你沒有很多帶標籤的訓練集的時候,你可以不做任何修改的直接使用我們的代碼,通常這是因為你沒有太多標記樣本.我最近也成功的使用這份代碼與谷歌大腦部門在深度學習的隱私方面合寫了一篇論文
  • GANs可以比完全明顯的信念網路(NADE,PixelRNN,WaveNet等)更快的產生樣本,因為它不需要在採樣序列生成不同的數據.
  • GANs不需要蒙特卡洛估計來訓練網路,人們經常抱怨GANs訓練不穩定,很難訓練,但是他們比訓練依賴於蒙特卡洛估計和對數配分函數的玻爾茲曼機簡單多了.因為蒙特卡洛方法在高維空間中效果不好,玻爾茲曼機從來沒有拓展到像ImgeNet任務中.GANs起碼在ImageNet上訓練後可以學習去畫一些以假亂真的狗
  • 相比於變分自編碼器, GANs沒有引入任何決定性偏置( deterministic bias),變分方法引入決定性偏置,因為他們優化對數似然的下界,而不是似然度本身,這看起來導致了VAEs生成的實例比GANs更模糊.
  • 相比非線性ICA(NICE, Real NVE等,),GANs不要求生成器輸入的潛在變數有任何特定的維度或者要求生成器是可逆的.
  • 相比玻爾茲曼機和GSNs,GANs生成實例的過程只需要模型運行一次,而不是以馬爾科夫鏈的形式迭代很多次.

劣勢

  • 訓練GAN需要達到納什均衡,有時候可以用梯度下降法做到,有時候做不到.我們還沒有找到很好的達到納什均衡的方法,所以訓練GAN相比VAE或者PixelRNN是不穩定的,但我認為在實踐中它還是比訓練玻爾茲曼機穩定的多.
  • 它很難去學習生成離散的數據,就像文本
  • 相比玻爾茲曼機,GANs很難根據一個像素值去猜測另外一個像素值,GANs天生就是做一件事的,那就是一次產生所有像素, 你可以用BiGAN來修正這個特性,它能讓你像使用玻爾茲曼機一樣去使用Gibbs採樣來猜測缺失值,

    我在伯克利大學的課堂上前二十分鐘講到了這個問題.課程鏈接,油管視頻,請自帶梯子~

    —————————————————————————————————–

    以上是Ian Goodfellow的原答案的翻譯,如有翻譯不妥的地方,請指正!

    最近在一篇GAN生成圖片的論文中看到,作者提出使用GAN與普通的卷積反卷積相比,GAN能獲得更好的泛化結果. 這裡不知道是不是把鑒別器D當做一個監控器,當D的精度接近50%了,就停止訓練,防止生成器過擬合.

    GAN還有什麼其他有點,希望知友們提出,然後我會加在文章中.謝謝~


deep learning免去了feature engineering,gan在我看來可以省去loss engineering。看pix2pix做各種segmentation,colorization,直接一個discriminator一上,就省去了亂七八糟的loss設計(雖然還沒有人工設計的好)。one size fits all的感覺。就跟現在大家幹什麼就直接上cnn和rnn一樣,以後大家loss就直接啪的一個discriminator(無腦猜想)


不像貝葉斯生成模型,卷積是一種信息損失的操作,所以用來做識別的卷積神經網路很難再從低維數據生成原始數據。所以GAN這種結構的出現,很大程度上解決了神經網路的生成問題,或者說是第一個用神經網路真正做生成的方法(auto-encoder原始目的只是為了降維,並不是為了生成)。

然後說說GAN的作用,也就是為什麼GAN會火了(有部分原因可能是因為Lecun的讚賞)。如果GAN只是用來生成一些像真是數據一樣的數據的話,那不會有像現在這麼火。更多的,或者對於機器學習研究員來說,看待的最關鍵一點應該是GAN可以用來 擬合數據分布 。什麼叫擬合數據分布,就是給你一個訓練數據,你能通過GAN這個工具,產生和這個數據分布相似的一些數據。有了擬合數據分布的思想,並在這上面做文章,才是一個真正的機器學習研究人員的素質。比如WGAN,也就是考慮到了GAN是一種擬合數據分布的工具,那麼它可能和一些擬合數據分布的函數比如KL散度等是等價的,那麼作者朝這個方向進行探索,自然能得出相應的結論,並且提出改進辦法,使其成為風靡一時的工作。其實,可以做的工作還有很多,比如,既然你有一個產生類似數據的工具,那麼其實你就有了一個做數據增強的工具,也就是對於你的神經網路來說,你有更多的訓練數據了。很多人可能會覺得這個想法很簡單,其實並不然。因為GAN本身用神經網路訓練,如果你能把它融入你的一個任務當中,只用加一些損失函數,其實就能提高你任務上的性能,而且很多人還會覺得你性能好是因為加了神奇的損失函數,其實不過是用GAN做了一些隱式的數據增強吧了。但是你可以隨便吹自己的模型是多麼厲害,損失函數設計得多麼有意義,多繞幾下,別人也就忘了不就是GAN增強了數據嘛。因為GAN給各個任務開了一條提高性能的大門,那每把GAN用在一個任務上,就得引用GAN這篇論文,引用量上去了自然就火了。而且原始GAN是難訓練或者效果差的,那麼這些嗷嗷待哺的任務和相關研究人員自然也會更多關注GAN的發展,以期望在自己的任務上用到最新,最好的技術。所以,最近做提高和改進GAN的工作也取得了極大的關注度。那麼再解釋一下這個工作變火的本質:以前的神經網路存在生成困難的問題,GAN提供了解決辦法,該方法簡單、強大、適用性廣。

很多人弄不清楚GAN和VAE的區別,覺得兩個模型都可以做生成,為什麼GAN會這麼火。GAN的目的是為了生成,而VAE目的是為了壓縮,目的不同效果自然不同。比如,由於二範數的原因,VAE的生成是模糊的。而GAN的生成是犀利的。最近也有VAE和GAN結合的工作,可自行查閱。

我覺得GAN只是用來擬合數據分布,和人類的靈感創作之類的概念還是不一樣的。比如人作畫,不是一個像素一個像素地畫圖,而是藉助一些外部工具,比如筆刷,顏料什麼的去作畫。所以人能很容易地學會畫畫,並且畫出有意義的圖片,而GAN到現在還是只能生成一些低解析度的圖片。所以,通用AI應該是一個能夠學習如何使用工具的AI。比如,讓它通過Photoshop,用Photoshop裡面的筆刷工具去生成一幅圖片。也就是說,對於自然界的一些高維信息,我們可以用一些比較通用的(預訓練的)神經網路先去提取低維特徵,然後再去擬合這個低維特徵的分布(而不是直接去擬合原始數據的分布)。深度學習發展了這麼年,雖然沒能出現通用人工智慧,至少從原始數據中提取一些低維特徵向量還是沒問題的,也就是說我們至少做到了通用人工智慧的初級感知(相當於動物的本能)。希望下一步,我們能在這些本能的基礎上構建更加智慧的通用AI。

另外什麼納什均衡,KL,JS散度只是一些技術分析,在知乎這種大眾平台說這些沒什麼意義,專業人員可自行查閱相關論文(後面有個人說:「個人感覺,gan之所以比其他生成模型更優秀,是因為gan在本質上相當於最優化js距離而不是kl距離。」 這說得好像js距離和GAN的loss的等價是他提出來的一樣,明明就有相關論文很好的說明了這一點,難道還需要你來感覺一下?最討厭這種不自己真正理解問題,拿別人觀點或結論裝逼的人)。很多理論論文的lowerbound,optmization等推導,對實際工作沒有太多指導意義,或者對現實數據並不適用,而且不利於科普,我是不會講的。


個人感覺,gan之所以比其他生成模型更優秀,是因為gan在本質上相當於最優化js距離而不是kl距離。雖然後者會得到一個更general的分布,但是從生成角度來講,一個special的分布更能使人感到生成的數據更佳「真實」


在生成式對抗網路,判別網路相當於提供了一種根據任務、數據集不同而自適應的loss,可以稱之為GAN-loss,相對於loss固定的非對抗網路,更具健壯性。


GAN只是為了訓練生成器,訓練得到的判別器只是為了判斷生成器的圖像的真實度。


這篇英偉達的論文也有點意思,可以看看:

深度增長網路: 構建穩定,高質量,多樣的GAN對抗模型,英偉達論文選讀2


各位大神,我有一個疑問,就是訓練的時候返回的結果如果是64張圖,這是跟輸入圖像的batchsize密切相關的還是從所有生成圖片里隨機選了64張? 而且輸入的也是64張圖時,如何訓練到數據集中的所有圖片的(一個epoch)?


有一個疑問:訓練看到的結果,就是一組近似正式的圖片而已。那這些圖片經判別器後的可能性卻無法表示,那也就無法說明訓練的生成器的優劣!很雞肋~~~


推薦閱讀:

在機器學習的演算法中, 矩陣運算的效率總是優於for循環嗎?
應該如何理解No Free Lunch Theorems for Optimization?
Adaboost可不可以使用其他的損失函數?
怎麼從通俗意義上理解邏輯回歸的損失函數?
Metropolis Hasting演算法如何推導出Gibbs Sampling?

TAG:人工智慧 | 機器學習 | 神經網路 | 深度學習DeepLearning | 生成對抗網路GAN |