DCGAN 論文簡單解讀


DCGAN的全稱是Deep Convolution Generative Adversarial Networks(深度卷積生成對抗網絡)。是2014年Ian J.Goodfellow 的那篇開創性的GAN論文之后一個新的提出將GAN和卷積網絡結合起來,以解決GAN訓練不穩定的問題的一篇paper.

關於基本的GAN的原理,可以參考原始paper,或者其他一些有用的文章和代碼,比如:GAN mnist 數據生成,深度卷積GAN之圖像生成,GAN tutorial等。這里不再贅述。

一. DCGAN 論文簡單解讀

ABSTRACT

1.1 摘要。作者說,這篇文章的初衷是,CNN在supervised learning 領域取得了非常了不起的成就(比如大規模的圖片分類,目標檢測等等),但是在unsupervised learning領域卻沒有特別大的進展。所以作者想彌補CNN在supervised 和 unsupervised之間的gap。作者提出了將CNN和GAN相結合的DCGAN,並展示了它在unsupervised learning所取得的不俗的成績。作者通過在大量不同的image datasets上的訓練,充分展示了DCGAN的generator(生成器)和discriminator(鑒別器)不論是在物體的組成部分(parts of object)還是場景方面(scenes)都學習到了豐富的層次表達(hierarchy representations)。作者還將學習到的特征應用於新的任務上(比如image classification),結果表明這些特征是非常好的通用圖片表達(具有非常好的泛化能力)。

INTRODUCTION

1.2 將GAN作為feature extractors。我們往往希望從大量未標注的數據中學習到有用的特征表達,然后將這些特征應用於監督學習領域。這是非常熱門的研究領域。作者表明GAN是達成這一目的的一個非常好的工具。GAN的一大問題就是其訓練非常不穩定,有的時候會得到非常奇怪的結果。而且目前對於可視化展示multi layer GAN內部到底學到了什么representation 研究非常少。這篇文章在以下幾個方面做出了貢獻:

- 文中提出並評估了一系列的對於卷積GAN的結構的限制,這些限制確保了在大多數情況下,卷積GAN可以保持穩定。文中將這種結構命名為DCGAN。

- 文中將訓練好的鑒別器應用於圖片分類任務,並和其他的非監督方法進行對比,發現它非常competitive。

- 文中可視化了DCGAN的filters,結果表明特定的filter學習到了特定的object。

- 文中表明生成器具有有趣的向量算數屬性(vector arithmetic property),這使得我們可以對生成的樣本進行語義上的操作(類似於NLP中的word embedding 的性質,文中作者舉了給女性戴墨鏡的例子,詳見下文)。

2.1 從未標注的數據學習representation。之前使用的比較多的方法是聚類(層次k-means等),還有auto-endcoders,以及深度信念網絡(deep blief networks)。

2.2 產生自然的圖片。這一任務主要分為參數的和非參數的。

非參數方法

這種方法主要是從圖片數據庫對圖片碎片(pathes)做match,應用在了圖片的紋理合成(texture synthesis)以及超分辨率圖片合成等方面。

參數方法

這種方法以前研究的就比較多,但是主要是對一些簡單的圖片做實驗的(比如MNIST),在大規模真實圖片上做實驗取得比較好的結果也就是最近幾年的事情。作者簡單講了有variational sampling,iterative forward diffusion等方法。2014年提出GAN之后,這種模型可以生成圖片,但是不穩定,而且有的時候會產生噪聲以及怪異的圖片。這之后,又有人提出了laplacian pyramid extension的GAN,與GAN相比,它可以產生更好質量的圖片,但是仍然不穩定。還有人提出了recurent network approach 和 deconvolution(反卷積)的方法,可以產生一定質量的圖片,但是生成的features無法保證在監督學習任務中取得很好的效果。

2.2 對CNN進行可視化

可以使用deconvolution(反卷積)以及對輸入進行梯度下降,這有助於探索CNN內部的每一層到底學到了什么表達。

2.3 DCGAN的方法以及模型架構

歷史上已經有人嘗試將GAN和CNN相結合,但是失敗了。LAPGAN的作者嘗試迭代地將低分辨率的圖片逐步轉化為更好的圖片,從而產生更可靠的結果。文中作者在使用傳統的監督學習CNN架構擴展GAN的過程中,也遇到了困難。在反復實驗和嘗試之后,作者提出了一系列的架構,可以讓GAN+CNN更加穩定,可以deeper,並且產生更高分辨率的圖像。核心的工作是對現有的CNN架構做了如下三個方面的修改:

- 全卷積網絡。主要就是使用了strided convolution 替代確定性的pooling 操作,從而可以讓網絡自己學習downsampling(下采樣)。作者對generator和discriminator都采用了這種方法,讓它們可以學習自己的空間下采樣。

- 取消全連接層。最近的做法比如使用global average pooling 去替代fully connected layer。global average pooling可以提高模型的穩定性,但是卻降低了收斂速度。GAN的輸入采用均勻分布初始化,可能會使用全連接層(矩陣相乘),然后得到的結果可以reshape成一個4 dimension的tensor,然后后面堆疊卷積層即可;對於鑒別器,最后的卷積層可以先flatten,然后送入一個sigmoid分類器。可視化的架構如下圖1所示:圖1 DCGAN 架構

                   圖1

- Batch Normalization。BN可以加速學習和收斂,其將每一層的輸入變換到0均值和單位標准差(其實還需要shift 和 scale),這被證明是深度學習中非常重要的加速收斂和減緩過擬合的手段。它可以幫助由於初始化不當而導致的訓練困難,可以讓梯度flow to deeper layers。實踐表明,這對於deep generator的有效learning是至關重要的,可以防止generator將所有的samples變成一個single point,這是GAN訓練經常會碰到的問題。實踐表明,如果直接將BN應用到all layers,會導致sample震盪和不穩定,所以我們只對生成器的輸出層和鑒別器的輸入層使用BN。

- (Leaky)Relu Activation。對於generator,其輸出層使用tanh 激活函數,其余層使用relu 激活函數。我們發現如果使用bounded activation可以加速模型的學習,覆蓋訓練樣本的color space。對於discriminator,我們發現使用leaky relu 更好一點,特別是對於生成高分辨率的圖片。

總結一下,DCGAN的主要的tricks如下圖2所示:

DCGAN all bags of tricks
                   圖2

DETAILS OF ADVERSARIAL TRANING(對抗訓練的細節)

3.1 概述

文章主要在LSUN數據集,ImageNet 1k以及一個較新的celebA數據集上進行了實驗。訓練的一些細節如下:

- image preprocessing。我們沒有對圖片進行pre-processing,除了將generator的輸出變換到[-1,1]。

- SGD。訓練使用mini-batch SGD,batch size = 128。

- parameters initialize。所有的參數都采用0均值,標准差為0.02的初始化方式。

- leaky relu。leaky relu 的 \(\alpha\)的取值為0.2。

- optimizers。我們使用Adam optimizer,並且對參數做了一些fine tuing,我們實驗發現默認的學習率為0.001,太高了,我們調整為0.0002。Adam中的momentum term \(\beta_1\)=0.9太高了,會使得訓練過程震盪,不穩定,我們將其調整為0.5發現可以使訓練過程更加穩定。

3.2 LSUN

overfitting。當生成模型產生的圖片質量越來越好的時候,我們就需要考慮overfitting的問題了,即generator有可能只是簡單記住訓練樣本,然后產生類似的輸出結果。為了展示DCGAN如何擴展到更大的數據集以及產生更高質量的圖片,我們在包含300萬訓練樣本的celebA bedroom datasets 上進行了訓練。作者展示了每一輪訓練之后采樣的結果,表明模型產生的高質量輸出不是簡單通過記住訓練樣本而得到的。

去重(deduplication)

為了防止模型過擬合,即模型簡單記住輸入的特征,然后生成類似的圖片。作者還對訓練樣本進行了去重處理,即去除相似度較高的圖片。具體的原理可以參考論文。

3.3 FACES

原始的celebA數據集是從互聯網網頁上抓取的現代人的人臉數據集。大約包含300張約10000個人的人臉數據。文中對這些數據使用opencv的face detector進行人臉檢測,保證得到具有一定高精度的人臉bounding box,最后得到大約35w個face bounding box,然后使用這些face bounding box 進行訓練。沒有使用data augmentation。

3.4 imagenet-1k

對imagenet-1k的圖片使用32x32的min-resized-center-crops進行訓練。同樣沒有進行data augmentation。

對於DCGAN性能的經驗驗證

4.1 使用DCGAN作為feature extrctor對cifar-10數據進行分類。通常評估非監督表達學習性能的一個常用方法是將它作為特征提取器(feature extrator)應用於監督學習,然后評估linear model 基於這些learned features 的performance。

4.2 對於cifar-10數據集,非監督特征提取一個非常強的baseline是基fine-tuned的k-means模型。為了評估DCGAN在cifar-10上的表現,我們使用imagenet-1k訓練DCGAN,然后使用鑒別器的所有卷積features,對每一個layer使用maxpooling 得到一個4x4的spatial grid。然后再將再將這些各層spatial grid展平,連接最后組成一個28672維的向量,然后再送入L2正則化的svm分類器進行分類。注意DCGAN每一個卷積層得到的最大feature maps為512,這個是要低於k-means的,但是由於DCGAN有很多個layers,所以總的feature maps要高於k-means。總體來說,得到的分類結果accuracy為82,8%,要高於所有基於k-means的方法,略低於state-of-art。考慮到我們得到的feature maps並不是通過訓練cifar-10得到的,這說明我們通過DCGAN得到的image feature maps具有良好的通用性和泛化能力。

訓練1輪之后生成的圖片
               圖3 訓練1輪之后生成的圖片
訓練5輪之后生成的圖片
               圖4 訓練5輪之后生成的圖片
DCGAN在imagenet-1k上訓練,然后對cifar-10進行分類,和k-means方法進行對比
          圖5 DCGAN在imagenet-1k上訓練,然后對cifar-10進行分類,和k-means方法進行對比

4.3 使用DCGAN作為feature extrctor對SVHN數據進行分類

在 StreetView House Numbers dataset(SVHN,一個街景拍攝門牌號數據集)中,我們是在labeled data不足的情況下使用DCGAN的disciminator進行監督學習。我們從non-extra數據集中划分了一個10000的validation set,用來進行超參數調節以及模型選擇。我們使用類別均勻分布的1000個樣本,通過discriminator采用和cifar-10一樣的特征提取方法,然后基於這些特征訓練一個L2正則化的SVM,這取得了state-of-art的結果(在只使用1000個data的情況下):22.48%的test error。而且我們發現CNN並非是這一結果的key factor,因為我們對比使用了純粹的CNN架構,經過了64次的隨機超參數搜索,得到的validation error是28.87%,要遠高於之前的22.48%。

SVHN classification with 1000 labels
                圖6 SVHN classification with 1000 labels

5.1 對DCGAN內部的探索和可視化

文中使用了很多種探索DCGAN的方式,但是沒有采用對traning set 進行最近鄰搜索的方式,因為無論是在pixel還是feature space上這種方法都很容易受圖片微小改變的影響。我們也沒有使用對數似然(log-likelihood)的方式進行評估,因為有實驗表明這也是不太好的metric。

5.2 探索latent space

我們首先要做的第一個實驗就是探索latent space的landscape。這種exploration可以告訴我們是否發生了memorization,或者是圖片發生分層崩塌(hierarchically collapsed)。如果walking in the latent space 導致了圖片生成發生了語義上的改變,比如說有物體被增加或者移除了。我們就可以推斷模型學到了相關的,有趣的表達。

5.3 可視化discriminator features

之前的工作已經表明,有監督的CNN在大型數據集上可以學習到非常有用的特征表達。特別的,訓練在場景分類(scenes classification)的有監督CNN可以學習到一個物體檢測器(object detector)。我們的實驗表明,訓練在大型數據集上的無監督的DCGAN同樣可以學習到分層的,有趣的特征表達。使用guided backpropagation,我們發現disciminator在bedroom的典型的部分被激活(activation),比如beds,windows等。作為對比,我們采用了隨機初始化的features,不會產生任何語義相關的有趣的activation。

5.4 操作生成器表達

5.4.1 忘記去畫特定的物體。除了鑒別器學習到的特征表達,還有一個問題是生成器到底學習到了什么特征表達。生成的樣本的質量表明生成器學習到了場景的主要構成部分,比如beds,windows,lamps(燈),doors,miscellaneous furniture(混雜的家具)的特征表達。為了探索這樣的特征是以什么形式存在的,我們做了一個實驗:試圖將windows從generator的output中徹底移除。

我們選取了150個sample,其中52個我們手工繪制了window bounding boxes。在倒數第二層的conv layer features中,我們訓練了一個簡單的logistic regression來判斷一個feature activation是否在window中,具體來說采用如下的准則:在繪制的window bounding box中的feature activation是正的,同一個圖片的其他部分是負的。使用這個簡單的模型,所有的權重大於0的feature maps(共有200個)都被從所有的空間位置(spatial locations)移除。然后,隨機產生的新的樣本,一個移除這些feture maps,另外一個保留。

下圖7展示了帶有window的和不帶有window的生成圖片。有意思的是,網絡大部分時候都會忘記繪制在bedrooms中繪制window,而是將window替換成其他的物體。

generated images with and without windows
             圖7 generated images with and without windows

5.4.2 在人臉樣本中的向量算術性質

2013年那篇著名的(google word2vec)評估單詞學習到的表達文章中,揭示了單詞在表達空間中滿足簡單的算術操作,這表明其具有良好的線性性質。一個經典的例子是vector(”King”) - vector(”Man”) + vector(”Woman”)得到的結果,與之最相近的vector是Queen。我們想探索類似的結構和性質,是不是也存在generator的Z表達中。文中作者對一系列典型的Z representations 做了實驗,結果發現確實有類似的性質。但是如果只對單個樣本進行操作得到的結果不是很穩定,而如果使用三個的平均值,結果就會很不錯而且比較穩定。實驗還表明fave pose(臉部姿態)在Z空間中也滿足類似的線性性質。

實驗表明模型學習到的Z representations可以導出很多有趣的性質和應用。之前有實驗表明條件生成模型(conditional generative model)可以學習物體屬性(object attribute),比如scale(尺度),position(位置),rotation(旋轉)等。而DCGAN是目前為止第一篇只使用非監督學習的方法就可以得到類似的性質的模型。如果對於上面的vector arithmetic進行更進一步探索的話,有望減少條件生成模型在對復雜圖片分布進行建模時所需要的數據量。

random filters and trained filters
             圖8 random filters and trained filters
remove windows experiment
             圖9 remove windows experiment

CONCLUSION AND FEATURE WORK

我們提出了一個更加穩定的GAN模型DCGAN,而且實驗表明這種對抗網絡可以學習到無論是對監督學習還是生成模型都都非常好的特征表達。但是我們注意到模型仍然有一些不穩定的地方,比如隨着訓練時間的增加,有些filters就會崩潰發生震盪。未來仍需要做一些工作來改善這種不穩定性。我們也相信將DCGAN應用到其他領域比如視頻的frame prediction,音頻領域的語音合成的預訓練features,都會是非常有趣的工作。繼續探索學習的latent space的屬性也會非常有趣。

Vector arithmetic for visual concepts
             圖10 Vector arithmetic for visual concepts
looking left vs. looking right
             圖11 looking left vs. looking right


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM