1. 程式人生 > >生成式對抗網路Generative Adversarial Networks(GANs)論文筆記

生成式對抗網路Generative Adversarial Networks(GANs)論文筆記

1. 前言

GAN(Generative Adversarial Networks),是生成對抗網路於2014年由Ian Good fellow在他的論文提出。
在GAN被提出之後,立刻在機器學習領域得到了巨大反響,並且被科學工作者們應用在許多領域,且取得了令人印象深刻的成果。在2016NIPS會議上,Goodfellow對GAN做了一次長達2個小時的報告,將GAN的原理,訓練tips,以及一些影響比較大的GAN變體等等綜合在一起,資訊量比較大。

2. 參考資料

3. 研究背景

ML模型分類
其實在機器學習中主要分為兩類模型:
1. 判別模型(Discriminative model)


實現高維的、人可以感知的資訊(如聲音、圖片等)到一個標籤(可以是語義,類別)的對映,如上圖,我們向判別模型輸入一張貓的圖片,就能輸出”cat”的標籤。
2. 生成模型(Generative model)
學習的是真實資料的概率分佈,並且模擬真實資料的生成。對大家來說可能較為常見的例子就是自動編碼器(Autoencoder)反捲積(Transposed convolution),對這兩者我稍微解釋一下。
- 自動編碼器:見上圖,自動編碼器分為encoder(編碼器)和decoder(解碼器)。將圖片輸入自動編碼器時,編碼器首先對影象進行編碼,然後通過解碼器恢復成原圖。在整個網路訓練好以後,如果我們將編碼器去掉,留下從code通過解碼器的一個結構,那這個就是生成真實資料的過程,因此code通過decoder這部分結構
這屬於一種生成模型。
- 反捲積:卷積實際上會對圖片進行下采樣,而反捲積的過程會對影象進行上取樣,這個上取樣的過程也是一種生成的過程,因此也屬於生成模型。在討論的時候,學長提到反捲積可以被歸為自動編碼器,因為卷積和反捲積的kernel是互為轉置的關係,與解碼器與編碼器之間的關係一致,但是我表示不同意啦,因為在訓練時,自動編碼器的編碼器和解碼器是一起訓練的,但是反捲積的核是利用訓練好的卷積核進行變換的,即不是聯合訓練得到的。(Update:17.9.14,還沒研究過反捲積,日後可能需要修改。)
生成模型的任務和難點
生成模型的任務是學習概率密度並且生成資料,但在求解真實資料的概率密度分佈的過程中有很大難度,常用的方法有最大似然估計(Maximum likelihood estimation)等,要求解概率幾乎無法進行。
而Goodfellow就想到一種超奇妙的方法,利用判別網路(D)和生成網路(G)兩個網路一起訓練,成功繞開以上的難點,模擬真實資料的生成。

4. GAN的框架

論文提出了一個新的網路,通過一個對抗的過程來估計生成模型。在這個過程中會同時訓練兩個模型:一個生成模型G用於估計資料分佈,一個判別模型D來預測一個樣本是來自訓練集(真實資料集)而非G的概率。對於G來說訓練過程就是要使D判斷錯誤的可能性最大化。
形象一點說,生成模型G是一個造假幣的人,而辨別模型D是一個鑑別真假幣的人,G的目標是造出能夠以假亂真的假幣,而D的目標是正確判別真假,倆人最開始都是新手,D鑑別能力如果變強,則G的造假能力也必須變強才能矇蔽D的雙眼;G造假能力變強之後,D也必須提高自己的鑑別能力才能做一個合格的鑑別師。於是DG在相互博弈的過程當中不斷提高各自的能力,理論上來說,最終G則能夠造出接近和真幣一樣的假幣。

4.1 對抗框架(Adeversarial Nets)

將這個框架應用到影象生成上,就有了下面這個框架:
GAN框架
同樣,框架中涉及到兩個網路GD,對這倆網路引數進行更加詳細的解釋:
xfake=G(z;θ(G)):表示G的輸入是噪聲z(符合特定分佈),輸出x,即假的圖片,而θ(G)則是生成器G裡的待訓練權重集合;
D(x;θ(D))[0,1]:表示D的輸入是x(分為xfakexreal),D會對輸入的圖片x做一個判斷,得到x是真的概率,由此輸出一個範圍在[0,1]之間的數,θ(D)則是辨別器D裡的待訓練引數集合。

上圖中的工作流程解釋:
從符合特定分佈的噪聲中取樣一定數目的點z輸入生成器,生成假造的資料xfakeD輸入,另外向D同時輸入的還有真實資料xreal。按照DG各自的目標:D希望辨別真假的能力強,則希望相應的D(xreal)接近1,而D(xfake)(即D(G(z)))接近0;而G的任務是希望