前面幾章學習了使用JAX進行計算機視覺、自然語言處理等方面深度學習任務,可以看到基于JAX的深度學習框架能夠較好地完成這些常見任務。本章講學習一種較為特殊的網(wǎng)絡,生成對抗網(wǎng)絡(Generative Adverbial Network,GAN)。
生成對抗網(wǎng)絡,是一種包含兩個網(wǎng)絡的神經(jīng)網(wǎng)絡結,將一個網(wǎng)絡與另一個網(wǎng)絡相互對立(因此稱為“對抗”)。
從目前對GAN的研究和應用來看,GAN的潛力巨大,因為它能學習和模仿任何數(shù)據(jù)分布,因此,GAB能被教導在任何領域創(chuàng)造類似于真實世界的東西,比如圖像、音樂、演講、散文等。在某種意義上,GAN可以被視為一個機器人藝術家,它而“創(chuàng)作”出令人印象深刻,甚至打動人類的作品。
GAN工作原理
為了理解GAN,需要知道GAN是如何工作的。實際上GAN的組成和工作原理非常簡單,
其中,
- 生成器。生成器學習如何生成看似合理的數(shù)據(jù)。對判別器來說,這些生成的實例會變成負面訓練樣本。
- 判別器。判別器學習如何通過真實數(shù)據(jù)的學習來辨別出生成器生成的假數(shù)據(jù)。判別器將懲罰生成器生成的“不可理(假)”的數(shù)據(jù)結果。
GAN訓練的整個步驟如下,
- 當訓練開始,生成器生成一個些很明顯的假數(shù)據(jù),判別器能快速地學習如何識別出是不是假數(shù)據(jù),

- 隨著訓練穩(wěn)步推進,生成器更接近于能生成蒙騙判別器的輸出數(shù)據(jù)。

- 最終,如果生成器訓練得當,在識別真實和虛假方面,判別器變得差強人意,而且將開始把假數(shù)據(jù)分類為真實數(shù)據(jù),識別的準確率降低。

GAN是一種生成式的對抗網(wǎng)絡。具體來說,就是通過對抗的方式去學習數(shù)據(jù)分布的生成式模型。所謂對抗,指的是生成網(wǎng)絡和判別網(wǎng)絡的互相對抗。生成網(wǎng)絡盡可能生成逼真的樣本,判別網(wǎng)絡這盡可能地去判別該樣本是真實的樣本還是生成的假樣本。
生成對抗網(wǎng)絡整個架構如下所示,

生成器和判別器兩者都是神經(jīng)網(wǎng)絡。生成器的輸出直接連接到判別器的輸入。通過反向傳播,判別器的分類結果給提供了一個信號讓生成器更新其權重。
生成器和判別器共同構成GAN
生成器(Generator)與判別器(Discriminator)共同構成一個GAN。再介紹GAN之前先對生成器和辨別器的作用做一個詳細的解釋。
判別器
對于判別器來說,給它一幅畫,判別器中的判別算法能夠判別這幅畫是不是由真人完成的。畫的真假是給予判別器的標簽一致,而這幅畫本身的向量特征就組成了輸入的特征向量。


把上述語句用數(shù)學形式表示出來,標簽被定義成為y,特征向量被定義成x,那么判別器的判定公式為,
也就是在輸入的x特征向量的基礎上定義出y的概率。在這個判別器的例子中,輸入向量也就是畫的特征被定義成x,而判別器對畫的判定則是y,即判別器對這幅畫判定真?zhèn)蔚母怕省R虼?,判別算法將特征映射為概率,判別器只關心其中的特征是夠滿足概率生成的條件。
生成器
與判別器的做法正好相反,它不關心向量是什么形式和內(nèi)容,它只關心標簽信息,嘗試由給定的標簽內(nèi)容去生成特征。同樣以畫為例,生成器需要考慮大的是,假定這個畫是由真實畫家完成的,那么這個畫包含哪些畫家的特征信息,這些信息又是什么樣的,怎么將其展示出來讓“別人(判別器)”認為這幅畫是畫家本人的真跡。這和人類思考的過程相類似。判別器關心的是由x‘判斷出y,而生成器關心的是如何生成一個x去滿足y的判定。用公式表示如下,
兩者區(qū)別總結如下,
- 判別器,學習不同類別和標簽之間的區(qū)分界限。
- 生成器,學習標簽中的某一類的概率分布并進行建模。
GAN是如何工作的
判別器如何工作
判別器在生成對抗網(wǎng)絡中,簡單來說是一個分類器。該分類器嘗試從生成器生成的假數(shù)據(jù)中識別真實數(shù)據(jù)。它可以使用任何適用于數(shù)據(jù)分類的網(wǎng)絡架構。判別器在訓練中使用誤差反向傳播機制來計算損失和更新權重參數(shù),
從上圖可以看到,判別器的訓練數(shù)據(jù)有兩處來源,
- 真實數(shù)據(jù)。真實數(shù)據(jù)實例,比如人的照片。在訓練中,判別器把這些實例用作正面樣本。
- 虛假數(shù)據(jù)。生成器生成的實例。在訓練中,判別器把這些實例用作負面樣本。
上圖中兩個Sample的框就是這兩種輸入到判別器的樣本。注意,在判別器訓練時,生成器不會訓練,即在生成器為判別器生成示例數(shù)據(jù)時,生成器的權重保持恒定。
在訓練判別器時,判別器連接到兩個損失函數(shù)。在訓練時,判別器忽略生成器的損失而只使用判別器損失。在訓練過程中,
- 判別器對真實數(shù)據(jù)和來自生成器生成的假數(shù)據(jù)進行分類。
- 判別器的損失函數(shù)將懲罰由判別器產(chǎn)生的誤判,比如把真實實例判定成假,或者把假的實例判定為真。
- 判別器通過對來自于判別器網(wǎng)損失函數(shù)計算的損失進行反向傳播。如上圖。
下面介紹為什么生成器的損失函數(shù)直接連接到判別器。
生成器如何工作
生成對抗網(wǎng)絡里的生成器,通過接受來自于判別器的反饋來學習如何創(chuàng)建假數(shù)據(jù)。生成器學習如何讓(欺騙)判別器把它的輸出歸類為真實數(shù)據(jù)。
相對于判別器的訓練,生成器的訓練要求生成器與判別器有更加緊密的集成。生成器訓練包含,
隨機輸入。神經(jīng)網(wǎng)絡需要某種形式的輸入。通常,為了達到某種目的而輸入數(shù)據(jù),比如一個輸入的實例用來進行分類任務或者預測。但當希望輸出一整個全新的數(shù)據(jù)實例,用什么樣輸入數(shù)據(jù)呢?
最常見基礎形式里,GAN使用隨機噪音作為它的輸入。然后,生成器將把隨機噪音轉換成有意義的輸出。通過引入噪音,可以從不同分布形式的不同空間采樣,讓GAN生成一個寬域的數(shù)據(jù),
實驗結果表明,不同噪音的分布不會產(chǎn)生太大影響。因此,可以選擇相對較易的采樣來源,比如,均勻分布。方便起見,噪音采樣空間的維度一般小于輸出空間的維度。
注意,有些GAN變種不使用隨機輸入來形成輸出。
生成器網(wǎng)絡,負責把隨機輸入轉換成數(shù)據(jù)實例。
判別器網(wǎng)絡,負責把上一步生成的數(shù)據(jù)歸類。
判別器輸出。
生成器的損失函數(shù),負責懲罰企圖蒙騙判別器失敗的情況(即生成器生成的假數(shù)據(jù),被識別器成功識破)。

使用判別器訓練生成器
要訓練神經(jīng)網(wǎng)絡,通過修改網(wǎng)絡的權重來減少誤差或者輸出的損失。在GAN里卻不同,生成器不直接連接到損失函數(shù)來試圖影響損失,而是把生成的數(shù)據(jù)輸出到判別器,而判別器會制造影響誤差損失的輸出。當生成器生成的數(shù)據(jù)被判別器成功識別成仿冒時,生成器損失函數(shù)會懲罰生成器。
另外,反向傳播里也包含網(wǎng)絡的額外處理。反向傳播通過計算對輸出的影響——更改后的權重在多大程度上影響輸,來調(diào)整每個權重以使其在正確的方向上。但,生成器權重的影響取決于直接輸出到判別器的權重的影響。因此,反向傳播始于輸出且穿過判別器回流到生成器。
在生成器訓練時,不希望判別器更改,就像嘗試擊中一個移動目標,會讓一個本身就麻煩的問題變得更加困難。所以,在訓練生成器時使用如下流程,
- 隨機噪音采樣作為輸入。
- 生成器從采樣的隨機噪音采樣里生成輸出。
- 讓判斷器判斷上述輸出是“真”或“假”,以此作為生成器的輸出。
- 從判別器的分類輸出計算誤差損失。
- 穿過判別器和生成器的反向傳播,從而獲得梯度。
- 使用梯度來更新生成器的權重。
這個流程是生成器訓練的一個迭代。下面會玩轉整個生成器和判別器。
訓練GAN
因為GAN包含兩個單獨經(jīng)訓練的網(wǎng)絡,GAN的訓練算法必須解決兩個難題,
- GAN必須能勝任來個不同的訓練(生成器和判別器)。
- GAN的趨同難以識別。
交替訓練
生成器和判別器有不同的訓練流程,那么如何才能作為一個整體來訓練GAN呢?GAN的訓練有交替階段,
- 判別器訓練一個或者多個迭代。
- 生成器訓練一個或者多個迭代。
- 不斷重復1和2步來訓練生成器和判別器。
在判別器訓練的階段,保持生成器不變。因為判別器訓練會嘗試從仿冒數(shù)據(jù)里分辨出真實數(shù)據(jù),判別器必須學習如何識別生成器的缺陷。這就是經(jīng)過完整訓練的生成器和只能生成隨機輸出的未訓練生成器的不同之處。
類似地,在生成器訓練的階段,保持判別器不變。否則,生成器像嘗試擊中移動目標一樣,可能永遠無法收斂。
這種往復訓練使得GAN能夠處理另外一些棘手的數(shù)據(jù)生成問題。開始于相對較簡單的分類任務問題,從而獲得一個解決生成難題的立足點。相反地,如果不能訓練一個分類器來識別真實數(shù)據(jù)和生成數(shù)據(jù)的區(qū)別,甚至無法識別與隨機初始化輸出的區(qū)別,那么GAN的訓練根本無法開始。
收斂
隨著訓練進行,生成器不斷改善,相對地,由于不能再輕易地識別出真實數(shù)據(jù)和假冒數(shù)據(jù)的,判別器的表現(xiàn)越來越差。當生成器完美地成功生成時,判別器的正確率只有50%?;旧虾蛼佉幻队矌艁眍A測正反一樣的概率一樣。
這種進度展現(xiàn)了作為整體GAN的一個問題,判別器的反饋隨著時間的推移越來越不具有意義。過了這個節(jié)點之后,即判別器完全給出了隨機反饋,如果繼續(xù)訓練GAN,那么生成器將使用判別器給出的無效反饋進行訓練,那么生成器的質(zhì)量可能會崩塌。
對于GAN來說,收斂往往是一個閃現(xiàn)的點,而不是牢固的、穩(wěn)態(tài)的。
如何理解生成對抗網(wǎng)絡
簡單來來說,GAN的功罪哦原理就是使用生成器去生成新的惡具有一定特征的向量內(nèi)容,并且將生成的向量內(nèi)容輸出入到判別器中去對去進行驗證,評估這些向量內(nèi)容為真或者假的概率。
比如假鈔制造,以及假鈔的識別,如下圖,

另外,信用結構,比如銀行的業(yè)務中,手寫字作為交易的依據(jù)是最常見的一種存根方式,而往往有人就是通過模仿別人的手寫數(shù)字進行詐騙,特別是在銀行領域,毛領支票的事件層出不窮,

在上面兩種場景中,生成器的作用就是根據(jù)標簽的類別進行特征生成,最終生成具有真實特征,比如紙幣或手寫特征的一系列圖片,即向量數(shù)據(jù),而判別器的目標就是當其被展示一個紙幣或者手寫字是能識別出真或者假。
在這個過程中,GAN所采取的步驟如下,
- 生成器使用隨機數(shù)生成一幅圖。
- 這幅圖和真實數(shù)據(jù)集的圖片流一起被送到判別器。
- 判別器接收真是的和仿冒的圖片,然后返回概率。
可以把GAN想象成貓鼠游戲里的偽造者和警察的角色,偽造者不斷學習假冒票據(jù),警察在學習如何檢測它們。雙方都是動態(tài)的,警察也在訓練,并且雙方在不斷升級中學習對方的方法。
需要強調(diào)的是,在這個過程中生成器和判別器是一個循環(huán)過程,隨著生成器和判別器能力的提升,其對應的生成和判別能力也越來越強。這樣實際上就構成了一個反饋鏈:
- 判別器和圖片標簽構成一個反饋。
- 生成器和判別器構成一個反饋。
結論
本章介紹了生成對抗網(wǎng)絡的原理和工作機制,特別是生成器和判別器的原理及訓練過程。