1. 程式人生 > >GAN:生成式對抗網路介紹和其優缺點以及研究現狀

GAN:生成式對抗網路介紹和其優缺點以及研究現狀

本博文是轉載自一篇博文,介紹GAN(Generative Adversarial Networks)即生成式對抗網路的原理以及GAN的優缺點的分析和GAN網路研究發展現狀。下面是內容。

1. 生成式模型

1.1 概述

    機器學習方法可以分為生成方法(generative approach)和判別方法(discriminative approach),所學到的模型分別稱為生成式模型(generative model)和判別式模型(discriminative model)[1 李航]。生成方法通過觀測資料學習樣本與標籤的聯合概率分佈P(X, Y),訓練好的模型能夠生成符合樣本分佈的新資料,它可以用於有監督學習和無監督學習。在有監督學習任務中,根據貝葉斯公式由聯合概率分佈P(X,Y)求出條件概率分佈P(Y|X),從而得到預測的模型,典型的模型有樸素貝葉斯、混合高斯模型和隱馬爾科夫模型等。無監督生成模型通過學習真實資料的本質特徵,從而刻畫出樣本資料的分佈特徵,生成與訓練樣本相似的新資料。生成模型的引數遠遠小於訓練資料的量,因此模型能夠發現並有效內化資料的本質,從而可以生成這些資料。生成式模型在無監督

深度學習方面佔據主要位置,可以用於在沒有目標類標籤資訊的情況下捕捉觀測到或可見資料的高階相關性。深度生成模型可以通過從網路中取樣來有效生成樣本,例如受限玻爾茲曼機(Restricted Boltzmann Machine, RBM)、深度信念網路(Deep Belief Network, DBN)、深度玻爾茲曼機(Deep Boltzmann Machine, DBM)和廣義除噪自編碼器(Generalized Denoising Autoencoders)。近兩年來流行的生成式模型主要分為三種方法[OpenAI 首批研究]:

  • 生成對抗網路(GAN:Generative Adversarial Networks)
     
        GAN啟發自博弈論中的二人零和博弈,由[Goodfellow et al, NIPS 2014]開創性地提出,包含一個生成模型(generative model G)和一個判別模型(discriminative model D)。生成模型捕捉樣本資料的分佈,判別模型是一個二分類器,判別輸入是真實資料還是生成的樣本。這個模型的優化過程是一個“二元極小極大博弈(minimax two-player game)”問題,訓練時固定一方,更新另一個模型的引數,交替迭代,使得對方的錯誤最大化,最終,G 能估測出樣本資料的分佈。
  • 變分自編碼器(VAE: Variational Autoencoders)
     
        在概率圖形模型(probabilistic graphical models )的框架中對這一問題進行形式化——在概率圖形模型中,我們在資料的對數似然上最大化下限(lower bound)。
  • 自迴歸模型(Autoregressive models) 
        PixelRNN 這樣的自迴歸模型則通過給定的之前的畫素(左側或上部)對每個單個畫素的條件分佈建模來訓練網路。這類似於將影象的畫素插入 char-rnn 中,但該 RNN 在影象的水平和垂直方向上同時執行,而不只是字元的 1D 序列。

1.2 生成式模型的分類[重磅 | Yoshua Bengio深度學習暑期班]

全觀察模型(Fully Observed Models) 
    模型在不引入任何新的非觀察區域性變數的情況下直接觀察資料。這類模型能夠直接編譯觀察點之間的關係。對於定向型圖模型,很容易就能擴充套件成大模型,而且因為對數概率能被直接計算(不需要近似計算),引數學習也很容易。對於非定向型模型,引數學習就困難,因為我們需要計算歸一化常數。全觀察模型中的生成會很慢。下圖展示了不同的全觀察生成模型[圖片來自Shakir Mohamed的展示]: 
                這裡寫圖片描述

變換模型( Transformation Models) 
    模型使用一個引數化的函式對一個非觀察噪音源進行變換。很容易做到(1):從這些模型中取樣 (2):在不知道最終分佈的情況下僅算期望值。它們可用於大型分類器和卷積神經元網路。然而,用這些模型維持可逆性並擴充套件到一般資料型別就很難了。下圖顯示了不同的變換生成模型[圖片來自Shakir Mohamed的展示]: 
                這裡寫圖片描述

隱變數模型( Latent Variable Models) 
    這些模型中引入了一個代表隱藏因素的非觀察區域性隨機變數。從這些模型中取樣並加入層級和深度是很容易的。也可以使用邊緣化概率進行打分和模型選擇。然而,決定與一個輸入相聯絡的隱變數卻很難。下圖顯示了不同的隱變數生成模型[圖片來自Shakir Mohamed的展示]: 
                這裡寫圖片描述

1.3 生成式模型的應用

    我們需要生成(Generative models)模型,這樣就能從關聯輸入移動到輸出之外,進行半監督分類(semi-supervised classification)、資料操作(semi-supervised classification)、填空(filling in the blank)、影象修復(inpainting)、去噪(denoising)、one-shot生成 [Rezende et al, ICML 2016]、和其它更多的應用。下圖展示了生成式模型的進展(注意到縱軸應該是負對數概率)[圖片來自Shakir Mohamed的展示]: 
                這裡寫圖片描述

    另據2016 ScaledML會議IIya Sutskever的演講報告“生成模型的近期進展”介紹,生成模型主要有以下功能:

  • Structured prediction,結構化預測(例如,輸出文字);
  • Much more robust prediction,更魯棒的預測
  • Anomaly detection,異常檢測
  • Model-based RL,基於模型的增強學習

    生成模型未來推測可以加以應用的領域:

  • Really good feature learning, 非常好的特徵學習
  • Exploration in RL, 在強化學習中的探索
  • Inverse RL, 逆向增強學習
  • Good dialog that actually works, 真正使用的對話
  • “Understanding the world”, “理解世界”
  • Transfer learning, 遷移學習

2. 生成式對抗網路

2.1 GAN的思想與訓練方法

    GAN[Goodfellow Ian,GAN]啟發自博弈論中的二人零和博弈(two-player game),由[Goodfellow et al, NIPS 2014]開創性地提出。在二人零和博弈中,兩位博弈方的利益之和為零或一個常數,即一方有所得,另一方必有所失。GAN模型中的兩位博弈方分別由生成式模型(generative model)和判別式模型(discriminative model)充當。生成模型G捕捉樣本資料的分佈,判別模型是一個二分類器,估計一個樣本來自於訓練資料(而非生成資料)的概率。G和D一般都是非線性對映函式,例如多層感知機、卷積神經網路等。如圖2-1所示,左圖是一個判別式模型,當輸入訓練資料x時,期待輸出高概率(接近1);右圖下半部分是生成模型,輸入是一些服從某一簡單分佈(例如高斯分佈)的隨機噪聲z,輸出是與訓練影象相同尺寸的生成影象。向判別模型D輸入生成樣本,對於D來說期望輸出低概率(判斷為生成樣本),對於生成模型G來說要儘量欺騙D,使判別模型輸出高概率(誤判為真實樣本),從而形成競爭與對抗。 
                這裡寫圖片描述

    GAN模型沒有損失函式,優化過程是一個“二元極小極大博弈(minimax two-player game)”問題: 
                這裡寫圖片描述 
    這是關於判別網路D和生成網路G的價值函式(Value Function),訓練網路D使得最大概率地分對訓練樣本的標籤(最大化log D(x)),訓練網路G最小化log(1 – D(G(z))),即最大化D的損失。訓練過程中固定一方,更新另一個網路的引數,交替迭代,使得對方的錯誤最大化,最終,G 能估測出樣本資料的分佈。生成模型G隱式地定義了一個概率分佈Pg,我們希望Pg 收斂到資料真實分佈Pdata。論文證明了這個極小化極大博弈當且僅當Pg = Pdata時存在最優解,即達到納什均衡,此時生成模型G恢復了訓練資料的分佈,判別模型D的準確率等於50%。 
                圖2-2 生成式對抗網路演算法流程 
                                                      圖2-2 生成式對抗網路演算法流程

2.2 GAN的優勢與缺陷

  • 根據實際的結果,它們看上去可以比其它模型產生了更好的樣本(影象更銳利、清晰)。
  • 生成對抗式網路框架能訓練任何一種生成器網路(理論上-實踐中,用 REINFORCE 來訓練帶有離散輸出的生成網路非常困難)。大部分其他的框架需要該生成器網路有一些特定的函式形式,比如輸出層是高斯的。重要的是所有其他的框架需要生成器網路遍佈非零質量(non-zero mass)。生成對抗式網路能學習可以僅在與資料接近的細流形(thin manifold)上生成點。
  • 不需要設計遵循任何種類的因式分解的模型,任何生成器網路和任何鑑別器都會有用。
  • 無需利用馬爾科夫鏈反覆取樣,無需在學習過程中進行推斷(Inference),迴避了近似計算棘手的概率的難題。

    與PixelRNN相比,生成一個樣本的執行時間更小。GAN 每次能產生一個樣本,而 PixelRNN 需要一次產生一個畫素來生成樣本。 
    與VAE 相比,它沒有變化的下限。如果鑑別器網路能完美適合,那麼這個生成器網路會完美地恢復訓練分佈。換句話說,各種對抗式生成網路會漸進一致(asymptotically consistent),而 VAE 有一定偏置。 
與深度玻爾茲曼機相比,既沒有一個變化的下限,也沒有棘手的分割槽函式。它的樣本可以一次性生成,而不是通過反覆應用馬爾可夫鏈運算器(Markov chain operator)。 
與 GSN 相比,它的樣本可以一次生成,而不是通過反覆應用馬爾可夫鏈運算器。 
與NICE 和 Real NVE 相比,在 latent code 的大小上沒有限制。

GAN目前存在的主要問題:

  • 解決不收斂(non-convergence)的問題。 
        目前面臨的基本問題是:所有的理論都認為 GAN 應該在納什均衡(Nash equilibrium)上有卓越的表現,但梯度下降只有在凸函式的情況下才能保證實現納什均衡。當博弈雙方都由神經網路表示時,在沒有實際達到均衡的情況下,讓它們永遠保持對自己策略的調整是可能的【OpenAI Ian Goodfellow的Quora】。
  • 難以訓練:崩潰問題(collapse problem) 
        GAN模型被定義為極小極大問題,沒有損失函式,在訓練過程中很難區分是否正在取得進展。GAN的學習過程可能發生崩潰問題(collapse problem),生成器開始退化,總是生成同樣的樣本點,無法繼續學習。當生成模型崩潰時,判別模型也會對相似的樣本點指向相似的方向,訓練無法繼續。【Improved Techniques for Training GANs
  • 無需預先建模,模型過於自由不可控。 
        與其他生成式模型相比,GAN這種競爭的方式不再要求一個假設的資料分佈,即不需要formulate p(x),而是使用一種分佈直接進行取樣sampling,從而真正達到理論上可以完全逼近真實資料,這也是GAN最大的優勢。然而,這種不需要預先建模的方法缺點是太過自由了,對於較大的圖片,較多的 pixel的情形,基於簡單 GAN 的方式就不太可控了。在GAN[Goodfellow Ian, Pouget-Abadie J] 中,每次學習引數的更新過程,被設為D更新k回,G才更新1回,也是出於類似的考慮。

3. 條件生成式對抗網路,Conditional Generative Adversarial Networks

3.1 CGAN的思想

     上面分析提出,與其他生成式模型相比,GAN這種競爭的方式不再要求一個假設的資料分佈,即不需要formulate p(x),而是使用一種分佈直接進行取樣sampling,從而真正達到理論上可以完全逼近真實資料,這也是GAN最大的優勢。然而,這種不需要預先建模的方法缺點是太過自由了,對於較大的圖片,較多的 pixel的情形,基於簡單 GAN 的方式就不太可控了。為了解決GAN太過自由這個問題,一個很自然的想法是給GAN加一些約束,於是便有了Conditional Generative Adversarial Nets(CGAN)【Mirza M, Osindero S. Conditional】。這項工作提出了一種帶條件約束的GAN,在生成模型(D)和判別模型(G)的建模中均引入條件變數y(conditional variable y),使用額外資訊y對模型增加條件,可以指導資料生成過程。這些條件變數y可以基於多種資訊,例如類別標籤,用於影象修復的部分資料[2],來自不同模態(modality)的資料。如果條件變數y是類別標籤,可以看做CGAN 是把純無監督的 GAN 變成有監督的模型的一種改進。這個簡單直接的改進被證明非常有效,並廣泛用於後續的相關工作中[3,4]。Mehdi Mirza et al. 的工作是在MNIST資料集上以類別標籤為條件變數,生成指定類別的影象。作者還探索了CGAN在用於影象自動標註的多模態學習上的應用,在MIR Flickr25000資料集上,以影象特徵為條件變數,生成該影象的tag的詞向量。

3.2 Conditional Generative Adversarial Nets

3.2.1 Generative Adversarial Nets

    Generative Adversarial Nets是由Goodfellow[5]提出的一種訓練生成式模型的新方法,包含了兩個“對抗”的模型:生成模型(G)用於捕捉資料分佈,判別模型(D)用於估計一個樣本來自與真實資料而非生成樣本的概率。為了學習在真實資料集x上的生成分佈Pg,生成模型G構建一個從先驗分佈 Pz (z)到資料空間的對映函式 G(z; θg )。 判別模型D的輸入是真實影象或者生成影象,D(x; θd )輸出一個標量,表示輸入樣本來自訓練樣本(而非生成樣本)的概率。 
     模型G和D同時訓練:固定判別模型D,調整G的引數使得 log(1 − D(G(z))的期望最小化;固定生成模型G,調整D的引數使得logD(X) + log(1 − D(G(z)))的期望最大化。這個優化過程可以歸結為一個“二元極小極大博弈(minimax two-player game)”問題:

            這裡寫圖片描述

3.2.2 Conditional Adversarial Nets

    條件生成式對抗網路(CGAN)是對原始GAN的一個擴充套件,生成器和判別器都增加額外資訊y為條件, y可以使任意資訊,例如類別資訊,或者其他模態的資料。如Figure 1所示,通過將額外資訊y輸送給判別模型和生成模型,作為輸入層的一部分,從而實現條件GAN。在生成模型中,先驗輸入噪聲p(z)和條件資訊y聯合組成了聯合隱層表徵。對抗訓練框架在隱層表徵的組成方式方面相當地靈活。類似地,條件GAN的目標函式是帶有條件概率的二人極小極大值博弈(two-player minimax game ): 
這裡寫圖片描述

CGAN的網路結構 
                      CGAN的網路結構

3.3 實驗

3.3.1 MNIST資料集實驗

    在MNIST上以類別標籤為條件(one-hot編碼)訓練條件GAN,可以根據標籤條件資訊,生成對應的數字。生成模型的輸入是100維服從均勻分佈的噪聲向量,條件變數y是類別標籤的one hot編碼。噪聲z和標籤y分別對映到隱層(200和1000個單元),在對映到第二層前,聯合所有單元。最終有一個sigmoid生成模型的輸出(784維),即28*28的單通道影象。 
    判別模型的輸入是784維的影象資料和條件變數y(類別標籤的one hot編碼),輸出是該樣本來自訓練集的概率。 
            這裡寫圖片描述

3.3.2 多模態學習用於影象自動標註

    自動標註影象:automated tagging of images,使用多標籤預測。使用條件GAN生成tag-vector在影象特徵條件上的分佈。資料集: MIR Flickr 25,000 dataset ,語言模型:訓練一個skip-gram模型,帶有一個200維的詞向量。 
【生成模型輸入/輸出】 
噪聲資料 100維=>500維度 
影象特徵4096維=>2000維 
這些單元全都聯合地對映到200維的線性層, 
輸出生成的詞向量 (200維的詞向量) 
【判別模型的輸入/輸出】 
輸入: 
500維詞向量; 
1200維的影象特徵 
???生成式和判別式的條件輸入y,維度不一樣???一個是4096維的影象特徵,另一個是?維的?向量 _??? 
如圖2所示,第一列是原始像,第二列是使用者標註的tags ,第三列是生成模型G生成的tags。 
這裡寫圖片描述

3.4 Future works

     
1. 提出更復雜的方法,探索CGAN的細節和詳細地分析它們的效能和特性。 
2. 當前生成的每個tag是相互獨立的,沒有體現更豐富的資訊。 
3. 另一個遺留下的方向是構建一個聯合訓練的排程方法去學校language model