生成式對抗網路Generative Adversarial Networks(GANs)論文筆記
1. 前言
GAN(Generative Adversarial Networks),是生成對抗網路於2014年由Ian Good fellow在他的論文提出。
在GAN被提出之後,立刻在機器學習領域得到了巨大反響,並且被科學工作者們應用在許多領域,且取得了令人印象深刻的成果。在2016NIPS會議上,Goodfellow對GAN做了一次長達2個小時的報告,將GAN的原理,訓練tips,以及一些影響比較大的GAN變體等等綜合在一起,資訊量比較大。
2. 參考資料
3. 研究背景
其實在機器學習中主要分為兩類模型:
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的框架
論文提出了一個新的網路,通過一個對抗的過程來估計生成模型。在這個過程中會同時訓練兩個模型:一個生成模型用於估計資料分佈,一個判別模型來預測一個樣本是來自訓練集(真實資料集)而非的概率。對於來說訓練過程就是要使判斷錯誤的可能性最大化。
形象一點說,生成模型是一個造假幣的人,而辨別模型是一個鑑別真假幣的人,的目標是造出能夠以假亂真的假幣,而的目標是正確判別真假,倆人最開始都是新手,鑑別能力如果變強,則的造假能力也必須變強才能矇蔽的雙眼;造假能力變強之後,也必須提高自己的鑑別能力才能做一個合格的鑑別師。於是和在相互博弈的過程當中不斷提高各自的能力,理論上來說,最終則能夠造出接近和真幣一樣的假幣。
4.1 對抗框架(Adeversarial Nets)
將這個框架應用到影象生成上,就有了下面這個框架:
同樣,框架中涉及到兩個網路和,對這倆網路引數進行更加詳細的解釋:
:表示的輸入是噪聲(符合特定分佈),輸出,即假的圖片,而則是生成器裡的待訓練權重集合;
:表示的輸入是(分為和),會對輸入的圖片做一個判斷,得到是真的概率,由此輸出一個範圍在之間的數,則是辨別器裡的待訓練引數集合。
上圖中的工作流程解釋:
從符合特定分佈的噪聲中取樣一定數目的點輸入生成器,生成假造的資料向輸入,另外向同時輸入的還有真實資料。按照和各自的目標:希望辨別真假的能力強,則希望相應的接近1,而(即)接近0;而的任務是希望