發電機

GAN 的產生器部分會透過整合鑑別器的意見回饋,學習如何建立假資料。它會學習讓判別器將輸出內容分類為真實。

產生器訓練需要產生器和鑑別器之間的整合程度,比鑑別器訓練更為緊密。GAN 訓練產生器的部分包括:

  • 隨機輸入
  • 生成器網路,可將隨機輸入內容轉換為資料例項
  • 判別網路,用於分類產生的資料
  • 鑑別器輸出
  • generator loss,這是針對產生器未能欺騙判別器而處以懲罰

生成對抗網路的圖表。圖表中央的方塊標示為「discriminator」。兩個分支會從左側進入這個方塊。頂層分支從圖表左上方的「真實世界圖片」方塊開始。箭頭從這個圓柱指向標示為「Sample」的方塊。從「Sample」方塊發出的箭頭,會流入「Discriminator」方塊。底部分支會饋送至「Discriminator」方塊,該方塊的開頭方塊標示為「Random Input」。箭頭從「隨機輸入」方塊指向標示為「產生器」的方塊。箭頭從「Generator」方塊指向第二個「Sample」方塊。箭頭從「Sample」方塊指向「Discriminator」方塊。在「Discriminator」方塊的右側,兩個箭頭會連到圖表右側的兩個方塊。一個箭頭指向標示為「Discriminator loss」的方塊。另一個箭頭則指向標示「Generator loss」的方塊。在「Random Input」方塊、「Generator」方塊、底部的「Sample」方塊、「Discriminator」方塊、標示為「Real」和「Fake」的方塊,以及「Generator loss」方塊周圍繪製的黃色方塊上,標示「Backpropagation」字樣和左向箭頭,表示回傳運算會在黃色方塊所圈出的系統部分運作。

圖 1:產生器訓練中的回傳

隨機輸入

類神經網路需要某種形式的輸入內容。通常我們會輸入要處理的資料,例如要分類或預測的例項。不過,如果要輸出全新資料例項的網路,我們要使用什麼做為輸入內容?

在最基本的形式中,GAN 會將隨機雜訊做為輸入內容。產生器會將這項雜訊轉換為有意義的輸出內容。透過引入雜訊,我們可以讓 GAN 產生各種資料,從目標分布的不同位置取樣。

實驗結果顯示雜訊的分布並無太大影響,因此我們可以選擇容易取樣的項目,例如均勻分布。為方便起見,雜訊取樣空間的維度通常會比輸出空間的維度小。

使用鑑別器訓練產生器

為了訓練神經網路,我們會變更網路的權重,以減少輸出的錯誤或損失。不過,在我們的 GAN 中,產生器並未直接連結至我們試圖影響的損失。產生器會饋送至辨別器網路,而辨別器會產生我們嘗試影響的輸出內容。產生器損失會對產生器處以罰分,因為產生器產生的樣本遭到辨別器網路歸類為假。

這個額外的網路區塊必須納入反向傳播。反向傳播會計算權重對輸出內容的影響,藉此調整各權重方向,也就是在變更權重時,輸出內容會如何變化。不過,產生器權重所造成的影響,取決於它所饋入的判別器權重所造成的影響。因此,反向傳播會從輸出開始,並透過判別器流回至產生器。

同時,我們也不希望鑑別器在產生器訓練期間發生變化。嘗試命中移動中的目標,會讓產生器更難解決難題。

因此,我們會按照以下程序訓練產生器:

  1. 隨機雜訊樣本。
  2. 從取樣的隨機雜訊產生產生器輸出內容。
  3. 取得產生器輸出的「Real」或「Fake」區別器分類。
  4. 計算來自判別器分類的損失。
  5. 透過鑑別器和產生器進行回傳,以便取得漸層。
  6. 使用漸層效果,只變更產生器的權重。

這是產生器訓練的一個疊代。在下一節中,我們將說明如何同時訓練產生器和判別器。