GAN就對了:Generative Adversarial Nets

前言

Generative Adversarial Nets,生成對抗網絡,也就是大家經常聽到的 GAN,由Ian Goodfellow於2014年首先提出,之後迅速風靡學術圈。就連深度學習先驅之一的Yann LeCun也給予了高度評價,認爲"GAN及其變種是數十年來機器學習領域最有趣的點子"。有關GAN的研究層出不窮,彷彿沒有什麼是“GAN”不出來的。

發展現狀

根據GAN的發展情況,梳理相關內容:

名稱 發表時間 解決問題 中文名稱 論文鏈接
GAN 10 Jun 2014 GAN系列的開山之作 生成對抗網絡 https://arxiv.org/pdf/1406.2661.pdf
CGAN 6 Nov 2014 原始GANs通過輸入隨機噪聲來生成數據,但是無法指定生成內容。CGAN通過將一個one-hot向量連接到輸入的隨機噪聲以告訴生成器生成特定類別的圖像,從而解決輸出不可控的問題。 條件生成對抗網絡 https://arxiv.org/pdf/1411.1784.pdf
DCGAN 19 Nov 2015 原始GANs不一定使用基於卷積的操作,而是依賴於標準的多層感知器架構。DCGAN通過巧妙的設計卷積網絡和採用策略改進原始GANs。 深度卷積生成對抗網絡 https://arxiv.org/pdf/1511.06434.pdf
CoGAN 24 Jun 2016 比一個GAN更好的是什麼?兩個GAN!CoGAN所訓練的就是兩個GAN而不是一個。 耦合生成對抗網絡 https://arxiv.org/pdf/1606.07536v2.pdf
CycleGAN 30 Mar 2017 CycleGAN 致力於解決圖像到圖像映射的問題,主要用於風格遷移。可以進行未配對的圖像到圖像的轉換。 Cycle生成對抗網絡 https://arxiv.org/pdf/1703.10593.pdf
WGAN 26 Jan 2017 WGAN提出了一種新的損失函數,有着非常好的性質。 Wasserstein 生成對抗網絡 https://arxiv.org/pdf/1701.07875.pdf
ProGAN 27 Oct 2017 ProGAN通過增加生成圖像的分辨率來幫助穩定 GAN的訓練。 生成對抗網絡的漸進式增長 https://arxiv.org/pdf/1710.10196.pdf
SAGAN 21 May 2018 SAGAN 使用了自注意力機制。 自注意力生成對抗網絡 https://arxiv.org/pdf/1805.08318.pdf
BigGAN 28 Sep 2018 大Batch Size,採用先驗分佈 z 的“截斷技巧”,對模型穩定性的控制。 大生成對抗性網絡 https://arxiv.org/pdf/1809.11096.pdf
StyleGAN 12 Dec 2018 StyleGAN 不專注於架構和損失函數,而是改進了GANs對生成的圖像進行精細控制的能力 。它可以與任何GAN一起使用。 基於風格的生成對抗網絡 https://arxiv.org/pdf/1812.04948.pdf
··· ··· ··· ··· ···

論文《Generative Adversarial Nets》探祕

一、什麼是GAN?

百度百科:生成式對抗網絡(GAN, Generative Adversarial Networks )是一種深度學習模型,是近年來複雜分佈上無監督學習最具前景的方法之一。模型通過框架中(至少)兩個模塊:生成模型(Generative Model)和判別模型(Discriminative Model)的互相博弈學習產生相當好的輸出。原始 GAN 理論中,並不要求 G 和 D 都是神經網絡,只需要是能擬合相應生成和判別的函數即可。但實用中一般均使用深度神經網絡作爲 G 和 D 。一個優秀的GAN應用需要有良好的訓練方法,否則可能由於神經網絡模型的自由性而導致輸出不理想。

百科中大致說明了GAN的結構、核心思想和問題。
GAN由兩個部分組成:

  • 生成器 Generator,例如生成一張新的貓咪圖片(不在數據集裏)
  • 判別器 Discriminator,例如給定一張圖,判斷這張圖裏的動物是貓還是狗
    在這裏插入圖片描述

核心思想:
零和博弈,通過讓生成器 Generator和判別器 Discriminator相互對抗,Generator試圖生成接近真實的數據,Discriminator試圖區分真實的數據和由Generator生成的數據。最終達到一個“平衡”,即Generator生成的數據足夠真實,Discriminator只是是隨機猜測,無法再區分真實數據與生成數據的區別。

存在的問題:

  • 難訓練
  • 有模式崩潰(Model Collapse)的可能

二、能GAN什麼?

在這裏插入圖片描述

  • 圖像生成
    GAN最常使用的地方就是圖像生成,如超分辨率任務,語義分割等等。
  • 數據增廣
    對於小數據集,數據量不足,可以通過使用GAN生成的圖像來做數據增廣。

三、GAN的原理

真實數據集的分佈爲Pdata(x)P_{data}(x),對於生成器Generator而言,它的目標是希望能夠學習到真實樣本的分佈,這樣就可以隨機生成以假亂真的樣本。
在這裏插入圖片描述
給定輸入噪聲 Pz(z)P_z(z),現有的 Generator 生成的數據分佈假設爲PG(z;θg)P_G(z;θ_g),這是一個由 θgθ_g控制的分佈,θθ是這個分佈的參數(如果是高斯混合模型,那麼θθ就是每個高斯分佈的平均值和方差)。然後定義判別器D(x;θd)D(x; θ_d),其中D(x)D(x)表示xx來自PdataP_{data}而非PgP_g的概率。
我們的目標是訓練判斷器D以使其能最大可能地區分來自PdataP_{data}PgP_g的樣本,同時訓練生成器G以最小化log(1D(G(z)))log(1-D(G(z))),從而生成D難辨真假的數據。D和G的博弈的價值函數V(G,D)V(G, D):
minGmaxDV(D,G)=ExPdata(x)[logD(x)]+EzPz(z)[log(1D(G(z)))]{\min_G}{\max_D} V(D, G) = \mathbb {E}_{x∼P_{data}(x)}[log D(x)] +\mathbb {E}_{z∼P_z(z)}[log(1-D(G(z)))]
其中,D(x)D(x)表示D判斷真實數據是否是真實的概率,D(G(z))D(G(z))表示D判斷G生成的數據是否是真實的概率。
G希望D(G(z))D(G(z))儘可能大,此時V(G,D)V(G, D)會變小,即minG\min_G
D希望D(x)D(x)儘可能大,D(G(z))D(G(z))儘可能小,此時V(G,D)V(G, D)會變大,即maxD\max_D
交替訓練最終達到納什平衡狀態。
在這裏插入圖片描述
論文中給出的網絡訓練算法如下,詳解後續再做補充:
在這裏插入圖片描述
論文鏈接:
https://arxiv.org/pdf/1406.2661.pdf
代碼鏈接:
http://www.github.com/goodfeli/adversarial

參考資料:

[1] 深度學習最強資源推薦:一文看盡 GAN 的前世今生,https://www.sohu.com/a/325882199_114877
[2] GAN(生成式對抗網絡)百度百科,https://baike.baidu.com/item/Gan/22181905?fr=aladdin
[3] GAN筆記——理論與實現,https://www.cnblogs.com/fydeblog/p/9439024.html
[4] GAN原理學習筆記,https://zhuanlan.zhihu.com/p/27295635
[5] AdversarialNetsPapers, https://github.com/zhangqianhui/AdversarialNetsPapers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章