GAN實戰筆記——第一章GAN簡介

墨戈發表於2021-10-18

GAN簡介

一、什麼是GAN

GAN是一類由兩個同時訓練的模型組成的機器學習技術:一個是生成器,訓練其生成偽資料:另一個是鑑別器,訓練其從真實資料中識別偽資料。

  • 生成(generative)一詞預示著模型的總目標——生成新資料GAN通過學習生成的資料取決於所選擇的訓練集,例如,如果我們想用GAN合成一幅看起來像達・芬奇作品的畫作,就得用達·芬奇的作品作為訓練集。
  • 對抗(adversarial)一詞則是指構成GAN框架的兩個動態博弈、競爭的模型:生成器和判別器生成器的目標是生成與訓練集中的真實資料無法區分的偽資料——在剛才的示例中這就意味著能夠創作出和達・芬奇畫作一樣的繪畫作品。判別器的目標是能辨別出哪些是來自訓練集的真實資料,哪些是來自生成器的偽資料。也就是說,判別器充當著藝術品鑑定專家的角色,評估被認為是達·芬奇畫作的作品的真實性。這兩個網路不斷新地“鬥智鬥勇”,試圖互相欺騙:生成器生成的偽資料越逼真,判別器辨別真偽的能力就要越強
  • 網路(network)一詞表示最常用於生成器和判別器的一類機器學習模型:神經網路。依據GAN實現的複雜程度,這些網路包括從最簡單的前饋神經網路到卷積神經網路以及更為複雜的變體。

二、GAN是如何工作的

還有一個比喻經常用來形容GAN,假幣制造者(生成器)和試圖逮捕他的偵探(判別器)——假鈔看起來越真實,就需要越好的偵探才能辨別出他們,反之亦然。

用更專業的術語來說,生成器的目標是生成能最大程度有效捕捉訓練集特徵的樣本,以至於生成出的樣本與訓練資料別無二致。生成器可以看作一個反向的物件識別模型——物件識別演算法學習影像中的模式,以期能夠識別影像的內容。生成器不是去識別這些模式,而是要學會從頭開始學習建立它們,實際上,生成器的輸入通常不過是一個隨機數向量。

生成器通過從鑑別器的分類結果中接收反饋來不斷學習。判別器的目標是判斷一個特定的樣本是真的(來自訓練集)還是假的(由生成器生成)。因此,每當判別器“上當受騙”將假的影像錯判為真實影像時,生成器就會知道自己做得很好:相反,每當判別器正確地將生成器生成的假影像辨別出來時,生成器就會收到需要繼續改進的反饋。

判別器也會不斷地改善,像其他分類器一樣,它會從預測標籤與真實標籤(真或假)之間的偏差中學習。所以隨著生成器能更好地生成更逼真的資料,判別器也能更好地辨別真假資料,兩個網路都在同時不斷地改進著。

表1.1 生成器和判別器的關鍵資訊

生成器 判別器
輸入 一個隨機數向量 判別器的輸入有兩個來源:來自訓練集的真實樣本和來自生成器的偽樣本
輸出 儘可能令人信服的偽樣本 預測輸入樣本是真實的概率
目標 生成與訓練集中資料別無二致的偽資料 區分來自生成器的偽樣本和來自訓練集的真實樣本

三、GAN的結構

假定我們的目標是教GAN生成逼真的手寫數字。GAN的核心結構如下圖所示。

讓我們看看其中的細節。

(1) 訓練資料集——包含真實樣本的資料集,是我們希望生成器能以近乎完美的質量去學習模仿的資料。在這個示例中,資料集由手寫數字的影像組成。該資料集用作判別器網路的輸入(\(x\))。

(2) 隨機噪聲向量——生成器網路的初始輸入(z)。此輸入是一個由隨機陣列成的向量,生成器將其用作合成偽樣本的起點。

(3) 生成器網路——生成器接收隨機數向量(z)作為輸入並輸出偽樣本(x*)。它的目標是生成和訓練資料集中的真實樣本別無二致的偽樣本。(卷積神經網路)

(4) 判別器網路——判別器接收來自訓練集的真實樣本(x)或生成器生成的偽樣本(x*)作為輸入。對每個樣本,判別器會進行判定並輸出其為真實的概率。(反摺積神經網路)

(5) 迭代訓練/調優——對於每個判別器的預測,我們會衡量它效果有多好——就像對常規的分類器一樣——並用結果反向傳播去迭代優化判別器網路和生成網路。

  • 更新判別器的權重和偏置,以最大化其分類的精確度(最大化正確預測的概率:x為真,x*為假)。
  • 更新生成器的權重和偏置,以最大化判別器將x*誤判為真的概率。

3.1 GAN的訓練

為了瞭解GAN各元件的用途,我們首先介紹GAN的訓練演算法,其次演示訓練過程,以便我們能夠可以清楚的看到實際的框架圖。

GAN訓練演算法
	對於每次訓練迭代,執行如下操作。
	(1)訓練判別器
		a.從訓練集中隨機抽取真實樣本x。
		b.獲取一個新的隨機噪聲向量z,用生成器網路合成一個偽樣本x*。
		c.用判別器網路對x和x*進行分類。
		d.計算分類誤差並反向傳播總誤差以更新判別器的可訓練引數,尋求最小化分類誤差。
	(2)訓練生成器
		a.獲取一個新的隨機噪聲向量z,用生成器網路合成一個偽樣本x*。
		b.用判別器網路對x*進行分類。
		c.計算分類誤差並反向傳播以更新生成器的可訓練引數,尋求最大化判別器誤差。
	結束

GAN訓練過程視覺化

GAN的訓練演算法如下圖所示,其中的字母表示GAN訓練演算法中的步驟。

子程式圖示說明

(1)訓練判別器

​ a. 從訓練集中隨機抽取真實樣本x。

​ b. 獲取一個新的隨機噪聲向量z,用生成器網結合成一個偽樣本x*。

​ c. 用鑑別器網路對x和x*進行分類。

​ d. 計算分類誤差並反向傳播總誤差以更新判別器的權重和偏置,尋求最小化分類誤差。

(2)訓練生成器

​ a. 獲取一個新的隨機噪聲向量z,用生成器網路合成一個偽樣本x*。

​ b.用判別器網路對x*進行分類。

​ c.計算分類誤差並反向傳播以更新生成器的可訓練引數,尋求最大化判別器誤差。

3.2 達到平衡

對於一般的神經網路,我們通常有一個明確的目標去實現以及用來衡量效果。例如,當訓練一個分類器時,我們度量在訓練集和驗證集上的分類誤差,一旦發現驗證集開始變壞,就停止程式(為了避免過擬合)。在GAN結構中,判別器網路和生成器網路有兩個互為競爭對手的目標:一個網路越好,另一個就越差。那麼我們如何決定何時停止程式呢?

這其實是一個零和博弈問題,即一方的收益等於另一方的損失。當一方提高一定程度時,另一方會惡化同樣的程度。零和博弈都有一個納什均衡點,那就是任何一方無論怎麼努力都不能改善他們的處境或結果。

當滿足以下條件時,GAN達到納什均衡點

(1)生成器生成的偽樣本與訓練集中的真實資料別無二致。

(2)判別器所能做的只是隨機猜測一個特定的樣本是真的還是假的(也就是說,猜測一個示例為真的概率是50%)。

讓我們來解釋為何會出現這種情況。當每一個偽樣本(x*)與來自訓練集的真實樣本無法區分時,判別器用任何手段都無法區分它們。因為判別器接收到的樣本有一半是真的,半是假的,所以它所能做的最有用的事情就是拋硬幣,以50%的概率把每個樣本分為真和假。

同樣,生成器也處於這樣一個點上,它不能從進一步的調優中獲得任何提高了。因為生成器生成的樣本早已和真實樣本無法區分了,以至於對隨機噪聲向量(z)轉換為偽樣本(x)的過程做出哪怕一丁點兒改變,也可能給判別器提供從真實樣本中辨別出偽樣本的機會,從而使生成器變得更糟。

當達到納什均衡時,GAN就被認為是收斂的。這是一個棘手的問題,在實踐中,由於在非凸博弈中實現收斂所涉及的巨大複雜性,幾乎不可能達到GAN的納什均衡。實際上,GAN的收斂仍是GAN研究中最重要的開放性問題之一。

小結

  1. GAN是一種利用兩個神經網路之間的動態競爭來合成真實資料樣本的深度學習技術,例如能合成具有照片級真實感的虛假影像。構成一個完整GAN的兩個網路如下:
    • 生成器,其目標是通過生成與訓練資料集別無二致的資料來欺騙判別器;
    • 判別器,其目標是正確區分來自訓練資料集的真實資料和由生成器生成的偽資料。

相關文章