GAN, pix2pix, CycleGAN和pix2pixHD

參考視頻:CS231n 16.1 對抗樣本和對抗訓練   GAMES Webinar 2018-64期-朱儁彥

CS231n 16 對抗樣本和對抗訓練

/1 什麼是對抗樣本?

2013年以來,我們使用深度學習、卷積網絡、梯度下降來實現分類識別等任務。

對抗樣本:人們用心構造出來會被分錯類的樣本。

例如:我們構造一個網絡參數的函數(移動所有像素的最優方向,在人們看來很像是噪聲)並乘以很小的係數加在原圖上,我們看來兩幅圖沒有差別,實際上影響的只是浮點數後32位,甚至影響不了前8位的最後一位,但會導致卷積網絡判斷錯誤,將熊貓認作長臂猿。而且不僅改變了分類,還提高了置信度。

 

/2 對抗樣本爲什麼湧現出來?爲什麼有用?

我們很容易破壞神經網路甚至傳統的分類器,或許是因爲過擬合,但我們生成一個對抗樣本,就會有一個系統性效應,而不是隨機效應。所以更像是欠擬合而不是過擬合。

/3 對抗樣本如何構成現實世界的安全威脅?(使用對抗手段來損壞基於機器學習的系統、目前的防禦手段)

/4如何使用對抗樣本來提高其他機器學習算法的性能?

GAN, pix2pix, CycleGAN和pix2pixHD

0.GAN

2012年使用深度神經網絡 在ImageNet的分類任務上取得了巨大成功。從此深度學習的相關研究如火如荼地展開了。在傳統的圖形學管線中,輸出圖像需要經過建模、材質貼圖、光照、渲染等一系列繁瑣的步驟。現在大家看到了Deep Learning的潛力,那我們自然的就有個想法:有沒有可能使用Deep Learning簡化計算機圖形學的研究呢?

一個直接的想法是把DNN“倒過來用”。之前的DNN可能是輸入一幅圖像,輸出一個標籤,那我們能不能輸入“貓”這個字,輸出一張貓的照片呢?

 

GAN 網絡擁有兩個組成部分,一個是生成模型 G,一個是判別模型 D。在訓練過程中,會把生成模型生成的樣本和真實樣本隨機地傳送一張(或者一個 batch)給判別模型 D。判別模型 D 的目標是儘可能正確地識別出真實樣本(輸出爲“真”,或者 1),和儘可能正確地揪出生成的樣本,也就是假樣本(輸出爲“假”,或者 0)。而生成模型的目標則和判別模型相反,就是儘可能最小化判別模型揪出它的概率。這樣 G 和 D 就組成了一個 min-max game,在訓練過程中雙方都不斷優化自己,直到達到平衡——雙方都無法變得更好,也就是假樣本與真樣本完全不可區分。

就是要在最大化D的能力的前提下,最小化D對G的判斷能力,這是一個最小最大值問題,它的學習目標是:minGmaxD E[logD(G(z))+log(1−D(x))]。爲了增強D的能力,我們分別考慮輸入真的圖像和假的圖像的情況。上式中第一項的D(G(z))處理的是假圖像G(z),這時候評分D(G(z))需要盡力降低;第二項處理的是真圖像x,這時候的評分要高。

GAN的侷限性

1. 沒有用戶控制(user control)能力

在傳統的GAN裏,輸入一個隨機噪聲,就會輸出一幅隨機圖像。但用戶是有想法的,我們想輸出的圖像是我們想要的那種圖像,和我們的輸入是對應的、有關聯的。

2. 低分辨率(Low resolution)和低質量(Low quality)問題

儘管生成的圖片看起來很不錯,但如果你放大看,就會發現細節相當模糊。

那麼我們的目標就是:提高GAN的用戶控制能力;提高GAN生成圖片的分辨率和質量。爲了達到這樣的目標,總共分三步:

1.pix2pix:有條件地使用用戶輸入,它使用成對的數據(paired data)進行訓練。

2.CycleGAN:使用不成對的數據(unpaired data)的就能訓練。

3.pix2pixHD:生成高分辨率、高質量的圖像。

• 判別器D:PatchGAN

• 傳統的GAN中判別器對整張圖片判斷其真實性

• 實驗發現,如果判別器對圖片中的每一個片(patch)給出一個預測分類,能達到更

好的生成效果

• 文章中使用的patch大小爲70 × 70

pix2pix對傳統的GAN做了個小改動,它不再輸入隨機噪聲,而是輸入用戶給的圖片。但這也就產生了新的問題:我們怎樣建立輸入和輸出的對應關係。爲了體現這種對應關係,我們把G的輸入和輸出一起作爲D的輸入。

2.CycleGAN

pix2pix必須使用成對的數據進行訓練。但很多情況下成對數據是很難獲取到的,比如說,我們想把馬變成斑馬,現實生活中是不存在對應的真實照片的。現在我們就用Cycle-constraint Adversarial Network也就是CycleGAN解決這個問題。這種網絡不需要成對的數據,只需要輸入數據的一個集合和輸出數據的一個集合就可以了。但是,直接使用不成對的數據是不奏效的。網絡會直接忽略輸入,隨機產生輸出!所以,我們還得對網絡增加限制纔行。

那怎麼加限制呢?例如如果我們把馬變成斑馬,然後再變回馬,那麼最後的馬和開始輸入的馬應該是一樣的。

除了之前提到的把馬變成斑馬的網絡G,我們還需要一個把斑馬變回馬的網絡F。那麼,一匹馬x用G變成斑馬s=G(x),然後再用F把它變回馬F(s),得到的馬和一開始的馬應該是一樣的,也就是x=F(G(x))。

反過來,斑馬變馬再變回斑馬也要滿足要求,注意這一步最好不要省略。雖然理論上只用一個條件是可以的,但是現實實現中,有很多因素,比如計算的準備度、優化的問題,應用中都是把所有約束都加上。

我們同時優化G和F,最後就能拿到一個想要的網絡G。CycleGAN成功的原因在於它分離了風格(Style)和內容(content)。人工設計這種分離的算法是很難的,但有了神經網絡,我們很容易讓它學習者去自動保持內容而改變風格。

不過CycleGAN只能輸出256p/512p的低分辨率圖像,且學習容易過擬合。

3.pix2pixHD

分辨率和圖像質量。假設我們輸入一張高分辨率的草圖,使用pix2pix,結果很差,因爲網絡產生高維數據輸出很難。

pix2pixHD採取了金字塔式的方法:

1.先輸出低分辨率的圖片。

2.將之前輸出的低分辨率圖片作爲另一個網絡的輸入,然後生成分辨率更高的圖片。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章