天天看點

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

前面介紹了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):

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

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

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

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中構成條件機率,如下圖所示:

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

用于指導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的造:

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

四個堆疊的卷積操作來構成生成器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的結構:

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

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的網絡結構:

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

關鍵點在于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距離對比:

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

WGAN的訓練算法:

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

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

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

繼續閱讀