- 生成式人工智能(基于PyTorch實現)
- (美)劉煥良
- 2721字
- 2025-06-19 18:35:01
1.2 生成對抗網絡(GAN)
本節首先從較高層次概括介紹生成對抗網絡(GAN)的工作原理;然后以生成動漫人臉圖像為例,向讀者展示GAN的內部工作原理;最后,還將討論GAN的實際應用。
1.2.1 GAN概述
生成對抗網絡是一種生成模型,最初由Ian Goodfellow等人于2014年提出。[4]近年來GAN變得非常流行,因為它易于構建和訓練,而且可以生成各種各樣的內容。我們將在圖1.2的示例中看到,GAN采用了雙網絡架構,其中包括一個生成模型,負責捕捉生成內容時所需的底層數據分布,還包括一個判別模型,用于估算特定樣本來自真實訓練數據集(被視為“真實樣本”)而非生成模型(被視為“虛假樣本”)的可能性。該模型的主要目標是生成與訓練數據集中的數據非常相似的新數據實例。GAN生成數據的性質取決于訓練數據集的組成。例如,如果訓練數據由服裝灰度圖像組成,那么生成的圖像也將與這些服裝非常相似;同理,如果訓練數據集由人臉彩色圖像組成,那么生成的圖像也將與人臉相似。
[4] GOODFELLOW I. J, POUGET-ABADIE J, MIRZA M, et al. Generative adversarial nets[C]//Proceedings of the 27th International Conference on Neural Information Processing Systems, MIT Press, 2014:2672-2680.
圖1.2展示了GAN架構及其組成部分。為了訓練模型,訓練數據集中的真實樣本和生成器創建的虛假樣本都要輸入判別器。生成器的主要目的是創建與訓練數據集中的示例幾乎沒有區別的數據實例,而判別器則需要努力將生成器生成的虛假樣本與真實樣本區分開來。這兩個網絡進行著類似于貓鼠游戲的持續競爭,每個網絡都會不斷嘗試超越對方。
GAN模型的訓練過程包括多次迭代。在每次迭代中,生成器都會獲取某種形式的任務描述(步驟1),并用它來創建虛假圖像(步驟2)。虛假圖像與訓練集中的真實圖像一起被輸入判別器(步驟3)。判別器會嘗試將每個樣本分類為“真實”或“虛假”,然后將分類結果與實際標簽[真實數據(ground truth)]進行比較(步驟4)。判別器和生成器都會從分類結果中獲得反饋(步驟5),并據此提高自己的能力:判別器會調整自己識別虛假樣本的能力;生成器則會學習如何增強其生成更加令判別器信服的樣本的能力。隨著訓練的推進,當兩個網絡都無法進一步提升時,就會達到一個平衡點。此時,生成器即可生成與真實樣本幾乎沒有區別的數據實例了。

圖1.2 生成對抗網絡架構及其組成部分。生成對抗網絡采用雙網絡架構,包括一個生成模型(左)和
一個判別模型(中),生成模型負責捕捉底層數據分布,判別模型負責估算特定樣本來自真實訓練
數據集(被視為“真實樣本”)而非生成模型(被視為“虛假樣本”)的可能性
為了準確理解GAN的工作原理,我們看一個示例。
1.2.2 示例:生成動漫人臉
假設我們是充滿激情的動漫愛好者,正在進行一項激動人心的探索,打算使用一種名為深度卷積GAN(deep convolutional GAN,DCGAN,詳見第4章)的強大工具創建自己的動漫臉譜。
回顧圖1.2中間上方,有一張標有“真實樣本”的圖像。我們將使用63632張彩色動漫人臉圖像作為訓練數據集。圖1.3展示了訓練集中的32個示例圖像。這些特殊圖像起著至關重要的作用,它們將作為判別器網絡的一半輸入數據。

圖1.3 動漫人臉訓練數據集中的示例
圖1.2左側是生成器網絡。為了每次生成不同圖像,生成器會從潛空間(latent space)獲取一個向量Z作為輸入。我們可以把這個向量看作“任務描述”。在訓練過程中,我們從潛空間中提取不同的Z向量,因此網絡每次都會生成不同圖像。這些虛假圖像是判別器網絡的另一半輸入數據。
注意
通過改變向量Z的值,可以生成不同的輸出。在第5章中,我們將學習如何選擇向量Z來生成具有特定特征(如男性或女性特征)的圖像。
但有一個問題需要注意,那就是在兩個網絡學會有關創作和檢測的技能之前,生成器生成的圖像都是亂七八糟的!此時的結果看起來完全不像圖1.3中的動漫人臉。實際上,此時的結果看起來就像電視屏幕上顯示的“雪花點”(第4章會展示此時的生成結果)。
我們需要對模型進行多次迭代訓練。在每次迭代中,我們將生成器創建的一組圖像連同從訓練集中隨機抽取的一組真實動漫人臉圖像輸入判別器,我們期望判別器預測每張圖像是由生成器創建的(虛假圖像)還是從訓練集中抽取的(真實圖像)。
有人可能會問:在每次迭代訓練中,判別器和生成器是如何學習的?一旦做出了預測,判別器并不會就此作罷,而是從每張圖像的預測錯誤中學習。有了這些新獲得的知識,判別器將調整參數,使自己在下一輪判斷中做出更好的預測。生成器也沒閑著!它記錄圖像生成過程和預測結果。有了這些知識,生成器也將調整自己的網絡參數,力爭在下一次迭代中生成越來越逼真的圖像,以降低判別器識別出虛假圖像的概率。
隨著不斷迭代,我們將迎來顯著變化。生成器網絡不斷進化,生成的動漫人臉越來越逼真,與訓練集中的人臉非常相似。與此同時,判別器網絡也通過磨煉自己的技能,成長為一名火眼金睛的識假偵探。創作者和檢測者就這樣聯手“翩翩起舞。”
漸漸地,我們終于迎來了那個神奇時刻:模型達成了一種平衡,一種完美的平衡。此時,生成器創建的圖像變得驚人地真實,以至于與訓練集中的真實動漫人臉難以區分。此時,判別器已經無所適從了,它會對每張圖像都賦予50%的真實性概率,無論圖像是來自訓練集,還是由生成器生成的。
最后,讀者可以看看圖1.4所示的一些生成器作品示例,它們看起來與訓練集中的圖像沒有任何區別。

圖1.4 由DCGAN中訓練好的生成器生成的動漫人臉圖像
1.2.3 為什么要關注GAN
GAN易于實現且用途廣泛。在本書中,我將介紹如何用GAN生成幾何圖形、復雜圖案、高分辨率圖像和風格顯著的音樂。
GAN的實際應用不僅限于生成逼真的數據。GAN還可以將一個圖像域(image domain)中的屬性轉換到另一個圖像域中。正如第6章將要介紹的,我們可以訓練CycleGAN(GAN家族中的一種生成模型)將人臉圖像中的金發轉換為黑發,同一模型還可以將黑發轉換為金發。圖1.5顯示了4行圖像。第一行是金發原始圖像。經過訓練的CycleGAN將其轉換為黑發圖像(第二行)。最后兩行則分別是黑發原始圖像和轉換后的金發圖像。

圖1.5 利用CycleGAN改變發色。如果將金發圖像(第一行)輸入訓練好的CycleGAN模型,
該模型會將這些圖像中的金發轉換為黑發(第二行)。這個模型還能將黑發(第三行)
轉換為金發(第四行)
想想看,我們能從GAN的訓練中獲得哪些神奇技能?這些技能不僅很酷,而且超級實用!假設我們經營了一家“按單定制”的在線服裝店(在實際生產所訂購的產品前,允許顧客對產品進行定制)。我們的網站展示了大量獨特的設計供顧客挑選,但這會面臨一個問題:只有當顧客下訂單后,才會生產定制化的服裝。那么如何在下單前讓顧客看到這些定制化服裝的照片?制作這些服裝的高質量照片可能會非常昂貴,因為必須先生產出商品,然后才能拍攝它們。
GAN可以大展拳腳了!我們再也不需要收集大量已生產服裝的照片,而是可以用CycleGAN等工具將一組圖像的特征轉換為另一組圖像的特征,從而創造出一系列全新款式。這只是GAN的一種有趣用法。由于這些模型具有超強的通用性,可以處理各種數據,因此在實際應用中具有無限的可能性。