<模型匯總_5>生成對抗網絡GAN及其變體SGAN_WGAN_CGAN_DCGAN_InfoGAN_StackGAN

2021-02-21 深度學習與NLP

前面介紹了CNN(Convolutional Neural Network)、BNN(Binarized neural network)、dual-learning NMT和DBN,以及深度學習優化算法Batch Normalization和Layer Normalization。感興趣的同學可以添加微信公眾號「深度學習與NLP」,回復關鍵詞「CNN」、「BNN」、「dual」、「DBN」、BN和LN獲取對應文章連結。今天介紹GAN及其一些變體模型。

今天主要介紹2016年深度學習最火的模型生成對抗網絡(Generative Adversarial Net)-GAN。GAN是由現任谷歌大腦科學家的Ian Goodfellow於2014年提出來的一種基於對抗訓練(Adversarial training)過程來訓練生成模型(Generative Model)的一種新的深度學習框架。GAN是由兩個模型組成:一個生成模型G,用於獲得輸入樣本x的分布(表示學習representation learning觀點認為,深度學習對輸入樣本對(x,y)關係擬合過程,其實就是在學習輸入樣本x的分布),一個判別模型(Discriminative Model)D,用於估計一個樣本是真實的樣本而不是由G生成的樣本的概率。

先簡單介紹下傳統深度學習模型的分類。深度學習產生之初被分為生成模型和判別模型兩大類。生成模型典型網絡有深度信念網絡(Deep Belief Network,DBN)、堆疊自動編碼器(Stacked Auto-Encoder,SAE)和深度玻爾茲曼機(Deep Boltzmann Machine,DBM),生成模型認為模型的輸出樣本y是由模型的輸入樣本x生成的,一定存在一個最優的輸入樣本x*使得輸出的y的值最大化,通過生成模型可以學習到輸入樣本x的表示representation。它的最大優勢就是直接從輸入樣本x中進行無監督或半監督的學習,減少了對帶標註樣本的需求。判別模型認為模型的輸入樣本x是由輸出樣本y決定的,典型的網絡如卷積神經網絡(Convolution Neural Network,CNN)。個人認為,GAN的產生將二者結合起來,生成模型G根據輸入x產生輸出y』,並傳遞給判別模型D判斷是否是真實得數據。

 

GAN:Generative Adversarial Nets.Ian J. Goodfellow, Jean Pouget-Abadie.2014.06.10

 NIPS 2016 Tutorial:Generative Adversarial Networks.Ian Goodfellow.2017.01.09

GAN的訓練:GAN的訓練分為兩個部分:G的訓練目標是最大化D做出錯誤識別的概率,就是儘可能讓D判別出錯;D的訓練目標則是儘可能把G生成的樣本找出來。極限情況下,當G能夠完全恢復輸入樣本X的分布的時候,D已經把G生成的樣本識別出來,所以G的輸出概率處處為1/2。與傳統的生成模型,如DBN相比,通過這種方式來訓練生成模型,不需要計算複雜的馬爾科夫鏈或者像CD-K算法那樣進行展開的近似推理過程。

目標函數的構造,基於帶有噪聲的輸入變量p(z)定義了一個先驗得到輸入z,然後用G(z,Q)把輸入z映射到生成器輸出y』,G是處處可導的且採用一個多層神經網絡來表示,用它的參數Q來擬合輸入樣本x的分布。再用一個多層網絡來表示D,輸出一個標量,表示來源於x而不是p(z)的概率。對於G來說等價於最小化log(1-D(G(z)))期望;對於D來說,等價於最大logD(x)的期望,類似於一個minimax的遊戲。由此可以得到GAN的目標函數V(G,D):

Outer loop訓練完一次G之後,inner loop再去訓練D,非常耗時,而且一直在一個訓練集上訓練容易造成過擬合。因此,在實際GAN訓練過程中,D訓練K次之後再訓練G,這樣做的目的是使D保持在一個optimum的狀態,讓G逐步慢慢變化。得到訓練算法:

Ian GoodFellow所提出的生成對抗網絡或對抗訓練的理論是一個通用的框架,基於GAN也產生了很多變體,適用於各種場景中解決實際問題,展示了GAN家族的強大威力,下面簡要介紹其中比較有代表一些模型。

 

CGAN:Conditional generative adversarial nets for convolutional face generation.Jon Gauthier.2015.03

 Conditional Generative Adversarial Nets.Mehdi Mirza.2014.11.06

解決什麼問題:圖像標註、圖像分類和圖像生成過程中,存在兩類問題:其一、輸出圖像的label比較多,成千上萬類別;其二、對於一個輸入x,對應合適輸出y(label)的類別multi-modal(多個),怎麼樣選擇一個合適類別是個問題。CGAN嘗試在生成器G和判別器端加入額外的條件信息(additional information)來指導GAN兩個模型的訓練。

怎麼做:條件化(conditional)GAN做法就是直接把額外的信息(y)直接添加到生成器G和判別器D的的目標函數中,與輸入Z和X中構成條件概率,如下圖所示:

用於指導G和D訓練的額外信息可以是各種類型(multi-modal)的數據,已圖像分類為例,可以是label標籤,也可以是關於圖像類別或其他信息的text文本描述。

 

DCGAN:UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS.Alec Radford & Luke Metz.2016.01.07

解決什麼問題:把有監督學習的CNN與無監督學習的GAN整合到一起提出了Deep Convolutional Generative Adversarial Networks - DCGANs,是生成器和判別器分別學到對輸入圖像層次化的表示。

本文的最大貢獻:1、將CNN與GAN結合在一起提出了DCGANs,使用DCGANs從大量的無標記數據(圖像、語音)學習到有用的特徵,相當於利用無標記數據初始化DCGANs的生成器和判別器的參數,在用於有監督場景,比如,圖像分類。2、表示學習representation learning的工作:嘗試理解和可視化GAN是如何工作的,多層的GAN的中間表示intermediate representation 是什麼。3、給出了一些穩定訓練DCGANs的guidelines。

DCGAN的網絡結構:

生成器構G的造:

四個堆疊的卷積操作來構成生成器G,沒有採用全連接層。

 

InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets.Xi Chen, Yan Duan, Rein Houthooft, John Schulman.2016.06.12

解決什麼問題:無監督學習或表示學習(representation learning)可以看做是從大量無標記數據中抽取有價值的特徵、或學習一種重要的隱特徵(semantic features)表示(representation)的問題。但無監督學習又是ill-posed,因為很多與無監督學習相關的下遊的任務在訓練時是未知的,而務監督學習也是一種分離/拆解 表示(disentangled representation),有助於下遊相關但未知任務的學習,因為disentangled representation可以學習到輸入樣本的salient attribute。無監督學習中最重要的的模型就是生成模型Generative model,比如,生成對抗網絡GAN和變分自動編碼器()VAE。本文從disentangled representation角度出發,把信息理論(Information-theoretic)與GAN相結合提出InfoGAN,採用無監督的方式學習到輸入樣本X的可解釋且有意義的表示(representation)。

怎麼做:通過最大化隱變量(latent variable)的一個子集與observation之間的互信息

 

SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient.Lantao Yuy, Weinan Zhangy, Jun Wangz, Yong Yuy.2016.12.09

解決什麼問題:GAN:用一個判別模型D去指導生成模型G的訓練,在generating real-valued 打他取得巨大成功,但處理的都是連續可導的數據,比如圖像,鮮有涉及離散數據,如文本。原因有兩個:其一,梯度從判別器D沒有辦法反向傳遞會生成器G,G離散不可導;其二,判別器D可以評測一個完整序列的score,但沒法評測只生成了一部分的partially sequence現在和未來的score。因此,本文提出SeqGAN解決這兩個問題。

怎麼做:借鑑了強化學習中的reward的思想,在判別器D端,通過一個完整的sequence序列構造一個reward反饋會生成器G來指導生成器G的訓練,通過RL中的策略梯度算法(policy gradient method)來優化G的參數,繞過了上面兩個問題。

SeqGAN的結構:

 

StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks.Han Zhang, Tao Xu, Hongsheng Li, Shaoting Zhang.2016.12.10

解決什麼問題:根據text description生成圖像有很多應用場景,比如圖片輔助裁剪、計算機輔助設計等。但最大的問題是符合text描述的場景有很多(multi-modle),如何從中選擇最佳的場景,生成高清晰的圖片是個問題。本文基於GAN來做這個問題,原來方法只能生成64X64的low resolution圖片,本文使用Stack GAN生成了256X256的高清晰度圖片,並且在CUB和Oxford-102數據集取得了比現有方法分別高28.47%和20.30%的improvement,這真的很厲害,也展示了GAN的強大功能。

怎麼做:提出了一個堆疊的GAN模型用於「text-to-image」中生成高解析度的圖像,stack-1 GAN生成一張包含text文本所描述物體的初級形狀和基本顏色的,像素為64X64的低解析度圖片,stack-2 GAN 根據GAN-1輸出的低解析度圖片做為輸入,加上text文本描述,進一步rectify defects和添加一些細節信息,進行refinement過程後生成一張256X256的高解析度圖片。

Stack GAN的網絡結構:

關鍵點在於Stack-GAN的兩個GAN做麼構建,怎麼訓練

 

WGAN:Wasserstein GAN.Martin Arjovsky, Soumith Chintala, and Lon Bottou.2017.03.09

  Improved Training of Wasserstein GANs.Ishaan Gulrajani1, Faruk Ahmed1, Martin Arjovsky2.2017.03.31

解決什麼問題:GAN在訓練很麻煩,需要精心設計生成器G和判別器D的網絡結構,調整很多的超參數,經常不收斂。為了解決這個問題,讓GAN訓練起來更容易,本文提出了Wasserstein GAN(WGAN)。

怎麼做:深入分析由GAN所優化的值函數(value function)的收斂特性,指出傳統GAN不穩定是因為其基於Jensen-Shannon 差異(divergence)構造的值函數在某一地方不可導,導致生成器G訓練不穩定。因此,提出了Earth-Mover距離,又稱Wasserstein-1 距離W(q,p),基於Wasserstein distance來構造值函數,代替傳統GAN中基於Jensen-Shannon 差異(divergence)的值函數。Wasserstein distance具有更好的特性,Jensen-Shannon divergence可能不連續,在不連續的地方不能提供穩定的梯度用於生成器G的參數優化;相比之下,Earth-Mover距離處處連續,處處可導。

Jensen-Shannon距離與Wassertein距離對比:

WGAN的訓練算法:


更多深度學習在NLP方面應用的經典論文、實踐經驗和最新消息,歡迎關注微信公眾號「深度學習與NLP」或「DeepLearning_NLP」或掃描二維碼添加關注。

相關焦點

  • GAN快速入門資料推薦:17種變體的Keras開原始碼,附相關論文
    夏乙 編譯整理量子位 出品 | 公眾號 QbitAI圖片來源:Kaggle blog從2014年誕生至今,生成對抗網絡(GAN)始終廣受關注,已經出現了200多種有名有姓的變體。在這類GAN變體中,生成器生成的每張圖像,都帶有一個類別標籤,鑑別器也會同時針對來源和類別標籤給出兩個概率分布。論文中描述的模型,可以生成符合1000個ImageNet類別的128×128圖像。
  • 輕鬆構建 PyTorch 生成對抗網絡(GAN)
    主要內容課題及方案概覽模型的開發環境生成對抗網絡模型模型的訓練和驗證結論與總結課題及方案概覽下面顯示的兩組手寫體數字圖片,您是否能從中夠辨認出由計算機生成的『手寫』字體是其中哪一組?『模仿手寫字體』與人像生成的基本原理和工程流程基本是一致的,雖然它們的複雜性和精度要求有一定差距,但是通過解決『模仿手寫字體』問題,可以為生成對抗網絡的原理和工程實踐打下基礎,進而可以逐步嘗試和探索更加複雜先進的網絡架構和應用場景。《生成對抗網絡》(GAN)由 Ian Goodfellow 等人在 2014年提出,它是一種深度神經網絡架構,由一個生成網絡和一個判別網絡組成。
  • GAN(生成對抗網絡)萬字長文綜述
    GAN的基本介紹生成對抗網絡(GAN,Generative Adversarial Networks)作為一種優秀的生成式模型,引爆了許多圖像生成的有趣應用。GAN的基本概念GAN(Generative Adversarial Networks)從其名字可以看出,是一種生成式的,對抗網絡。再具體一點,就是通過對抗的方式,去學習數據分布的生成式模型。所謂的對抗,指的是生成網絡和判別網絡的互相對抗。生成網絡儘可能生成逼真樣本,判別網絡則儘可能去判別該樣本是真實樣本,還是生成的假樣本。示意圖如下:
  • 【GAN】四、CGAN論文詳解與代碼詳解
    CGAN生成手寫數字的keras代碼請移步:https://github.com/Daipuwei/CGAN-mnist。一、 GAN回顧為了兼顧CGAN的相關理論介紹,我們首先回顧GAN相關細節。GAN主要包括兩個網絡,一個是生成器和判別器,生成器的目的就是將隨機輸入的高斯噪聲映射成圖像(「假圖」),判別器則是判斷輸入圖像是否來自生成器的概率,即判斷輸入圖像是否為假圖的概率。
  • 萬字綜述之生成對抗網絡(GAN)
    文章目錄如下:GAN的基本介紹生成對抗網絡(GAN,Generative Adversarial Networks)作為一種優秀的生成式模型,引爆了許多圖像生成的有趣應用。GAN的基本概念GAN(Generative Adversarial Networks)從其名字可以看出,是一種生成式的,對抗網絡。再具體一點,就是通過對抗的方式,去學習數據分布的生成式模型。所謂的對抗,指的是生成網絡和判別網絡的互相對抗。
  • 【專知薈萃11】GAN生成式對抗網絡知識資料全集(理論/報告/教程/綜述/代碼等)
    參考連結:[https://github.com/soumith/ganhacks]The GAN Zoo千奇百怪的生成對抗網絡,都在這裡了。:[https://arxiv.org/pdf/1701.00160.pdf]訓練GANs的技巧和竅門參考連結:[https://github.com/soumith/ganhacks]OpenAI生成模型參考連結:[https://blog.openai.com/generative-models/]用Keras實現MNIST生成對抗模型
  • GAN對抗網絡入門教程
    A Beginner's Guide to Generative Adversarial Networks (GANs) https://skymind.ai/wiki/generative-adversarial-network-gan生成對抗網絡(英語:Generative Adversarial Network,簡稱GAN)是非監督式學習的一種方法,通過讓兩個神經網絡相互博弈的方式進行學習
  • GAN生成式對抗網絡及應用詳解
    從本節開始,我們將討論如何將生成對抗網絡(GAN)應用於深度學習的某個領域。
  • TF - GAN入門:TensorFlow 2.0 的輕量級 GAN 庫
    2017 年,谷歌推出了用於訓練和評估 生成對抗網絡 (Generative Adversarial Networks, GAN) 的輕量級庫 TF-GAN。自那時起,TF-GAN 便在大量極具影響力的論文和項目中被廣泛應用。
  • 生成對抗網絡GANs學習路線
    導讀MLmindset作者發布了一篇生成對抗網絡合集文章,整合了各類關於GAN的資源,如GANs文章、模型、代碼、應用、課程、書籍
  • stackGAN通過文字描述生成圖片的V2項目
    Citing StackGAN++If you find StackGAN useful in your research, please consider citing:@article{Han17stackgan2
  • 深度 | 生成對抗網絡初學入門:一文讀懂GAN的基本原理(附資源)
    在這篇文章中,我們將對生成對抗網絡(GAN)背後的一般思想進行全面的介紹,並向你展示一些主要的架構以幫你很好地開始學習,另外我們還將提供一些有用的技巧,可以幫你顯著改善你的結果。GAN 的發明生成模型的基本思想是輸入一個訓練樣本集合,然後形成這些樣本的概率分布的表徵。常用的生成模型方法是直接推斷其概率密度函數。
  • 科普 | ​生成對抗網絡(GAN)的發展史
    Ian Goodfellow等人在「Generative Adversarial Networks」中提出了生成對抗網絡。學術界和工業界都開始接受並歡迎GAN的到來。GAN的崛起不可避免。首先,GAN最厲害的地方是它的學習性質是無監督的。GAN也不需要標記數據,這使GAN功能強大,因為數據標記的工作非常枯燥。其次,GAN的潛在用例使它成為交談的中心。
  • 生成對抗網絡GAN系列之二:基礎模型DCGAN、cGAN、WGAN
    上一篇生成對抗網絡GAN系列之一:基本原理和結構細講我們分解了GAN的基本原理和結構
  • 資源|帶自注意力機制的生成對抗網絡,實現效果怎樣?
    在前一段時間,Han Zhang 和 Goodfellow 等研究者提出添加了自注意力機制的生成對抗網絡,這種網絡可使用全局特徵線索來生成高解析度細節。本文介紹了自注意力生成對抗網絡的 PyTorch 實現,讀者也可以嘗試這一新型生成對抗網絡。
  • 訓練GAN,你應該知道的二三事
    ,生成器的能力比較弱,判別器這時候也比較弱,但仍然可以足夠精準的區分生成樣本和真實樣本,這樣 D(x) 就非常接近1,導致 log(1-D(x)) 達到飽和,後續網絡就很難再調整過來。,判別器給出的概率都是 0.5,這個時候就無法區分樣本到底是來自於真實樣本還是來自於生成樣本,這是最理想的情況。
  • GAN(生成對抗網絡)的最新應用狀況
    G 的 loss 包含 content loss 部分,因此 G 並非完全的非監督,它也用到了監督信息:它強制要求生成圖像提取的特徵與真實圖像提取的特徵要匹配,文中用到的特徵提取網絡為 VGG,content loss 定義如下:
  • 經典GAN實戰教程:理解並運行自己的GAN生成手寫數字
    這些輸出可用作訓練其他模型的合成數據,或僅用於產生有趣的side項目,例如GAN是什麼?GAN由一個生成網絡與一個判別網絡組成。而生成網絡則要儘可能地欺騙判別網絡。兩個網絡相互對抗、不斷調整參數,最終目的是使判別網絡無法判斷生成網絡的輸出結果是否真實。一句話解釋:G要騙過A。
  • 能生成Deepfake也能診斷癌症,GAN與惡的距離
    在蒙特婁一個酒吧,一些朋友希望他能幫忙看看手頭上一個棘手的項目:計算機如何自己生成圖片。研究人員已經使用了神經網絡(模擬人腦的神經元網絡的一種算法),作為生成模型來創造合理的新數據。但結果往往不盡人意。計算機生成的人臉圖像通常不是模糊不清,就是缺耳少鼻。
  • 資源 | NIPS 2017 Spotlight論文Bayesian GAN的TensorFlow實現
    項目連結:https://github.com/andrewgordonwilson/bayesgan/論文:Bayesian GAN論文連結:https://arxiv.org/abs/1705.09558摘要:生成對抗網絡(GAN)可以隱性地學習難以用顯性似然