【生成對抗網路學習 其三】BiGAN論文閱讀筆記及其原理理解

dayceng發表於2022-06-12

參考資料:
1、https://github.com/dragen1860/TensorFlow-2.x-Tutorials
2、《Adversarial Feature Learning》
本次是對閱讀BiGAN論文的一個記錄,包含我自己對於BiGAN的一些理解
因為BiGAN在程式碼實現上沒有很大的不同,甚至類似經典GAN(詳見:https://www.cnblogs.com/DAYceng/p/16365562.html),所以這裡不做介紹
參考1中有原始碼
依然是免責宣告:水平有限,有錯誤請各位指正,謝謝了
注:圖片刷不出來可能需要fq,最近jsdelivr代理好像掛了。

雙向GAN網路(BiGAN)

image-20220610163021311

BiGAN相較於GAN更多的是結構上的改進,除了標準GAN框架中的生成器G,BiGAN還新增了一個編碼器E

結構

整個結構包括三部分:Encode網路(編碼器E),G網路(生成器G),D網路(判別器D)

  • Encode網路,提取原始圖片的隱變數

  • G網路,將噪聲生成圖片

  • D網路,判斷這個資料對(原始圖片和隱變數 生成圖片和噪聲)是來自編碼器E還是生成器G

根據論文的說法:“編碼器E將資料x對映到潛在表徵z”

結合結構圖,“潛在表徵z”應該對應E(x),也就是“真實資料在對應噪聲域下的對映

文章認為,編碼器E給出的對應編碼具有某種語義特徵,因此E(x)可以被認為是資料x的某種標籤

判別器D在判斷什麼?

這個問題剛開始想會有點奇怪,因為經典的GAN是去判別“輸入資料是不是真實資料”。

而BiGAN中不太一樣,這裡的輸入變成了資料對(【資料,資料在噪聲域下的變換】)

並且在BiGAN中,真實資料從始至終沒有直接輸入過判別器D,也就是說判別器D從來也沒見過真實資料

判別器D所學習到的真實資料的特徵都是編碼器E“告訴”它的

而編碼器E在幹什麼呢?它在學習(提取)真實資料的特徵,這些特徵有可能是更高維度的更抽象的特徵,有可能有助於刻畫原來的真實資料,有可能也沒什麼效果。但是編碼器E是不知道這些的,它只有儘可能的去提取特徵(這就是我們訓練編碼器E的過程)

並且由於我們的生成器G也會生成圖片,這些圖片也有對應的所謂特徵,因為假圖片是由隨機噪聲生成的,那麼隨機噪聲就是這些假圖片的特徵。因此,編碼器E提取的真實圖片的特徵也需要落到與隨機噪聲相同的空間域內,這樣才可以去進行判別。(計算相似度)

那麼現在可以總結一下了:

BiGAN中的判別器D在"區分"當前的輸入究竟是編碼器E給的真實資料的特徵,還是此時生成器G用來生成假圖片的隨機噪聲

編碼器E與生成器G的目的

明白了判別器D在做什麼,現在要理解一下編碼器E和生成器G在幹嘛了

我們會很自然地類比經典GAN得出結論:編碼器E和生成器G在儘可能的欺騙判別器D

為了達到這個目的,編碼器E與生成器G需要不斷接近對方的形式,對應原文中的就是:

we will both argue intuitively and formally prove that the encoder and generator must learn to invert one another in order to fool the BiGAN discriminator.

"編碼器E與生成器G需要學會互相反轉"

通俗一點解釋就是:對於編碼器E來說,雖然它真的是從真實資料中提取特徵,但在不斷訓練的過程中,它也逐漸學習到了生成器G生成圖片的特徵,所以編碼器E會故意模仿假圖片的特徵輸送給判別器D,測試判別器能否分辨出來。

這就是BiGAN的結構圖為什麼把編碼器E和生成器G的輸入輸出框在一起的原因,因為他們之間互相聯絡(是有可能互換的)

相關文章