葉 晨,關(guān) 瑋
(同濟(jì)大學(xué) 嵌入式系統(tǒng)與服務(wù)計算教育部重點實驗室,上海 201804)
生成式對抗網(wǎng)絡(luò)[1](generative adversarial networks)是一種類似于對抗博弈游戲的訓(xùn)練網(wǎng)絡(luò)。該訓(xùn)練網(wǎng)絡(luò)由兩個神經(jīng)網(wǎng)絡(luò)組成,一個稱為生成器,一個稱為判別器。生成器嘗試生成能夠欺騙判別器的虛假樣本,而判別器盡可能去判別樣本是真實樣本,還是生成器生成的虛假樣本。就好像假鈔專家與造假鈔者的博弈。二者在對抗訓(xùn)練下不斷優(yōu)化,最終達(dá)到納什平衡。該網(wǎng)絡(luò)的目標(biāo)函數(shù)為
式中:z是服從高斯分布的隨機噪聲;G代表生成器;D代表判別器;Pdata(x)代表真實數(shù)據(jù)的概率分布;Pz(x)代表隨機噪聲的概率分布;x~Pdata表示從真實數(shù)據(jù)的分布中隨機抽取x;z~Pz表示從高斯分布的隨機噪聲中抽取噪聲z;D(x)和G(z)均表示判別器和生成器在接收括號內(nèi)輸入后所輸出的向量。對于生成器G來說,通過隨機噪聲z作為輸入,生成器G期望自己生成的樣本盡可能地欺騙判別器D,所以需要最大化判別概率D(G(z)),于是對于生成器G,它的目標(biāo)函數(shù)是最小化log(1-D(G(z)))。對于判別器D,為了盡可能地區(qū)分真實樣本和虛假的生成樣本,它希望最小化判別概率D(G(z))的同時,最大化判別概率D(x),其中x是真實樣本。于是判別器的目標(biāo)函數(shù)是最大化logD(x)+log(1-D(G(z)))(可見生成器G的目標(biāo)函數(shù)與真實樣本無關(guān))。在訓(xùn)練的開始階段,因為生成器G產(chǎn)生的樣本往往較差,判別器D能絕對自信地否定樣本,導(dǎo)致梯度較小,所以訓(xùn)練初期一般將目標(biāo)函數(shù)log(1-D(G(z)))改為log(D(G(z)))。
理論證明方面,當(dāng)生成器固定時,對V(G,D)求導(dǎo),可以得到最優(yōu)判別器D*(x)
式中:PG(x)代表生成器構(gòu)造的概率分布。把最優(yōu)判別器代入目標(biāo)函數(shù),得到生成器G的目標(biāo)函數(shù)等價于優(yōu)化Pdata(x),PG(x)的JS(Jensen-Shannon)散度。而且只有當(dāng)D是最優(yōu)判別器時,G的目標(biāo)函數(shù)才等同于JS散度,所以文獻(xiàn)[1]提出應(yīng)該減少更新G參數(shù)的次數(shù),多次更新D的參數(shù)。可以證明,當(dāng)訓(xùn)練樣本足夠多時,模型會收斂,PG(x)=Pdata(x),二者達(dá)到納什均衡。此時判別器D對真實樣本還是生成樣本的判別概率均為1/2,樣本達(dá)到了難以區(qū)分的程度。
文獻(xiàn)[1]提出GAN網(wǎng)絡(luò)時,對生成器的目標(biāo)是重構(gòu)真實分布,使得生成器產(chǎn)生的數(shù)據(jù)分布與真實分布越接近越好。上文提到,在已達(dá)最優(yōu)判別器的情況下,生成器的優(yōu)化公式恰好代表了PG(x)與Pdata(x)之間的JS散度。于是最小化生成器目標(biāo)函數(shù)的任務(wù)實質(zhì)上轉(zhuǎn)變?yōu)樽钚』瘍蓚€分布間的JS散度。因為只有在判別器是最優(yōu)的情況下,生成器的目標(biāo)函數(shù)才表示兩個分布間的JS散度,所以訓(xùn)練中往往迭代更新多次判別器,再更新一次生成器。這種做法是為了避免在更新生成器之后,V(G,D)(式(1))的函數(shù)域改變,可能導(dǎo)致再找到的新的判別器反而使得JS散度升高,因此,不要過于頻繁地更新生成器。
文獻(xiàn)[1]中使用JS散度來度量兩個分布之間的距離有一個明顯的局限性,就是JS散度有其自身的函數(shù)域,從宏觀理解上來說,也許會導(dǎo)致PG(x)和Pdata(x)的分布的可能取值域缺乏重疊,或者PG(x)成為了Pdata(x)分布的一部分(模式崩塌)。文獻(xiàn)[2]提出了一個通用的模式f-divergence,來衡量兩個分布的距離。
f-divergence定義為
式中:P、Q為任意兩個不同的分布;p(x)和q(x)代表從P和Q中采樣出x的概率。f可以是各種不同的版本,只要滿足它是一個凸函數(shù)并且f(1)=0。
舉例來說,當(dāng)設(shè)置f(x)=xlogx,f-divergence即為KL Divergence
當(dāng) 設(shè) 置f(x)=-logx,f-divergence 即 為Reverse KL Divergence
f-divergence可以說是對生成式對抗網(wǎng)絡(luò)模型的統(tǒng)一,對任意滿足條件的f都可以構(gòu)造一個對應(yīng)的生成式對抗網(wǎng)絡(luò)。
該方法的提出是為了解決GAN在訓(xùn)練中模式崩塌的問題,避免PG(x)與Pdata(x)差異過大。但是在實驗當(dāng)中發(fā)現(xiàn),不同的f-divergence對訓(xùn)練結(jié)果并沒有改善。
上面提到,通過JS散度來衡量兩個分布的差異,從而拉近PG(x)與Pdata(x)的距離,存在一些問題。首先,對于圖像采樣的分布來說,PG(x)與Pdata(x)是高維復(fù)雜空間在低維空間的折疊,有時候兩種分布的重疊部分甚至可能不存在。其次,想要完全還原兩種分布的重疊部分,需要足夠多的數(shù)據(jù)。從數(shù)學(xué)計算上來說,兩種分布,如果在空間中沒有折疊,那么不管它們之間是距離無限遠(yuǎn),還是非常接近,只是保持了微妙的不相交,它們的JS散度計算出來都是log 2。那么對于二分類判別器,如果兩種分布不重疊,判別器始終都判定生成樣本為假,梯度完全消失,無法進(jìn)行優(yōu)化。
針對判別器的梯度消失的問題,文獻(xiàn)[3]提出LSGAN(最小二乘GAN)的方法。
LSGAN 是f-divergence中f(x)=(t-1)2時的特殊情況。LSGAN的損失函數(shù)J(D)定義如下:
因為sigmoid激活函數(shù)在中間部分的梯度較大,而極大或極小部分的梯度近乎消失,當(dāng)判別器深度置信地判定真實圖片與生成圖片時,始終處于無梯度狀態(tài)。于是LSGAN提出使用線性的激活函數(shù),這樣梯度便不會消失。實驗表明,該方法比傳統(tǒng)生成式對抗網(wǎng)絡(luò)生成圖像的效果有較為明顯的提升。
針對JS散度以及f-divergence散度不能充分表征兩個分布之間距離的問題,WGAN[4](Wasserstein GAN)提出了一種全新的衡量兩個分布之間距離的方法,稱為泥土移動距離。把任意兩個分布P和Q當(dāng)作兩堆土堆,移動土堆P的土,使得土堆P與土堆Q的分布完全一致,則最少需要移動的泥土量可以表征兩種分布的差異。
可以很明顯并且直觀地看出,通過泥土移動距離來判別兩個分布的距離,不會出現(xiàn)只要PG(x)與Pdata(x)無重疊部分,不論差距多大,JS散度的值始終是log 2這樣的情況。
基于評估泥土移動距離,目標(biāo)函數(shù)變?yōu)?/p>
式中:D∈1-Lipschitz表示任意函數(shù)||f(x1)-f(x2)||≤||x1-x2||,即限制判別器D足夠平滑,因變量不隨自變量的變化而變化過快。這種情況可以避免當(dāng)判別器D訓(xùn)練得過好,真實樣本的判別趨近于正無窮,生成樣本的判別趨近于負(fù)無窮,導(dǎo)致判別器D無法收斂。
但是實際操作中很難做到限制D∈1-Lipschitz,于是文獻(xiàn)[4]提出的方法是限制權(quán)重。設(shè)置一個權(quán)重上限p和權(quán)重下限-p,如果更新后的權(quán)重w>p,則w=p;如果更新后的w<-p,那么w=-p。
WGAN-GP[5](Wasserstein GAN-Gradient Penalty)提出,雖然控制D∈1-Lipschitz很難,但是可以等效地通過控制每一個樣本x的梯度的范式≤1來限制判別器,從而得到同樣的效果,即
于是引入一個梯度懲罰,只要梯度的范式大于1,就會產(chǎn)生損失。目標(biāo)函數(shù)變?yōu)?/p>
式中:λ表示人為選定的參數(shù);?x表示對x求偏導(dǎo)數(shù);||?xD(x)||表示對D(x)中的x計算范式。但是對所有的x都判別梯度,計算量過大。文獻(xiàn)[5]提出對一個懲罰分布內(nèi)的x進(jìn)行梯度懲罰的計算。該范圍的選擇方法為從Pdata(x)任選一個點,再從PG(x)任選一個點,把兩個點相連,從連線上任取一點,就屬于懲罰分布。直覺上可以認(rèn)為這樣選點的意義是連線上的點能夠影響PG(x)如何移動到Pdata(x)。
在實驗中發(fā)現(xiàn),||?xD(x)||并不是越接近0效果越好,而是越接近1訓(xùn)練效果越好。于是目標(biāo)函數(shù)變?yōu)?/p>
式中:x~Ppenalty表示上文提到的從Pdata(x)一個點和PG(x)一個點的連線上取中間位置的x。實驗結(jié)果表明,該方法可以顯著提高生成圖片的效果。
傳統(tǒng)GAN在目標(biāo)函數(shù)上的優(yōu)勢明顯,但是訓(xùn)練困難,效果也不佳。于是人們希望能夠?qū)AN和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)相結(jié)合,生成更真實效果更好的圖片。本節(jié)列舉一些常見的GAN變體。
由于傳統(tǒng)GAN的生成圖片除了真實與否完全不受控制,所以條件控制下的GAN(cGAN)應(yīng)運而生。生成器同時接收隨機噪聲z和條件變量c作為輸入。判別器在接收真實圖片x或者虛假圖片x′的同時也同時接收條件變量c。下文將會詳細(xì)介紹這一類GAN的變體。結(jié)構(gòu)圖如圖1所示。其中x′代表生成器G輸出的虛假圖片。
圖1 條件GAN結(jié)構(gòu)示意圖Fig.1 Structure of conditional GAN
增加一個分類器的GAN,又稱為輔助GAN(ACGAN)[6]。在判別器D之外,增加一個分類器C來對圖片類別標(biāo)簽進(jìn)行分類,可以輔助訓(xùn)練。該分類器可以是預(yù)訓(xùn)練好的分類器。結(jié)構(gòu)圖如圖2所示。圖中,C代表分類器,c′代表分類器的輸出。
圖2 輔助GAN結(jié)構(gòu)示意圖Fig.2 Structure of auxiliary GAN
自動編碼器與解碼器是很常見的生成模型訓(xùn)練方法。解碼器的功能類似于生成器G,而編碼器編碼出的向量似乎與隱空間特征有著千絲萬縷的聯(lián)系,常用于特征提取/降維。BiGAN(bidirectional GAN)提出將額外的判別器D加入編碼解碼器結(jié)構(gòu)中,實現(xiàn)隱空間映射,優(yōu)化生成結(jié)果[7]。真實圖片x通過編碼器En編碼為特征向量,隨機噪聲z通過解碼器De解碼為生成圖片,然后把成對數(shù)據(jù)同時送入判別器D來判斷數(shù)據(jù)對是來自編碼器En還是解碼器De。結(jié)構(gòu)圖如圖3所示。圖中,En(x)和De(z)分別代表編碼器和解碼器的輸出。
圖3 BiGAN結(jié)構(gòu)示意圖Fig.3 Structure of BiGAN
變分自動編碼器(VAE)是自動編碼器的一種變體,通過在編碼器En的輸出中加入隨機噪聲z,再將編碼器學(xué)習(xí)到的方差信息σ的指數(shù)輸出與z作點乘,加上編碼器的輸出m后送入解碼器De,從而削弱輸出之間的關(guān)聯(lián)[8]。結(jié)構(gòu)圖如圖4所示。圖中,exp代表取指數(shù),u代表經(jīng)過一系列運算后傳到解碼器De的輸入。
VAE在重構(gòu)圖片時遇到的常見問題是平均了同類別圖片的各種不同形態(tài),導(dǎo)致圖片模糊。于是VAE-GAN提出將判別器D加入到網(wǎng)絡(luò)結(jié)構(gòu)中,從而改善圖片質(zhì)量[9]。結(jié)構(gòu)圖如圖5所示,其中z~En(x)表示噪聲z是來自編碼器En的輸出。
圖4 VAE結(jié)構(gòu)示意圖Fig.4 Structure of VAE
圖5 VAE-GAN結(jié)構(gòu)示意圖Fig.5 Structure of VAE-GAN
深度卷積GAN(DCGAN)是一種常見的訓(xùn)練GAN的神經(jīng)網(wǎng)絡(luò)架構(gòu)[10]。該網(wǎng)絡(luò)自提出后受到大范圍的推崇。該網(wǎng)絡(luò)主要提出了五點更新:①不使用池化層,用步幅卷積層代替;②在生成模型和判別模型時都使用 BatchNormalization[11];③不使用全連接層;④生成網(wǎng)絡(luò)的激活函數(shù)除了輸出層使用Tanh以外,都使用ReLU;⑤判別網(wǎng)絡(luò)的激活函數(shù)都使用LeakyReLU。該網(wǎng)絡(luò)對于穩(wěn)定GAN的訓(xùn)練有許多幫助,實驗中往往能取得較為優(yōu)異的表現(xiàn)。
文獻(xiàn)[10]中通過實驗來測試DCGAN在特征提取上的能力。在CIFAR-10數(shù)據(jù)集上,廣泛使用的一個基于K-means方法的單層特征提取基準(zhǔn),采用4 800維的特征映射,能夠獲得80.6%的準(zhǔn)確率。該基準(zhǔn)方法的多層非監(jiān)督擴展能夠達(dá)到82%的準(zhǔn)確率。DCGAN只使用512維的特征映射,能夠達(dá)到82.8%的準(zhǔn)確率,超過了所有基于K-means的方法。實驗結(jié)果見表1[10]。其中可支持向量機簡寫為SVM。
表1 CIFAR-10分類準(zhǔn)確率及特征維度對比Tab.1 Comparison of accuracy and feature of CIFAR-10
文獻(xiàn)[10]還測試了DCGAN在街景房屋數(shù)字(SVHN)數(shù)據(jù)集上對1 000類樣本的分類準(zhǔn)確率,實驗結(jié)果表明,DCGAN的表現(xiàn)超過所有現(xiàn)存方法。實驗結(jié)果見表 2[10]。表中,將 Stack What-Where Auto-Encoders模型簡稱為SWWAE。
表2 SVHN數(shù)據(jù)集上1 000個類別的分類準(zhǔn)確率Tab.2 SVHN classification accuracy with 1 000 labels
傳統(tǒng)的GAN網(wǎng)絡(luò)對生成的模式?jīng)]有限制,無法控制輸出與輸入的關(guān)系,得不到嚴(yán)格限制條件下的生成樣本。通過增加限制條件,可以得到想要的結(jié)果。
在早期的監(jiān)督學(xué)習(xí)中,標(biāo)簽控制生成的圖片有一個顯著的問題,就是相同的物體,可能有不同的遠(yuǎn)近大小在不同角度的呈現(xiàn)。例如,近距離的動車特寫圖片和遠(yuǎn)距離的動車全景圖片標(biāo)簽相同。在傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)訓(xùn)練中,生成圖片往往會取相同標(biāo)簽不同場景的平均值,于是產(chǎn)生了模糊的圖片。這種多模態(tài)生成問題可以通過GAN來解決。
在文獻(xiàn)[1]中提到GAN也許可以加上限制條件來進(jìn)行訓(xùn)練。于是文獻(xiàn)[12-13]對類別標(biāo)簽限制進(jìn)行了嘗試。cGAN中將隨機噪聲z與類別標(biāo)簽c一同送入生成器,同時判別器對生成的樣本和類別標(biāo)簽c一同進(jìn)行判別。于是訓(xùn)練集變成了3種數(shù)據(jù)對:{真實圖片,匹配的標(biāo)簽},{真實圖片,不匹配的標(biāo)簽},{生成圖片,匹配的標(biāo)簽}。其中只有第一種數(shù)據(jù)對,判別器D應(yīng)當(dāng)判定為正確。目標(biāo)函數(shù)為
式中:x|y表示在y標(biāo)簽限制下取到x;z|y表示在y標(biāo)簽限制下取到z。實驗結(jié)果表明,cGAN的確能夠控制生成模式,產(chǎn)生指定類別的圖像,但圖像的效果并沒有得到改善,說明網(wǎng)絡(luò)的結(jié)構(gòu)還需要更進(jìn)一步的優(yōu)化方法。針對生成高分辨率圖片的困難,文獻(xiàn)[14]提出了一種方法,利用拉普拉斯金字塔結(jié)構(gòu)[15]來訓(xùn)練網(wǎng)絡(luò),從而解決大圖片生成模糊的問題。這種策略將最初的問題分解為一系列更易于管理的階段,在每個圖片尺度上都分別使用cGAN方法訓(xùn)練一個基于卷積網(wǎng)絡(luò)的生成模型。該方法稱之為Laplacian GAN(LAPGAN)。具體結(jié)構(gòu)如圖6所示。
圖6 LAPGAN結(jié)構(gòu)示意圖Fig.6 Structure of LAPGAN
訓(xùn)練網(wǎng)絡(luò)包含一系列的cGAN網(wǎng)絡(luò),從64×64的圖像I0開始,每次對圖片縮小采樣成I1,再把I1擴大采樣為I0′,得到原始圖片相同尺寸的模糊圖片。再通過清晰圖片和模糊圖片得到真實的銳化圖片h0,而模糊圖片作為生成器G0的輸入條件,與隨機噪聲z0一起生成虛假的銳化圖片h0′,讓判別器D0進(jìn)行判斷。縮小的清晰圖片I1送入下一層cGAN進(jìn)行同樣步驟的訓(xùn)練。直到最后一層的圖片尺寸變?yōu)?×8。該方法能顯著改善生成的圖片質(zhì)量。
僅有類別標(biāo)簽限制的樣本,并不能完全解決生成問題的多樣性需要。人們希望能夠僅僅給出語言描述,就產(chǎn)生相關(guān)的圖片。文獻(xiàn)[16]提出通過具體的語言描述,來生成合理的鳥類和花類圖片。這類問題可以分解為兩個小問題:①學(xué)習(xí)一個文本特征向量,這個文本特征向量能夠捕獲重要的視覺細(xì)節(jié);②使用這些特征來合成非常真實的圖片。將文本編碼為特征向量是基于文獻(xiàn)[17]中的模型來訓(xùn)練的。給定一組訓(xùn)練數(shù)據(jù)集{(vn,tn,yn):n=1,…,N},文本分類器的損失函數(shù)為
式中:Δ表示0-1損失;vn表示圖片;tn是相對應(yīng)的描述文本;yn是類別標(biāo)簽。分類器fv和ft的參數(shù)化如下:
式中:α是圖像編碼器;β是文本編碼器。對公式(13)來說,給定一個圖片v,對v編碼為α(v),然后猜測一個文本描述t,這個t是來自類別空間y∈Y的某一類別y的某個文本描述,記作t~τ(y)。那么通過這個計算,可以知道有某一類別y的文本描述t,可以使得α(v)β(t)最大,那么這個y就是推測的類別y。公式(14)也是同理。最后,使得圖像分類器和文本分類器的判斷損失最小,獲得一個訓(xùn)練好的文本編碼器,該文本編碼器編碼過的文本特征作為條件,傳入DCGAN[10]進(jìn)行訓(xùn)練。
在訓(xùn)練過程中,開創(chuàng)性地區(qū)分兩種錯誤來源:不真實的圖像與任何文本,以及不匹配的文本的真實圖像。即在每個訓(xùn)練步驟中將3種類型的輸入饋送到判別器:{真實圖像,匹配文本},{真實圖像,不匹配文本},{虛假圖像,真實文本}。這種訓(xùn)練技術(shù)對于生成高質(zhì)量圖像非常重要,因為它不僅告訴模型如何生成逼真的圖像,而且還告訴文本和圖像之間的對應(yīng)關(guān)系。
在訓(xùn)練文本生成圖像的過程中發(fā)現(xiàn),隨機噪聲z往往與圖片風(fēng)格因素(例如背景色、姿態(tài)等)有關(guān)。為了獲得某種指定風(fēng)格的圖片,可以訓(xùn)練一個風(fēng)格編碼器。風(fēng)格編碼器的損失函數(shù)定義為
式中:β(t)代表訓(xùn)練好的文本編碼器對t進(jìn)行編碼;S代表風(fēng)格編碼器;損失函數(shù)Lstyle最小化隨機噪聲z和z與文本編碼產(chǎn)生的圖片經(jīng)過風(fēng)格編碼器回溯的編碼噪聲的L2范數(shù);t,z~N(0,1)表示t來自于文本樣本集,噪聲z來自于正態(tài)分布。當(dāng)風(fēng)格編碼器訓(xùn)練好,給定一個指定的圖片,想要生成與圖片相同風(fēng)格的另一張圖片,只需要編碼該圖片的風(fēng)格,作為z傳入生成器即可。
通過文本描述只控制生成的圖片內(nèi)容是不夠的,還需要能夠控制內(nèi)容生成的具體細(xì)節(jié)以及具體位置。文獻(xiàn)[18]提出一個新模型 GAWWN(generative adversarial what-where network),可以控制生成內(nèi)容和生成位置。該模型把問題分解為確定位置和生成圖片兩個部分。對于如何確定位置,GAWWN提出的第一種方法是通過空間變換網(wǎng)絡(luò)學(xué)習(xí)對象的邊界框。空間變換器網(wǎng)絡(luò)的輸出與輸入圖片大小相同,但是對象邊界外的值都置為0??臻g變換網(wǎng)絡(luò)的輸出經(jīng)過幾個卷積層將其大小縮減為一維向量,這不僅保留了文本信息,而且還通過邊界框提供了對象位置的約束。這種方法的優(yōu)點是它是端到端的,不需要額外的輸入。GAWWN提出的第二種方法是使用指定的關(guān)鍵點來約束圖像中對象的不同部分(例如頭部、腿部、手臂、尾部等)。為了讓關(guān)鍵點包含位置信息,對于每個關(guān)鍵點,生成一個掩碼矩陣,其中具有位置信息的關(guān)鍵點置為1,其他為0,該張量放入二進(jìn)制矩陣中,即1表示存在關(guān)鍵點,0表示不存在需控制的關(guān)鍵點,然后在深度方向上進(jìn)行復(fù)制。雖然這種方法能夠?qū)ι傻木植刻卣鬟M(jìn)行位置約束,但它需要額外的用戶輸入來指定關(guān)鍵點。實驗結(jié)果表明,該方法雖然基于文獻(xiàn)[16]的架構(gòu),但是不僅能指定位置生成圖片的內(nèi)容,還能把清晰圖片尺寸從64×64擴展到128×128。不過該方法在人臉生成上效果較差,并且僅適用于具有單個對象的圖像。
StackGAN提出,為了模仿人類由粗到精的作圖方法,可以使用兩個生成器進(jìn)行文本到圖像的合成,而不是只使用一個生成器[19]。第一個生成器由隨機噪聲和文本描述作為輸入,負(fù)責(zé)生成64×64的粗糙圖像,只包含目標(biāo)圖形的一些基礎(chǔ)形狀和基本顏色,以及背景樣式;而第二個生成器獲取第一個生成器的輸出以及相同的文本描述,來完成整個繪圖過程,生成具有更高分辨率和更清晰細(xì)節(jié)的圖像,每個生成器都匹配自己的判別器,并且每個生成器都加入一個KL(Kullback-Leibler)散度參數(shù)限制,來使文本特征的分布更接近高斯分布。
StackGAN++在StackGAN的基礎(chǔ)上,提出了一個巨有多級生成器的樹狀結(jié)構(gòu)網(wǎng)絡(luò)[20]。輸入可以看作根節(jié)點,而不同的分叉上都能生成不同尺度的圖片。在該網(wǎng)絡(luò)中,監(jiān)督學(xué)習(xí)與非監(jiān)督學(xué)習(xí)同時進(jìn)行,并互為補充。
AttnGAN](Attentional GAN)通過在圖像和文本特征上使用注意機制進(jìn)一步擴展了StackGAN++的體系結(jié)構(gòu)[21。
PPGN(plug & play genarative network)使用了降噪自編碼和朗之采樣,采用迭代的方法來進(jìn)行訓(xùn)練[22]。該方法的效果勝于同時期任何的標(biāo)簽限制以及文本限制的圖像生成模型。
文本描述控制的GAN有一個共同缺點就是在一個圖像中涉及多個復(fù)雜對象的情況下,所有現(xiàn)有模型都工作得很糟糕。因為模型只學(xué)習(xí)圖像的整體特征,而不是學(xué)習(xí)其中每種對象的概念。
圖像到圖像的轉(zhuǎn)換就好像一個場景到另一個場景的轉(zhuǎn)換,又或者說是一種風(fēng)格遷移,比如照片到畫家畫作的風(fēng)格遷移。
文獻(xiàn)[23]提出將圖片作為限制條件的通用GAN訓(xùn)練框架,稱為pix2pix。早期的論文研究發(fā)現(xiàn),該損失函數(shù)與更傳統(tǒng)的損失函數(shù)一起訓(xùn)練對訓(xùn)練結(jié)果有幫助,例如L2距離[24],即判別器D的任務(wù)保持不變,但是生成器G的任務(wù)不僅是欺騙判別器,而且還要接近L2意義上的真實輸出。該文章使用L1距離而不是L2,因為L1鼓勵更少的模糊。在判別網(wǎng)絡(luò)D方面,設(shè)計了一個判別器體系結(jié)構(gòu),稱之為PatchGAN,該網(wǎng)絡(luò)只能在補丁規(guī)模上懲罰結(jié)構(gòu)損失。這個判別器試圖分類每個N×N大小的補丁圖像是真實的還是假的。該實驗可以產(chǎn)生相當(dāng)優(yōu)秀的生成樣本,盡管添加了Dropout處理噪聲[25],但是依然存在網(wǎng)絡(luò)輸出隨機性較差的問題。
與此類有監(jiān)督學(xué)習(xí)不同的是,無監(jiān)督學(xué)習(xí)下的圖片風(fēng)格轉(zhuǎn)換,以不成對的訓(xùn)練集進(jìn)行訓(xùn)練。CycleGAN[26]、DualGAN[27]以及 DiscoGAN[28]可謂有異曲同工之妙。它們的思想類似于一種表現(xiàn)良好的翻譯器,可以將中文翻譯為英文,該英文再翻譯為中文后,和最初的中文無差別。將該思想應(yīng)用在生成器G上,進(jìn)行一種循環(huán)的雙重學(xué)習(xí)。結(jié)構(gòu)如圖7所示。圖中,G和F都是生成器,DX和DY都是判別器。
圖7 cycleGAN結(jié)構(gòu)示意圖Fig.7 Structure of cycleGAN
以CycleGAN為例,首先要訓(xùn)練兩個互為反向的目標(biāo)函數(shù)。對于生成器G:X→Y和它的判別器DY,為了滿足循環(huán)x→G(x)→F(G(x))≈x,加上循環(huán)一致性損失:
在這里,對于來自域X的每個圖像x,圖像轉(zhuǎn)換周期應(yīng)該能使x回到原始圖像,即x→G(x)→F(G(x))≈x,一般稱之為前向循環(huán)一致性。類似地,對于來自域Y的每個圖像y、G和F也應(yīng)該滿足后向循環(huán)一致性:y→F(y)→G(F(y))≈y。所以,完整的訓(xùn)練目標(biāo)就變成兩個對抗損失加上循環(huán)一致性損失。
上述模型都旨在實現(xiàn)一對一的場景轉(zhuǎn)換。文獻(xiàn)[29]提出一種多場景的通用轉(zhuǎn)換框架,整個網(wǎng)絡(luò)只使用一對生成器和判別器。生成器除了接收隨機噪聲外,還需要接收目標(biāo)領(lǐng)域的信息。判別器除了判別圖片是否真實外,還需要判別圖片屬于哪一個領(lǐng)域。與此同時,為了防止圖像翻譯過程中內(nèi)容的改變,需再加上重構(gòu)損失,以保證內(nèi)容的完整。
這種無監(jiān)督學(xué)習(xí)最明顯的缺點就是需要大量的訓(xùn)練數(shù)據(jù)來學(xué)習(xí)特征。文獻(xiàn)[30]提出通過編碼器、解碼器來學(xué)習(xí)特征,從而實現(xiàn)將圖片轉(zhuǎn)換到訓(xùn)練階段從未看過的目標(biāo)類圖像。
上述模型中,pix2pix能夠產(chǎn)生最為清晰的圖像。
由于GAN網(wǎng)絡(luò)的優(yōu)點是不需要針對應(yīng)用的問題去設(shè)計專門的損失函數(shù),不需要顯式地建模數(shù)據(jù)分布,所以在圖像、文本、語音等諸多領(lǐng)域都有廣泛的應(yīng)用。
高分辨率技術(shù)是指從低分辨率圖像重建出相應(yīng)的高分辨率圖像,在無法采集到清晰圖像時,具有重要應(yīng)用價值,例如監(jiān)控設(shè)備、醫(yī)學(xué)影像等。然而,傳統(tǒng)的基于深度學(xué)習(xí)的方法是通過卷積網(wǎng)絡(luò)對原始的圖像進(jìn)行信息采集,生成的高分辨率圖像缺乏具體的紋理細(xì)節(jié),容易產(chǎn)生模糊。GAN作為一種生成模型,可以巧妙地解決該問題。SRGAN[31](superresolution GAN)在GAN的原始損失基礎(chǔ)上,利用殘差網(wǎng)絡(luò),加上了感知相似性損失,來生成細(xì)節(jié)豐富的圖像。感知損失重點關(guān)注判別器中間層的特征誤差,而不是輸出結(jié)果的逐個像素誤差。
高分辨率重建的圖像質(zhì)量往往使用峰值信噪比(PSNR)衡量,PSNR的值越大,圖像質(zhì)量越好,數(shù)值大于20 dB符合重建圖像標(biāo)準(zhǔn)。文獻(xiàn)[31]中采取截斷思想進(jìn)行了實驗,在相同網(wǎng)絡(luò)結(jié)構(gòu)下,通過對抗損失訓(xùn)練的SRGAN產(chǎn)生的圖像PSNR達(dá)到29 dB以上,在數(shù)值上會略低于不采取對抗損失訓(xùn)練的網(wǎng)絡(luò)產(chǎn)生的圖像,然而后者會出現(xiàn)細(xì)節(jié)模糊,前者則會產(chǎn)生非常細(xì)膩的紋理。
圖像檢測小目標(biāo)對象存在的問題往往在于小目標(biāo)對象過低的分辨率,所以直觀的解決辦法便是將低分辨率圖像擴大為高分辨率圖像來加強判別能力。文獻(xiàn)[32]將判別器分為對抗分支和感知分支。對抗分支負(fù)責(zé)傳統(tǒng)的生成大圖像任務(wù),而感知分支負(fù)責(zé)保證大圖像在檢測中的效用。SeGAN(segmenting GAN)使用一個分段器、一個生成器和一個鑒別器來復(fù)原重構(gòu)被隱藏對象[33]。
與場景轉(zhuǎn)換相反,對象變形是在背景不變的情況下,用特定條件替換圖像中的對象。GeneGAN(generated GAN)使用了編碼解碼器結(jié)構(gòu),編碼器將圖像分解為背景特征和對象特征,解碼器將背景特征和要變形的對象特征重新整合來重構(gòu)圖像[34]。重要的是,為了使特征空間分離,需要兩個分離的訓(xùn)練集,一個是具有該對象的圖像集,另一個是不具有該對象的圖像集。此外,GAN還可以應(yīng)用于圖像混合任務(wù),將一個對象植入另一個圖像的背景中。GPGAN(gaussian-poisson GAN)[35]提出將基于GAN的和傳統(tǒng)的基于梯度的圖像融合方法相結(jié)合。GPGAN試圖通過優(yōu)化高斯-泊松方程(Gaussian-Poisson equation)[36]生成高分辨率的良好融合圖像。
利用GAN的生成能力,不僅能夠生成全新的,具有創(chuàng)造性的視頻、音樂或語言類事物,而且還能夠通過標(biāo)簽限制、隱空間的條件限制,來對已有的此類事物進(jìn)行定性或定量的修改、修復(fù)和完善,例如視頻后期處理、音域修改、人聲模仿等,從而大量提升此類產(chǎn)業(yè)產(chǎn)品的效率,節(jié)省大量人力成本和時間成本。
一般來說,視頻由相對靜止的背景和動態(tài)的運動目標(biāo)組成。VGAN(video GAN)使用一個兩階段的生成器[37]。3D卷積神經(jīng)網(wǎng)絡(luò)生成器負(fù)責(zé)生成運動前景,2D卷積神經(jīng)網(wǎng)絡(luò)生成器負(fù)責(zé)生成靜止的背景。Pose-GAN結(jié)合VAE和GAN方法來生成視頻,首先,VAE結(jié)合當(dāng)前幀的姿態(tài)和過去的姿態(tài)特征預(yù)測下一幀的運動信息,然后3D卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成的GAN生成后續(xù)視頻幀[38]。MoCoGAN(motion and content GAN)提出在隱空間對內(nèi)容部分和運動部分進(jìn)行分離,使用RNN網(wǎng)絡(luò)建模運動部分[39]。生成視頻內(nèi)容的一致性往往使用平均內(nèi)容距離(ACD)衡量。若真實視頻的ACD值為最優(yōu)值0,實驗表明,MoCoGAN的ACD平均值能夠達(dá)到1.79,遠(yuǎn)低于VGAN的5.02。
在音樂生成方面,C-RNN-GAN(continuous RNN-GAN)[40]將生成器和判別器都建模為一個具有長短時記憶(LSTM[41])的RNN,直接提取音樂的整個序列。但是,音樂這種包括歌詞和音符的離散數(shù)據(jù),使用GAN生成存在很多問題,缺乏局部一致性 。 而 SeqGAN(sequenceGAN)[42]、ORGAN(object reinforced GAN)[43]則采用了策略梯度算法,不是一次性生成完整的序列。SeqGAN將生成器的輸出視為代理的策略,并將判別器的輸出作為獎勵。就像強化學(xué)習(xí)一樣,生成器選擇從判別器那里獲得更大的獎勵。ORGAN與SeqGAN略有不同,在獎勵函數(shù)中添加了一個硬編碼的目標(biāo)函數(shù)來實現(xiàn)指定的目標(biāo)。
在語言生成方面,RankGAN[44]用語句生成器和排序器代替?zhèn)鹘y(tǒng)判別器。類似于傳統(tǒng)GAN的對抗,語句生成器努力使生成的虛假語句在排序器中獲得較高的排序,而排序器努力把真實語句置于較高的排序。因為生成的語句也是離散的,所以運用了類似SeqGAN和ORGAN的梯度策略算法。
在語音生成方面,VAW-GAN(Variational autoencoding Wasserste in GAN)[45]是一種結(jié)合了GAN和VAE框架的語音轉(zhuǎn)換系統(tǒng)。編碼器處理語音內(nèi)容z,而解碼器在給定目標(biāo)說話者信息y的條件下生成語音。在國際標(biāo)準(zhǔn)中,統(tǒng)一使用平均主觀意見分(MOS)值來評價語音質(zhì)量。VAW-GAN在驗證集和測試集的得分均超過3分,優(yōu)于基準(zhǔn)VAE,展現(xiàn)了更豐富的頻率變化以及更清晰的聲音。
SegAN(segmentation GAN)提出了一個分割者-批評者結(jié)構(gòu)來分割醫(yī)學(xué)圖片[46]。與GAN的結(jié)構(gòu)相似,分割者生成預(yù)測的分割圖片,而批評者判斷分割圖片是真實的還是分割者生成的。SeqAN在人腦腫瘤分割挑戰(zhàn)BraTS 2013數(shù)據(jù)集上達(dá)到了最優(yōu)方法的分?jǐn)?shù),并且在BraTS 2015數(shù)據(jù)集上,獲得了切片分和準(zhǔn)確率的最高分。DI2IN(deep image-toimage network)通過對抗訓(xùn)練分割3D CT圖像,該方法在頸椎、胸腔、腰椎的CT分割準(zhǔn)確率上都超過了 已 有 的 方 法[47]。 SCAN(structure correcting adversarial network)使用GAN方法分割X射線圖像,在JSRT數(shù)據(jù)集上對心臟和肺部的識別準(zhǔn)確率以及分割準(zhǔn)確率均超過了所有現(xiàn)存方法,并且每張測試時間只需0.84 s,超過原基準(zhǔn)時間的26 s[48]。
GAN往往存在較為嚴(yán)重的訓(xùn)練問題,在WGAN中進(jìn)行了較為詳細(xì)的介紹。許多論文也致力于解決訓(xùn)練問題,下面列舉一些改善訓(xùn)練的方法。
有許多在神經(jīng)網(wǎng)絡(luò)中常用的優(yōu)化方法同樣適用于GAN的訓(xùn)練。首先是對輸入圖片進(jìn)行預(yù)處理,將輸入圖像規(guī)范化到-1~1之間,并且在訓(xùn)練中使用批量標(biāo)準(zhǔn)化。針對梯度消失和模式崩塌問題,需要避免在訓(xùn)練中引入稀疏矩陣。激活函數(shù)盡量采用ReLU等變體,同時使用最大值池化層。模式崩塌時,生成的圖片過于相似,可以減小每一批次送入判別器的圖片數(shù)量。在對訓(xùn)練過程暫不清晰時,梯度下降的優(yōu)化可優(yōu)先使用Adam[49]。針對過擬合問題,可以在判別器的輸入中添加隨機噪聲,Dropout的使用也有極大的幫助,亦或是采取6.3節(jié)提到的標(biāo)簽平滑方法。而常用的提前終止訓(xùn)練防止過擬合往往并不需要,因為訓(xùn)練過程很難理想化地達(dá)到納什均衡。
能用DCGAN的時候就選用DCGAN。當(dāng)不能使用DCGAN而且沒有穩(wěn)定的模型時,可以使用混合模型,例如KL+GAN或者VAE+GAN。在架構(gòu)選擇中,寬度往往比深度重要。在使用VAE時,給生成器與判別器增加一些噪聲對訓(xùn)練是有幫助的[50]。
當(dāng)判別器D的結(jié)果只是真實標(biāo)簽1和虛假標(biāo)簽0時,容易產(chǎn)生過于置信的結(jié)果。使用標(biāo)簽平滑方法,用0.7~1.0之間的隨機值代替標(biāo)簽1,用0~0.3的隨機值代替標(biāo)簽0。
除此之外,可以不評估最后輸出的真假標(biāo)量,而是評估判別器D某一層輸出的特征和真實圖片在該層輸出特征的差異,就像評估編碼器編碼特征的距離。該方法稱為特征匹配。特征匹配引入了隨機性,可以減輕模式崩塌,也使得判別器更難過擬合。
4.3節(jié)提到的PatchGAN也十分值得嘗試使用。它將所有補丁范圍內(nèi)的損失求平均作為最終的損失,可以使生成器生成更加銳利清晰的邊緣。
當(dāng)單個GAN不足以有效地處理任務(wù)時,可以堆疊多個GAN來將問題模塊化。例如,F(xiàn)ashionGAN使用兩個GAN來執(zhí)行局部圖像翻譯[51]。LAPGAN中使用了拉普拉斯金字塔結(jié)構(gòu)的GAN。StackGAN思路同樣類似。Progressive GAN(ProGAN)[52]可以生成高質(zhì)量的高分辨率圖像。
自從2014年Goodfellow等人首次提出GAN網(wǎng)絡(luò)模型結(jié)構(gòu),利用該網(wǎng)絡(luò)精妙的零和博弈思路來處理各式各樣的問題,以及解決該網(wǎng)絡(luò)訓(xùn)練困難的論文,如雨后春筍般涌現(xiàn)。本文旨在通俗地解釋GAN的基礎(chǔ)理論,整理解釋了較為常用的GAN訓(xùn)練模型,以及在時間線上按照理論發(fā)展的邏輯整理出條件限制下GAN在圖片生成方面的發(fā)展,并且較為宏觀地歸納GAN在各種不同場景的應(yīng)用,同時總結(jié)了一些改善訓(xùn)練的技巧。筆者相信,這一技術(shù)將會大幅度改進(jìn)深度學(xué)習(xí)在一些應(yīng)用場景中存在的局限性,尤其是在生成模型方面,從零到有所謂創(chuàng)造,一直是難以解決的問題,而GAN恰恰是對生成模型絕佳的改進(jìn)。目前相關(guān)應(yīng)用仍處于起步階段,在未來將會有更有效、更廣泛的嘗試。下面對于GAN在應(yīng)用上的落地,提出若干展望:
(1)GAN在圖像生成和風(fēng)格轉(zhuǎn)換方面真正體現(xiàn)出創(chuàng)造性。隨著社會的發(fā)展,文化娛樂所承載的生活比重越來越大,而文娛產(chǎn)業(yè)最重要的就是快速且創(chuàng)新。如果能夠利用GAN在生成方面的分布廣度,創(chuàng)造出一些新穎的文娛產(chǎn)品,從而激發(fā)人們的創(chuàng)造力,將會大大改善這個產(chǎn)業(yè)的生產(chǎn)力。例如,利用條件控制的GAN,通過給定故事背景,自動生成一系列動畫作品,而動畫作品的風(fēng)格也許會別具一格。
(2)GAN在圖像修復(fù)領(lǐng)域的應(yīng)用。不僅僅是在圖像中的目標(biāo)移除和填補,圖像超分辨率分析等方面,利用深度神經(jīng)網(wǎng)絡(luò)對于高維復(fù)雜映射具有強大的逼近能力,可以有效地提取圖像中的語義。結(jié)合語義和紋理可以對藝術(shù)品的細(xì)節(jié)修復(fù)提供幫助,例如壁畫修補,書法拓片的修復(fù)等。
(3)GAN在醫(yī)學(xué)圖像生成方面的應(yīng)用。輔助醫(yī)生做圖像數(shù)據(jù)分析的人工智能越來越常見,這些人工智能需要的訓(xùn)練數(shù)據(jù)樣本越多樣越好??墒窍啾冉】档臉颖?,研究人員難以獲取足夠多的病變圖像樣本。在類似各種形態(tài)(圖像、語音、語言等)的數(shù)據(jù)增廣研究中,GAN擁有廣闊的發(fā)展前景。