複製鏈接
請複製以下鏈接發送給好友

生成式對抗網絡

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

生成式對抗網絡發展歷史

Ian J. Goodfellow等人於2014年10月在Generative Adversarial Networks中提出了一個通過對抗過程估計生成模型的新框架。框架中同時訓練兩個模型:捕獲數據分佈的生成模型G,和估計樣本來自訓練數據的概率的判別模型D。G的訓練程序是將D錯誤的概率最大化。這個框架對應一個最大值集下限的雙方對抗遊戲。可以證明在任意函數G和D的空間中,存在唯一的解決方案,使得G重現訓練數據分佈,而D=0.5。在G和D由多層感知器定義的情況下,整個系統可以用反向傳播進行訓練。在訓練或生成樣本期間,不需要任何馬爾可夫鏈或展開的近似推理網絡。實驗通過對生成的樣品的定性和定量評估證明了本框架的潛力 [1] 

生成式對抗網絡方法

機器學習的模型可大體分為兩類,生成模型(Generative Model)和判別模型(Discriminative Model)。判別模型需要輸入變量 ,通過某種模型來預測 。生成模型是給定某種隱含信息,來隨機產生觀測數據。舉個簡單的例子:
  • 生成模型:給一系列貓的圖片,生成一張新的貓咪(不在數據集裏)
  • 判別模型:給定一張圖,判斷這張圖裏的動物是貓還是狗
對於判別模型,損失函數是容易定義的,因為輸出的目標相對簡單。但對於生成模型,損失函數的定義就不是那麼容易。我們對於生成結果的期望,往往是一個曖昧不清,難以數學公理化定義的範式。所以不妨把生成模型的回饋部分,交給判別模型處理。這就是Goodfellow他將機器學習中的兩大類模型,Generative和Discrimitive給緊密地聯合在了一起 [2] 
GAN的基本原理其實非常簡單,這裏以生成圖片為例進行説明。假設我們有兩個網絡,G(Generator)和D(Discriminator)。正如它的名字所暗示的那樣,它們的功能分別是:
  • G是一個生成圖片的網絡,它接收一個隨機的噪聲z,通過這個噪聲生成圖片,記做G(z)。
  • D是一個判別網絡,判別一張圖片是不是“真實的”。它的輸入參數是x,x代表一張圖片,輸出D(x)代表x為真實圖片的概率,如果為1,就代表100%是真實的圖片,而輸出為0,就代表不可能是真實的圖片。
在訓練過程中,生成網絡G的目標就是儘量生成真實的圖片去欺騙判別網絡D。而D的目標就是儘量把G生成的圖片和真實的圖片分別開來。這樣,G和D構成了一個動態的“博弈過程”。
最後博弈的結果是:在最理想的狀態下G可以生成足以“以假亂真”的圖片G(z)。對於D來説,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z))=0.5 [1] 
原論文對最後博弈結果的圖像解釋 原論文對最後博弈結果的圖像解釋
這樣我們的目的就達成了:我們得到了一個生成式的模型G,它可以用來生成圖片。 [3] 
Goodfellow從理論上證明了該算法的收斂性 [1]  ,以及在模型收斂時,生成數據具有和真實數據相同的分佈(保證了模型效果)。
GAN公式 GAN公式
公式中x表示真實圖片,z表示輸入G網絡的噪聲,G(z)表示G網絡生成的圖片,D(·)表示D網絡判斷圖片是否真實的概率。

生成式對抗網絡應用

生成式對抗網絡圖像生成

圖像生成 圖像生成
GAN最常使用的地方就是圖像生成,如超分辨率任務,語義分割等等。

生成式對抗網絡數據增強

用GAN生成的圖像來做數據增強,如圖。主要解決的問題是:
  1. 對於小數據集,數據量不足, 如果能生成一些就好了。
  2. 如果GAN生成了圖片,怎麼給這些數據label呢?因為他們相比原始數據也不屬於預定義的類別。
數據增強 數據增強
[4]  中,都做了一些嘗試。實驗想法也特別簡單,先用原始數據(即使只有2000張圖)訓練一個GAN,然後生成圖片,加入到訓練集中。 總結一下就是:
  1. GAN 生成數據是可以用在實際的圖像問題上的(不僅僅是像MNIST這種“toy dataset”上通過實驗)。GAN在兩個行人重識別數據集和一個細粒度識別鳥識別數據集上都有提升。
  2. GAN 數據有三種給pseudo label的方式, 假設我們做五分類:
  • 把生成的數據都當成新的一類, 六分類,那麼生成圖像的 label 就可以是 (0, 0, 0, 0, 0, 1) 這樣給。
  • 按照置信度最高的動態去分配,那個概率高就給誰 比如第三類概率高(0, 0, 1, 0, 0)
  • 既然所有類都不是,那麼可以參考inceptionv3,搞label smooth,每一類置信度相同(0.2, 0.2, 0.2, 0.2, 0.2) 注:作者16年12月寫的代碼,當時GAN效果沒有那麼好,用這個效果好也是可能的, 因為生成樣本都不是很“真”,所以起到了正則作用。
參考資料