0
生成式對抗網(wǎng)絡(luò)(Generative Adversarial Networks, GAN)誕生于2014年,它的作者Ian Goodfellow 因它而聲名大噪,被譽為“GAN 之父”。
據(jù)說GAN是Goodfellow手握扎啤在酒吧靈機一動所得(咦?這篇文章突然散發(fā)出麥芽的香氣)。GAN的誕生是AI界的里程碑,為這個本已生機勃勃的領(lǐng)域打開了一扇全新的大門。
近些年,針對GAN的研究層出不窮。科學(xué)家們紛紛為自己的工作冠以各種高大上的名字,以此烘托出自己的與眾不同和十足的神秘感。
然而所謂科研的實質(zhì)就是“填坑”,當(dāng)一個大牛提出了創(chuàng)新技術(shù),它的衍生品自然會層出不窮。
比如在初代GAN誕生后,便有人提出為其“加裝輪子”,成為CycleGAN(獨輪GAN);但是一個輪子走不穩(wěn),于是經(jīng)過改造就有人忽悠出一輛BiCycleGAN(自行車GAN);自行車忽悠過了,就有人提出ReCycleGAN(輪椅GAN)。照這個架勢,相信在不久的將來,我們還會迎來三蹦子GAN、越野車GAN、SUV GAN和SpaceX GAN(狗頭保命)。
GAN的成功要歸功于其在計算機視覺上的驚人效果。相對于VAE等傳統(tǒng)技術(shù),GAN能合成更加逼真的圖片,這些圖片真的能到以假亂真的地步。GAN在計算機視覺方向的成就斐然,實用性有口皆碑。然而人們不甘止步于此,所以在近些年,大家又在關(guān)注如何將其利用到聲音、文字等其他數(shù)據(jù)場景。比如說:
CycleGAN模型能夠?qū)D片從一個場景(domain)變到另一個場景。例如將男人的圖片過渡稱為女性、將年輕的照片變成衰老的樣子;
Text-to-image模型能夠根據(jù)文字生成對應(yīng)的圖片,不折不扣的腦補神器;
ProgressiveGAN能夠用于生成超高分辨率的圖片。
在這篇文章中,讓我們共同領(lǐng)略GAN的魅力,一口氣看盡GAN領(lǐng)域當(dāng)下最流行的“弄潮兒”,尤其是這六位:CycleGAN, StyleGAN, DiscoGAN, pixelRNN, text-2-image 和 lsGAN。
在此之前,我們不妨先看下初代 GAN 的相關(guān)原理和核心思想:
我們知道監(jiān)督學(xué)習(xí)包括生成式模型和判別式模型兩大類。其中判別式模型可以進(jìn)行分類任務(wù),比如根據(jù)輸入的圖片判斷圖中物體的種類。而生成式模型主要用于合成跟訓(xùn)練樣本具有類似特征的數(shù)據(jù),可以理解成合成“假數(shù)據(jù)”。
我們可以把生成式模型看作一個數(shù)據(jù)生成器,它能根據(jù)學(xué)習(xí)到的模式源源不斷地產(chǎn)生“看起來類似但不完全相同”的數(shù)據(jù)樣本。今天我們的主角GAN就屬于生成式模型。
從數(shù)學(xué)的角度來看,任何數(shù)據(jù)都有自己的概率分布特點。生成式模型的任務(wù)是從有限的訓(xùn)練數(shù)據(jù)中總結(jié)出這個概率,將這個概率學(xué)習(xí)成一個“公式”、一個“模型”或者一種“模式”。當(dāng)它學(xué)習(xí)到這個樣本的分布特點后,模型就能夠據(jù)此源源不斷地生成新的偽數(shù)據(jù)了。
有些童鞋可能會問這些偽數(shù)據(jù)有什么用呢?例如在影視作品中,每個群眾演員都是很貴的,只要露臉了他的薪酬可能就需要翻番。但在有了GAN之后,導(dǎo)演就能像種樹一樣合成虛擬的群演——“種人”,從而節(jié)省很多人力成本。另外在醫(yī)療場景下,患者樣本可能特別稀缺,那為了平衡數(shù)據(jù)集,一生就可以利用GAN產(chǎn)生部分患者數(shù)據(jù),避免模型過擬合的問題。
那么下面,我們首先來聊聊GAN的核心思想。
GAN由兩個部分組成:生成器和判別器。
生成器就像是制造偽鈔的印刷機,它負(fù)責(zé)根據(jù)隨機噪聲產(chǎn)生合成樣本(偽鈔);而判別器就像是驗鈔機,它負(fù)責(zé)識別這個輸入樣本是否為假數(shù)據(jù)(偽鈔)。生成器的輸出都是假數(shù)據(jù)(Fake Sample),而訓(xùn)練集中的樣本就是真樣本(Real Sample)。
當(dāng)我們訓(xùn)練判別器時,如果模型的輸入是生成器的偽數(shù)據(jù),那這個樣本對應(yīng)的標(biāo)簽就是Fake;如果輸入的是數(shù)據(jù)集中的真實樣本時,它對應(yīng)的標(biāo)簽就是Real。這樣能形成一個良好的負(fù)反饋,在訓(xùn)練判別器“鑒偽”的同時,也逼著生成器增強自己“造假”的能力。
圖1:GAN中包括生成器和判別器兩個部分
GAN成功之處在于生成器和判別器的“左右互搏之術(shù)”。
生成器會竭盡全力生產(chǎn)“假鈔”,試圖讓所生成的假數(shù)據(jù)通過判別器的嚴(yán)格審查。而判別器也會盡一切努力嚴(yán)格執(zhí)法,揪出每一個合成數(shù)據(jù),讓“假鈔”們無所遁形。
圖2:GAN中包括生成器和判別器兩個部分
下面我們簡單的看一下GAN的目標(biāo)函數(shù)以及優(yōu)化方法。本質(zhì)上來說,GAN需要解決和優(yōu)化的是一個最小-最大優(yōu)化問題(min-max optimization)。生成器的任務(wù)是最小化目標(biāo)函數(shù),而判別器的任務(wù)是最大化這個目標(biāo)函數(shù)。
待優(yōu)化的目標(biāo)函數(shù)如圖3所示。在公式中,D是判別器,G是生成器。Pz是潛在空間的一個概率分布,其實就是一個隨機的高斯噪聲,它是生成假數(shù)據(jù)的源頭。Pdata是訓(xùn)練數(shù)據(jù)集的概率分布。當(dāng)x是從Pdata中真實采樣的,我們便希望分辨器將其判別為真樣本。G(z)是生成器合成的假數(shù)據(jù),當(dāng)我們將其輸入判別器的時候,我們希望判別器能夠?qū)⑵渑袆e為假樣本。
GAN的目標(biāo)函數(shù)
判別器的目標(biāo)是最小化D(G(z)),也就是最大化(1-D(G(z)))。而生成器的目標(biāo)是最大化D(G(z)),也就是想讓判別器犯錯,看不出這是個假數(shù)據(jù),從而達(dá)到以假亂真的效果。所以生成器的目標(biāo)是最小化(1-D(G(z)))。判別器和生成器的目標(biāo)相反,所以這是一個典型的最小-最大優(yōu)化問題(min-max optimization)。
GAN中的目標(biāo)函數(shù)
不知道大家有沒有玩過一款叫做FaceApp的軟件,它能讓我們“穿越”時光,看看中年、老年時候的我們。譯者親測,效果十分震撼和可怕。譯者在第一次使用的時候愣了足足十余分鐘,仿佛真的見到了50年后的自己,甚至有種窺透天機的恐懼感。FaceApp中就使用了CycleGAN技術(shù)來實現(xiàn)這種“穿越”,或者專業(yè)點,叫領(lǐng)域轉(zhuǎn)換(Domain Transformation)。
言歸正傳,CycleGAN在近些年大火,它是一種廣泛應(yīng)用于風(fēng)格轉(zhuǎn)換的GAN模型。舉例來說,它能學(xué)習(xí)到藝術(shù)作品和真實照片之間的映射關(guān)系和變換方法。當(dāng)我們用手機拍一張照片,CycleGAN就能將它自動變成油畫;反之,CycleGAN也能還原藝術(shù)畫作創(chuàng)作時的真實照片,讓畫面更加真實、讓我們身臨其境。此外,CycleGAN還能學(xué)習(xí)到例如馬匹和斑馬之間的變換,也能讓照片里的季節(jié)背景自由切換。
為了方便介紹和陳述,我們用馬匹和斑馬的變換作為案例。這里設(shè)X數(shù)據(jù)集中都是馬匹的圖片,而Y數(shù)據(jù)集中都是斑馬的圖片。
CycleGAN的目標(biāo)是學(xué)習(xí)一個映射函數(shù)G,實現(xiàn)馬匹到斑馬圖片的變換。用公式表達(dá)起來就是G:X->Y。和普通GAN一樣,CycleGAN中也有自己的生成器和判別器。其中生成器的功能是根據(jù)輸入的馬匹圖片,輸出一張讓判別器以為是真實斑馬的圖片。這個目的能夠通過最優(yōu)化對抗損失(Adversarial loss)來實現(xiàn)。需要注意的是,CycleGAN不光能學(xué)到馬匹到斑馬的映射函數(shù)G,也能通過使用循環(huán)一致性損失(Cycle-Consistency Loss)學(xué)到逆向的、斑馬到馬匹的映射函數(shù)F:Y->X。
在訓(xùn)練的過程中,模型有兩組輸入。第一組輸入樣本{X1, Y1}中的每個Xi(馬匹)均有其所對應(yīng)的斑馬圖片(Yi)。而第二組數(shù)據(jù){X2, Y2}中,每個馬匹樣本Xi和斑馬圖片(Yi)都是不匹配的。
圖5. CycleGAN的訓(xùn)練過程
我們前邊提到,CycleGAN能夠?qū)W習(xí)到G和F這兩個映射函數(shù)。第一個是G,它能將馬匹圖片X轉(zhuǎn)換成斑馬圖片Y。第二個是F,它負(fù)責(zé)將斑馬圖片Y轉(zhuǎn)換成馬匹圖片X。所以CycleGAN其實是由兩個獨立的GAN組成的,也就包括了2個生成器Gx, Gy,以及2個判別器Dx和Dy。
其中Dx的任務(wù)是檢查輸入的Y和真實的斑馬Y之間有沒有差異。同樣的,Dy的任務(wù)是檢查輸入的X和真實的馬匹圖片集X間有沒有差異。這是通過對抗損失的最小化實現(xiàn)的。
此外,CycleGAN中還有另一個損失,就是循環(huán)一致性損失(Cycle-Consistency Loss)。它是用來在訓(xùn)練中使用{X2, Y2}這組無匹配樣本的數(shù)據(jù)集。循環(huán)一致性損失能夠幫助模型最小化重構(gòu)損失,也就同時實現(xiàn)F(G(x)) ≈ X ,以及G(F(Y)) ≈ Y。
所以總結(jié)起來,CycleGAN的損失函數(shù)由三個獨立的部分組成:
在損失的優(yōu)化過程中,目標(biāo)函數(shù)可以表達(dá)為:
以上就是CycleGAN的技術(shù)部分。CycleGAN的實際應(yīng)用效果十分逼真,比如下面這張圖片就使用CycleGAN實現(xiàn)了油畫與照片的轉(zhuǎn)換、馬匹和斑馬的轉(zhuǎn)換,以及季節(jié)切換的效果。從結(jié)果中我們可以看到,模型學(xué)習(xí)到了斑馬和馬匹切換的訣竅,也領(lǐng)悟到了季節(jié)變換的精髓。
Linu Torvalds曾經(jīng)說過:“Talk is cheap. Show me the code(能侃沒啥用,有本事貼代碼)”。CycleGAN的技術(shù)主要體現(xiàn)在損失函數(shù)上,所以在這里我們貼上一段損失函數(shù)的代碼片段。感興趣的同學(xué)可以自行查看論文原文。
# Generator G translates X -> Y
# Generator F translates Y -> X.
fake_y = generator_g(real_x, training=True)
cycled_x = generator_f(fake_y, training=True)
fake_x = generator_f(real_y, training=True)
cycled_y = generator_g(fake_x, training=True)
# same_x and same_y are used for identity loss.
same_x = generator_f(real_x, training=True)
same_y = generator_g(real_y, training=True)
disc_real_x = discriminator_x(real_x, training=True)
disc_real_y = discriminator_y(real_y, training=True)
disc_fake_x = discriminator_x(fake_x, training=True)
disc_fake_y = discriminator_y(fake_y, training=True)
# calculate the loss
gen_g_loss = generator_loss(disc_fake_y)
gen_f_loss = generator_loss(disc_fake_x)
total_cycle_loss = calc_cycle_loss(real_x, cycled_x) + \
calc_cycle_loss(real_y,cycled_y)
# Total generator loss = adversarial loss + cycle loss
total_gen_g_loss = gen_g_loss + total_cycle_loss + identity_loss(real_y, same_y)
total_gen_f_loss = gen_f_loss + total_cycle_loss + identity_loss(real_x, same_x)
disc_x_loss = discriminator_loss(disc_real_x, disc_fake_x)
disc_y_loss = discriminator_loss(disc_real_y, disc_fake_y)
效果沒看夠?我們再貼一張大圖,來看看馬匹和斑馬之間的變換效果。
論文:https://arxiv.org/abs/1703.10593
CycleGAN的詳細(xì)教程:https://www.tensorflow.org/tutorials/generative/cyclegan
GAN生成圖片不是什么難事,但是真的很逼真嗎~哼哼,小編覺得它估計還不行,輕易就能被人眼看穿!那童鞋你猜猜這兩張照片哪個是真的哪個是GAN生成的假照片~
“emm…右邊這張還有背景,它估計是真貨!左邊這個背景太單調(diào)了,估計是假的!”
哈哈,圖樣圖森破!真相是,它倆都是GAN生成的假貨!驚不驚喜、意不意外~(我倒是有點莫名害怕)
StyleGAN是近些年新出現(xiàn)的一種十分流行的網(wǎng)絡(luò)模型。它能夠生成分辨率為1024*1024的高清圖片。它的主體思想是堆疊很層的GAN,其中第一層用來生成低分辨率的圖像,而后的每層都逐漸增加圖片的分辨率。
在StyleGAN之前,也有一些人嘗試提高圖片的分辨率,它們大多是通過在圖片中添加隨機噪聲或者插值的方式實現(xiàn)的。但是這樣做的效果通常不好。StyleGAN發(fā)現(xiàn)了這個問題,它并沒有通過添加無意義的噪聲來“自欺欺人”。StyleGAN的做法是學(xué)習(xí)人臉的特征,并基于這個比較泛在的特點生成一個并不存在的人臉圖像。如果你質(zhì)疑StyleGAN的性能的話, 請戳這里,這個鏈接在每次打開的時候都會生成一張假的人臉圖,這個人臉圖是GAN隨機產(chǎn)生的,而不是從訓(xùn)練集中粘貼出來的。
典型的StyleGAN的結(jié)構(gòu)如上圖所示。網(wǎng)絡(luò)的輸入在經(jīng)過8層全連接網(wǎng)絡(luò)的處理后被映射成一個潛在向量z,z中就包括了人臉的各種特征。而生成器的合成器由18層網(wǎng)絡(luò)組成,它們將向量z從4*4的分辨率一直擴(kuò)大到1024*1024,實現(xiàn)了分辨率的升高。但此時生成的圖像還是黑白的,缺少RGB三個顏色通道。因此,StyleGAN在輸出層上使用了獨立的卷積結(jié)構(gòu)來添加顏色通道??吹竭@么深的全連接的時候我們就能猜到,這個網(wǎng)絡(luò)的參數(shù)量極大。事實上,它擁有2620萬個參數(shù)需要訓(xùn)練,因此StyleGAn需要十分龐大的訓(xùn)練數(shù)據(jù)集,也需要十分昂貴的計算資源。
在StyleGAN中,每層網(wǎng)絡(luò)都需要經(jīng)過AdaIN歸一化:
其中每個特征圖都會首先進(jìn)行獨立的歸一化操作,而后使用目標(biāo)風(fēng)格Y對應(yīng)的屬性進(jìn)行縮放和偏置轉(zhuǎn)換。因此Y的維數(shù)應(yīng)為該層網(wǎng)絡(luò)特征圖數(shù)量的兩倍。
PixelRNN是一種自回歸生成模型。
在這個人人曬圖的時代,我們隨便上網(wǎng)就能爬到數(shù)不勝數(shù)的圖像數(shù)據(jù)。但是這些“野生圖片”都是沒有標(biāo)簽的,而基于無標(biāo)簽數(shù)據(jù)的無監(jiān)督學(xué)習(xí)方法很難學(xué)習(xí)到數(shù)據(jù)的分布特點。這個問題一致困擾著我們,直到PixelRNN的出現(xiàn)。
PixelRNN的強大之處在于它能學(xué)習(xí)到圖像的離散概率分布,并預(yù)測或生成二維圖像中的像素。
我們知道循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)擅長學(xué)習(xí)數(shù)據(jù)的條件分布,比如LSTM能夠?qū)W習(xí)到序列數(shù)據(jù)和序列像素點之間的長時依賴特點。在PixelRNN中,它采取了漸進(jìn)式的生成方法,當(dāng)我們給出了X0~Xi的數(shù)據(jù)后,它預(yù)測下一步Xi+1的結(jié)果,而基于X0~Xi+1的結(jié)果,模型又能輸出Xi+2的值……以此類推,模型就能產(chǎn)生無窮無盡的數(shù)據(jù)了。
理論上來說,GAN網(wǎng)絡(luò)學(xué)習(xí)的是數(shù)據(jù)集隱式的概率分布,而PixelRNN這樣的自回歸模型學(xué)習(xí)的是數(shù)據(jù)集顯式的概率分布。這是因為GAN沒有明確地在函數(shù)中引入概率分布項,它是通過讓我們查看觀察模型所學(xué)到的概率分布來實現(xiàn)相同的目的。
上圖中是一個獨立的PixelRNN殘差塊,模型會疊加、串聯(lián)并訓(xùn)練若干層的殘差塊。一個典型的PixelRNN LSTM層的輸入特征的高度是特征圖高度的兩倍,即2h。為了減少特征維度,LSTM將狀態(tài)輸入門的尺寸設(shè)為h。在遞歸層之后,PixelRNN使用1*1的卷積來將每個特征的尺寸擴(kuò)大2倍,并將輸入分量加入輸出結(jié)果之中。
每當(dāng)我們提起GAN,它給人的印象大概就是“不羈放縱愛自由”,沒有太多的約束。它所生成圖像的風(fēng)格和樣式都比較隨意。
比如說,一個從小貓數(shù)據(jù)集上訓(xùn)練的GAN網(wǎng)絡(luò)能夠生成很多假的貓圖~這些貓在毛色、運動狀態(tài)、表情等等方面都很隨機。比如可能生成一張黑貓在吃飯的圖片,或是一張白貓在抓老鼠的圖片,也有可能是一張橘貓盯著自己的贅肉惆悵的圖片(狗頭保命),具有不可控的隨機性。當(dāng)然了,它們都是一個鼻子兩個耳朵的正常貓,符合貓的特征。
但是在商業(yè)領(lǐng)域中,人們往往需要精準(zhǔn)掌控所生成的內(nèi)容,嚴(yán)格按照人類控制生成一些樣本,否則要是出現(xiàn)一些違法或者引起公憤的內(nèi)容就得不償失了。因此GAN很少應(yīng)用在商業(yè)場景中。為了減少GAN生成圖像的隨機性,盡量控制其中的不可控因素,人們就想設(shè)計一種模型讓GAN能夠根據(jù)我們的預(yù)期和控制生成特定圖像。
在這里,我們隆重介紹Text-2-Image模型,它能根據(jù)輸入的文字描述,有針對性地生成特定的圖像。這對于GAN的研究來說是一項意義重大的進(jìn)步。Text-2-Image的輸入是文字描述,輸出的是該描述所描繪的圖片。
舉例來說,當(dāng)我們輸入“一個有許多粉色的小圓花瓣的花花”的句子時,模型就能夠產(chǎn)生一張真的有好多粉色花瓣的花朵圖片,甚至還能把背后的綠葉背景也加上去:
在Text-2-Image模型中,生成器的輸入不再是隨機的噪聲向量了,而是一段有明確意義和確定描述的文字。這段文字會首先經(jīng)過嵌入(Embedding)層的處理進(jìn)行編碼,然后在編碼的結(jié)果后摻入噪聲向量并輸入生成器模型中。
比如在下面的這個例子中,文字會首先被轉(zhuǎn)換成256維的特征,然后和100維的噪聲拼接,形成356維的超級向量。其中的噪聲向量通常是從正態(tài)分布中隨機采樣的。
這種方法能夠給生成器一個生成規(guī)則(就是明確的文字描述),使生成結(jié)果符合該規(guī)則,從而降低生成結(jié)果在該方面的隨機性。
這樣的設(shè)計思想會給判別器帶來額外的壓力和任務(wù)。它既需要判斷輸入樣本是否為假數(shù)據(jù),又需要判斷輸入樣本是否符合了文字描述的要求。因此在訓(xùn)練的過程中,我們的輸入數(shù)據(jù)格式就要進(jìn)行調(diào)整,變成(圖像, 文字)的數(shù)據(jù)對。具體來說,一共有三種情況:
(正確圖片,正確描述)樣式的數(shù)據(jù),它的標(biāo)簽為1;
(錯誤圖片,正確描述)樣式的數(shù)據(jù),它的標(biāo)簽為0;
(假圖片,正確描述)樣式的數(shù)據(jù),它的標(biāo)簽為0.
其中第一類樣本是指我們?yōu)檎鎸崍D片提供了正確的文字描述,模型通過它們能學(xué)習(xí)出圖像的模式和文字描述之間的對應(yīng)關(guān)系。第二類樣本是指數(shù)據(jù)集中的描述和圖片不相符的情況,模型能夠通過它們了解不匹配是怎樣一個現(xiàn)象。最后一類樣本就是普通GAN中的假數(shù)據(jù)的判別,生成器通過學(xué)習(xí)它們來讓生成器盡量生成看起來不那么“假”的圖像。雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
具體到我們的花朵生成的例子中,訓(xùn)練數(shù)據(jù)集共有10種不同的組合:
下面我們來看一下Text-2-Image模型的生成結(jié)果,領(lǐng)略一下這臺聽話的偽鈔機的風(fēng)采~
最近一段時間,DiscoGAN備受學(xué)術(shù)和工業(yè)界的關(guān)注。這主要是由于DiscoGAN能夠?qū)W習(xí)跨領(lǐng)域非監(jiān)督數(shù)據(jù)間的關(guān)聯(lián)性。
對于人類來說,不同領(lǐng)域之間的關(guān)聯(lián)信息通常是很容易總結(jié)和學(xué)習(xí)的。比如在下圖中,我們一眼就能看出第一行的圖片都是書包,第二行的圖片都是鞋子,第一行和第二行對應(yīng)圖片在顏色特征上是一樣的。
然而在人工智能領(lǐng)域,模型很難挖掘出這種不匹配圖像之間的關(guān)聯(lián)和共性信息。所以為了解決這個實際存在的問題,研究人員發(fā)明了DiscoGAN,希望它能夠?qū)W習(xí)到不同領(lǐng)域數(shù)據(jù)間的關(guān)聯(lián)信息。
DiscoGAN和CycleGAN的核心思想十分類似。DiscoGAN也需要學(xué)習(xí)兩個映射函數(shù),一個用來學(xué)習(xí)領(lǐng)域X到領(lǐng)域Y的正向變換方法,另一個用來學(xué)習(xí)Y到X的反向的變換函數(shù)。而原始圖像和經(jīng)過兩次變換后的重建圖像間的不匹配程度使用了重構(gòu)損失來進(jìn)行計算。
此外,DiscoGAN的設(shè)計規(guī)則和CycleGAN也很類似,即希望將領(lǐng)域A的圖像先轉(zhuǎn)換到領(lǐng)域B,再將其從領(lǐng)域B轉(zhuǎn)換回領(lǐng)域A,然后想讓這個二手的切換回來的結(jié)果能夠和原始圖像盡量匹配,有種“出淤泥而不染”的感覺。
DiscoGAN和CycleGAN的不同之處在于,DiscoGAN為兩個領(lǐng)域都單獨使用了一個重構(gòu)損失函數(shù),而CycleGAN只使用一個統(tǒng)一的損失對其進(jìn)行表示。
(a)Vanilla GAN (b) 使用了重構(gòu)損失的GAN (c) DiscoGAN
DiscoGAN中的重要思想是利用重構(gòu)損失函數(shù)表示原始圖像和重構(gòu)圖像之間的差異。換個角度來看,它的變換就是從一個領(lǐng)域轉(zhuǎn)換到另一個領(lǐng)域,再從那個領(lǐng)域變換回來。兩個領(lǐng)域間來回切換轉(zhuǎn)換的過程是不是像極了夜店蹦迪的大燈球來回照射,難道人們因此才將其稱為迪斯科GAN(DiscoGAN)?哈哈。在領(lǐng)域A的數(shù)據(jù)變換到領(lǐng)域B后,數(shù)據(jù)被變換到另一個領(lǐng)域中進(jìn)行編碼表達(dá),而在將領(lǐng)域B的數(shù)據(jù)轉(zhuǎn)換回來的時候,DiscoGAN希望轉(zhuǎn)換回來的二手結(jié)果能夠跟原始數(shù)據(jù)盡力那個匹配。所以從數(shù)學(xué)的角度來說,DiscoGAN就是希望最小化重構(gòu)損失值。
總結(jié)來說,DiscoGAN包括兩個獨立的GAN網(wǎng)絡(luò),一個是GAB,一個叫GBA。在上圖中,模型正在嘗試學(xué)習(xí)汽車和人臉這兩個不同領(lǐng)域的數(shù)據(jù)圖像中物體的“方向”信息。在模型重建數(shù)據(jù)之后,圖像中的物體方向應(yīng)盡量和原始方向一致。
無監(jiān)督的數(shù)據(jù)通常是很便宜的,因為不用人類對其進(jìn)行昂貴的標(biāo)記。因此很多研究都在探索將GAN應(yīng)用在無監(jiān)督學(xué)習(xí)的應(yīng)用上。
在常規(guī)的GAN模型中,有一個讓人撓頭的問題就是梯度消失。梯度消失的原因有很多,其中一個就是判別器中使用的交叉熵?fù)p失函數(shù)。為了解決這個問題,LsGAN提出使用最小二乘損失函數(shù)替代交叉熵。實驗證明,在這樣操作之后LsGAN能夠生成更高質(zhì)量的圖像結(jié)果。
我們首先回顧一下,在Vanilla GAN中,模型使用最小最大化優(yōu)化方法訓(xùn)練模型。模型中的判別器是二分類的,輸出的結(jié)果非真即假。因此Vanilla GAN的判別器中使用了sigmoid對結(jié)果進(jìn)行激活,并且使用交叉熵作為損失。
這樣的設(shè)計會加劇模型訓(xùn)練中梯度消失的問題,因為對于那些位于決策超平面正確一邊的樣本來說,它們會遠(yuǎn)離特征空間中樣本分布密集的區(qū)域,從而產(chǎn)生極大的梯度(誤差值提高了嘛)。而當(dāng)我們使用最小二乘損失函數(shù)的時候就沒有這個問題了,它能夠讓學(xué)習(xí)的過程更加穩(wěn)定,從而產(chǎn)生質(zhì)量更高的圖像結(jié)果。
下圖是LsGAN需要優(yōu)化的目標(biāo)函數(shù),其中a是假數(shù)據(jù)樣本的標(biāo)簽,b是真實樣本的標(biāo)記,c是生成器希望判別器器對假樣本判別所輸出的值。
因此,在這種場景中就有兩個獨立的待優(yōu)化損失函數(shù)。一個是訓(xùn)練判別器用的,一個是訓(xùn)練生成器用的。
相比于Vanilla GAN來說,LsGAN具有很多優(yōu)點。在Vanilla GAN中,因為判別器使用二分類交叉熵?fù)p失函數(shù),所以如果一個樣本的分類結(jié)果正確,那它的損失值就=0。
但是在LsGAN中,決策結(jié)果并不是損失值的唯一判定標(biāo)準(zhǔn)。在lsGAN中,就算一個數(shù)據(jù)處于分類超平面中正確的一邊,但一旦它距離決策邊界很遠(yuǎn)的話,模型也會給予它很高的損失。
這種懲罰的方式迫使生成器朝向決策邊界產(chǎn)生數(shù)據(jù)。因此這也能在一定程度上解決梯度消失的問題,因為那些遠(yuǎn)離分類邊界的樣本就不會產(chǎn)生巨大的梯度了。
論文地址:https://arxiv.org/pdf/1611.04076.pdf
Github 開源地址:https://github.com/xudonmao/LSGAN
所有GAN網(wǎng)絡(luò)結(jié)構(gòu)都有一個共性,它們都是基于對抗損失進(jìn)行構(gòu)建和訓(xùn)練的。每個網(wǎng)絡(luò)都有一個生成器,也有一個判別器。它們的任務(wù)是互相欺騙,在左右互搏的過程中提升彼此。
GAN在近些年大放異彩,已經(jīng)成為機器學(xué)習(xí)領(lǐng)域中最熱門的研究方向之一。相信在不久的未來,我們會看到更多更有意思的GAN!
這個Github庫系統(tǒng)地整理了GAN相關(guān)的研究論文,感興趣的小伙伴不妨一讀哦:
https://github.com/hindupuravinash/the-gan-zoo
參考文獻(xiàn)見原文:https://towardsdatascience.com/6-gan-architectures-you-really-should-know-d0b7373a2585
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。