姓名:王咫毅
學(xué)號(hào):19021211150
【嵌牛導(dǎo)讀】要說(shuō)最近幾年在深度學(xué)習(xí)領(lǐng)域最火的莫過(guò)于生成對(duì)抗網(wǎng)絡(luò)佛南,即 Generative Adversarial Networks(GANs)了。它是 Ian Goodfellow 在 2014 年發(fā)表的扫茅,也是這四年來(lái)出現(xiàn)的各種 GAN 的變種的開(kāi)山鼻祖了论颅,下圖表示這四年來(lái)有關(guān) GAN 的論文的每個(gè)月發(fā)表數(shù)量算芯,可以看出在 2014 年提出后到 2016 年相關(guān)的論文是比較少的棵譬,但是從 2016 年,或者是 2017 年到今年這兩年的時(shí)間末购,相關(guān)的論文是真的呈現(xiàn)井噴式增長(zhǎng)破喻。
【嵌牛鼻子】深度學(xué)習(xí) GAN
【嵌牛提問(wèn)】如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的GAN的網(wǎng)絡(luò)搭建?
【嵌牛正文】
轉(zhuǎn)載自:http://www.reibang.com/p/9835612d21af
image
那么盟榴,GAN 究竟是什么呢曹质,它為何會(huì)成為這幾年這么火的一個(gè)研究領(lǐng)域呢?
GAN擎场,即生成對(duì)抗網(wǎng)絡(luò)羽德,是一個(gè)生成模型,也是半監(jiān)督和無(wú)監(jiān)督學(xué)習(xí)模型顶籽,它可以在不需要大量標(biāo)注數(shù)據(jù)的情況下學(xué)習(xí)深度表征玩般。最大的特點(diǎn)就是提出了一種讓兩個(gè)深度網(wǎng)絡(luò)對(duì)抗訓(xùn)練的方法。
目前機(jī)器學(xué)習(xí)按照數(shù)據(jù)集是否有標(biāo)簽可以分為三種礼饱,監(jiān)督學(xué)習(xí)坏为、半監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí),發(fā)展最成熟镊绪,效果最好的目前還是監(jiān)督學(xué)習(xí)的方法匀伏,但是在數(shù)據(jù)集數(shù)量要求更多更大的情況下,獲取標(biāo)簽的成本也更加昂貴了蝴韭,因此越來(lái)越多的研究人員都希望能夠在無(wú)監(jiān)督學(xué)習(xí)方面有更好的發(fā)展够颠,而 GAN 的出現(xiàn),一來(lái)它是不太需要很多標(biāo)注數(shù)據(jù)榄鉴,甚至可以不需要標(biāo)簽履磨,二來(lái)它可以做到很多事情蛉抓,目前對(duì)它的應(yīng)用包括圖像合成、圖像編輯剃诅、風(fēng)格遷移巷送、圖像超分辨率以及圖像轉(zhuǎn)換等。
比如字體的轉(zhuǎn)換矛辕,在zi2zi這個(gè)項(xiàng)目中笑跛,給出了對(duì)中文文字的字體的變換,效果如下圖所示聊品,GAN 可以學(xué)習(xí)到不同字體飞蹂,然后將其進(jìn)行變換。
zi2zi_examples
除了字體的學(xué)習(xí)翻屈,還有對(duì)圖片的轉(zhuǎn)換陈哑,pix2pix就可以做到,其結(jié)果如下圖所示妖胀,分割圖變成真實(shí)照片芥颈,從黑白圖變成彩色圖惠勒,從線條畫(huà)變成富含紋理赚抡、陰影和光澤的圖等等,這些都是這個(gè) pix2pixGAN 實(shí)現(xiàn)的結(jié)果纠屋。
pix2pix_examples
CycleGAN則可以做到風(fēng)格遷移涂臣,其實(shí)現(xiàn)結(jié)果如下圖所示,真實(shí)照片變成印象畫(huà)售担,普通的馬和斑馬的互換赁遗,季節(jié)的變換等。
cycleGAN_examples
上述是 GAN 的一些應(yīng)用例子族铆,接下來(lái)會(huì)簡(jiǎn)單介紹 GAN 的原理以及其優(yōu)缺點(diǎn)岩四,當(dāng)然也還有為啥等它提出兩年后才開(kāi)始有越來(lái)越多的 GAN 相關(guān)的論文發(fā)表。
1. 基本原理
GAN 的思想其實(shí)非常簡(jiǎn)單哥攘,就是生成器網(wǎng)絡(luò)和判別器網(wǎng)絡(luò)的彼此博弈剖煌。
GAN 主要就是兩個(gè)網(wǎng)絡(luò)組成,生成器網(wǎng)絡(luò)(Generator)和判別器網(wǎng)絡(luò)(Discriminator)逝淹,通過(guò)這兩個(gè)網(wǎng)絡(luò)的互相博弈耕姊,讓生成器網(wǎng)絡(luò)最終能夠?qū)W習(xí)到輸入數(shù)據(jù)的分布,這也就是 GAN 想達(dá)到的目的--學(xué)習(xí)輸入數(shù)據(jù)的分布栅葡。其基本結(jié)構(gòu)如下圖所示茉兰,從下圖可以更好理解G 和 D 的功能,分別為:
D 是判別器欣簇,負(fù)責(zé)對(duì)輸入的真實(shí)數(shù)據(jù)和由 G 生成的假數(shù)據(jù)進(jìn)行判斷规脸,其輸出是 0 和 1坯约,即它本質(zhì)上是一個(gè)二值分類器,目標(biāo)就是對(duì)輸入為真實(shí)數(shù)據(jù)輸出是 1莫鸭,對(duì)假數(shù)據(jù)的輸入鬼店,輸出是 0;
G 是生成器黔龟,它接收的是一個(gè)隨機(jī)噪聲妇智,并生成圖像。
在訓(xùn)練的過(guò)程中氏身,G 的目標(biāo)是盡可能生成足夠真實(shí)的數(shù)據(jù)去迷惑 D巍棱,而 D 就是要將 G 生成的圖片都辨別出來(lái),這樣兩者就是互相博弈蛋欣,最終是要達(dá)到一個(gè)平衡航徙,也就是納什均衡。
image
2. 優(yōu)點(diǎn)
(以下優(yōu)點(diǎn)和缺點(diǎn)主要來(lái)自 Ian Goodfellow 在 Quora 上的回答陷虎,以及知乎上的回答)
GAN 模型只用到了反向傳播,而不需要馬爾科夫鏈
訓(xùn)練時(shí)不需要對(duì)隱變量做推斷
理論上,只要是可微分函數(shù)都可以用于構(gòu)建 D 和 G ,因?yàn)槟軌蚺c深度神經(jīng)網(wǎng)絡(luò)結(jié)合做深度生成式模型
G 的參數(shù)更新不是直接來(lái)自數(shù)據(jù)樣本,而是使用來(lái)自 D 的反向傳播
相比其他生成模型(VAE到踏、玻爾茲曼機(jī)),可以生成更好的生成樣本
GAN 是一種半監(jiān)督學(xué)習(xí)模型尚猿,對(duì)訓(xùn)練集不需要太多有標(biāo)簽的數(shù)據(jù)窝稿;
沒(méi)有必要遵循任何種類的因子分解去設(shè)計(jì)模型,所有的生成器和鑒別器都可以正常工作
3. 缺點(diǎn)
可解釋性差,生成模型的分布Pg(G)沒(méi)有顯式的表達(dá)
比較難訓(xùn)練, D 與 G 之間需要很好的同步,例如 D 更新 k 次而 G 更新一次
訓(xùn)練 GAN 需要達(dá)到納什均衡,有時(shí)候可以用梯度下降法做到,有時(shí)候做不到.我們還沒(méi)有找到很好的達(dá)到納什均衡的方法,所以訓(xùn)練 GAN 相比 VAE 或者 PixelRNN 是不穩(wěn)定的,但我認(rèn)為在實(shí)踐中它還是比訓(xùn)練玻爾茲曼機(jī)穩(wěn)定的多.
它很難去學(xué)習(xí)生成離散的數(shù)據(jù),就像文本
相比玻爾茲曼機(jī),GANs 很難根據(jù)一個(gè)像素值去猜測(cè)另外一個(gè)像素值,GANs 天生就是做一件事的,那就是一次產(chǎn)生所有像素,你可以用 BiGAN 來(lái)修正這個(gè)特性,它能讓你像使用玻爾茲曼機(jī)一樣去使用 Gibbs 采樣來(lái)猜測(cè)缺失值
訓(xùn)練不穩(wěn)定,G 和 D 很難收斂凿掂;
訓(xùn)練還會(huì)遭遇梯度消失伴榔、模式崩潰的問(wèn)題
缺乏比較有效的直接可觀的評(píng)估模型生成效果的方法
3.1 為什么訓(xùn)練會(huì)出現(xiàn)梯度消失和模式奔潰
GAN 的本質(zhì)就是 G 和 D 互相博弈并最終達(dá)到一個(gè)納什平衡點(diǎn),但這只是一個(gè)理想的情況庄萎,正常情況是容易出現(xiàn)一方強(qiáng)大另一方弱小耀怜,并且一旦這個(gè)關(guān)系形成蛙吏,而沒(méi)有及時(shí)找到方法平衡,那么就會(huì)出現(xiàn)問(wèn)題了。而梯度消失和模式奔潰其實(shí)就是這種情況下的兩個(gè)結(jié)果略步,分別對(duì)應(yīng) D 和 G 是強(qiáng)大的一方的結(jié)果捂蕴。
首先對(duì)于梯度消失的情況是D 越好形葬,G 的梯度消失越嚴(yán)重竖幔,因?yàn)?G 的梯度更新來(lái)自 D,而在訓(xùn)練初始階段锉罐,G 的輸入是隨機(jī)生成的噪聲帆竹,肯定不會(huì)生成很好的圖片,D 會(huì)很容易就判斷出來(lái)真假樣本脓规,也就是 D 的訓(xùn)練幾乎沒(méi)有損失栽连,也就沒(méi)有有效的梯度信息回傳給 G 讓 G 去優(yōu)化自己。這樣的現(xiàn)象叫做 gradient vanishing,梯度消失問(wèn)題秒紧。
其次绢陌,對(duì)于模式奔潰(mode collapse)問(wèn)題,主要就是 G 比較強(qiáng)熔恢,導(dǎo)致 D 不能很好區(qū)分出真實(shí)圖片和 G 生成的假圖片脐湾,而如果此時(shí) G 其實(shí)還不能完全生成足夠真實(shí)的圖片的時(shí)候,但 D 卻分辨不出來(lái)叙淌,并且給出了正確的評(píng)價(jià)秤掌,那么 G 就會(huì)認(rèn)為這張圖片是正確的,接下來(lái)就繼續(xù)這么輸出這張或者這些圖片鹰霍,然后 D 還是給出正確的評(píng)價(jià)闻鉴,于是兩者就是這么相互欺騙,這樣 G 其實(shí)就只會(huì)輸出固定的一些圖片茂洒,導(dǎo)致的結(jié)果除了生成圖片不夠真實(shí)孟岛,還有就是多樣性不足的問(wèn)題。
更詳細(xì)的解釋可以參考令人拍案叫絕的Wasserstein GAN督勺,這篇文章更詳細(xì)解釋了原始 GAN 的問(wèn)題渠羞,主要就是出現(xiàn)在 loss 函數(shù)上。
3.2 為什么GAN不適合處理文本數(shù)據(jù)
文本數(shù)據(jù)相比較圖片數(shù)據(jù)來(lái)說(shuō)是離散的智哀,因?yàn)閷?duì)于文本來(lái)說(shuō)次询,通常需要將一個(gè)詞映射為一個(gè)高維的向量,最終預(yù)測(cè)的輸出是一個(gè)one-hot向量盏触,假設(shè) softmax 的輸出是(0.2渗蟹, 0.3, 0.1赞辩,0.2,0.15授艰,0.05)辨嗽,那么變?yōu)?onehot是(0,1淮腾,0糟需,0,0谷朝,0)洲押,如果softmax輸出是(0.2, 0.25圆凰, 0.2杈帐, 0.1,0.15,0.1 )挑童,one-hot 仍然是(0累铅, 1, 0站叼, 0娃兽, 0, 0)尽楔,所以對(duì)于生成器來(lái)說(shuō)投储,G 輸出了不同的結(jié)果, 但是 D 給出了同樣的判別結(jié)果,并不能將梯度更新信息很好的傳遞到 G 中去阔馋,所以 D 最終輸出的判別沒(méi)有意義轻要。
GAN 的損失函數(shù)是 JS 散度,JS 散度不適合衡量不想交分布之間的距離垦缅。(WGAN 雖然使用 wassertein 距離代替了 JS 散度冲泥,但是在生成文本上能力還是有限,GAN 在生成文本上的應(yīng)用有 seq-GAN,和強(qiáng)化學(xué)習(xí)結(jié)合的產(chǎn)物)
3.3 為什么GAN中的優(yōu)化器不常用SGD
SGD 容易震蕩壁涎,容易使 GAN 的訓(xùn)練更加不穩(wěn)定凡恍,
GAN 的目的是在高維非凸的參數(shù)空間中找到納什均衡點(diǎn),GAN 的納什均衡點(diǎn)是一個(gè)鞍點(diǎn)怔球,但是 SGD 只會(huì)找到局部極小值嚼酝,因?yàn)?SGD 解決的是一個(gè)尋找最小值的問(wèn)題,但 GAN 是一個(gè)博弈問(wèn)題竟坛。
對(duì)于鞍點(diǎn)闽巩,來(lái)自百度百科的解釋是:
鞍點(diǎn)(Saddle point)在微分方程中,沿著某一方向是穩(wěn)定的担汤,另一條方向是不穩(wěn)定的奇點(diǎn)涎跨,叫做鞍點(diǎn)。在泛函中崭歧,既不是極大值點(diǎn)也不是極小值點(diǎn)的臨界點(diǎn)隅很,叫做鞍點(diǎn)。在矩陣中率碾,一個(gè)數(shù)在所在行中是最大值叔营,在所在列中是最小值,則被稱為鞍點(diǎn)所宰。在物理上要廣泛一些绒尊,指在一個(gè)方向是極大值,另一個(gè)方向是極小值的點(diǎn)仔粥。
鞍點(diǎn)和局部極小值點(diǎn)婴谱、局部極大值點(diǎn)的區(qū)別如下圖所示:
局部極小值點(diǎn)和鞍點(diǎn)的對(duì)比
4. 訓(xùn)練的技巧
訓(xùn)練的技巧主要來(lái)自Tips and tricks to make GANs work。
1. 對(duì)輸入進(jìn)行規(guī)范化
將輸入規(guī)范化到 -1 和 1 之間
G 的輸出層采用Tanh激活函數(shù)
2. 采用修正的損失函數(shù)
在原始 GAN 論文中,損失函數(shù) G 是要
, 但實(shí)際使用的時(shí)候是采用
勘究,作者給出的原因是前者會(huì)導(dǎo)致梯度消失問(wèn)題矮湘。
但實(shí)際上,即便是作者提出的這種實(shí)際應(yīng)用的損失函數(shù)也是存在問(wèn)題口糕,即模式奔潰的問(wèn)題缅阳,在接下來(lái)提出的 GAN 相關(guān)的論文中,就有不少論文是針對(duì)這個(gè)問(wèn)題進(jìn)行改進(jìn)的景描,如 WGAN 模型就提出一種新的損失函數(shù)十办。
3. 從球體上采樣噪聲
不要采用均勻分布來(lái)采樣
從高斯分布中采樣得到隨機(jī)噪聲
當(dāng)進(jìn)行插值操作的時(shí)候,從大圓進(jìn)行該操作超棺,而不要直接從點(diǎn) A 到 點(diǎn) B 直線操作向族,如下圖所示
image
更多細(xì)節(jié)可以參考 Tom White's 的論文Sampling Generative Networks以及代碼https://github.com/dribnet/plat
4. BatchNorm
采用 mini-batch BatchNorm,要保證每個(gè) mini-batch 都是同樣的真實(shí)圖片或者是生成圖片
不采用 BatchNorm 的時(shí)候棠绘,可以采用 instance normalization(對(duì)每個(gè)樣本的規(guī)范化操作)
可以使用虛擬批量歸一化(virtural batch normalization):開(kāi)始訓(xùn)練之前預(yù)定義一個(gè) batch R件相,對(duì)每一個(gè)新的 batch X,都使用 R+X 的級(jí)聯(lián)來(lái)計(jì)算歸一化參數(shù)
5. 避免稀疏的梯度:Relus氧苍、MaxPool
稀疏梯度會(huì)影響 GAN 的穩(wěn)定性
在 G 和 D 中采用 LeakyReLU 代替 Relu 激活函數(shù)
對(duì)于下采樣操作夜矗,可以采用平均池化(Average Pooling) 和 Conv2d+stride 的替代方案
對(duì)于上采樣操作,可以使用 PixelShuffle(https://arxiv.org/abs/1609.05158), ConvTranspose2d + stride
6. 標(biāo)簽的使用
標(biāo)簽平滑让虐。也就是如果有兩個(gè)目標(biāo)標(biāo)簽紊撕,假設(shè)真實(shí)圖片標(biāo)簽是 1,生成圖片標(biāo)簽是 0赡突,那么對(duì)每個(gè)輸入例子对扶,如果是真實(shí)圖片,采用 0.7 到 1.2 之間的一個(gè)隨機(jī)數(shù)字來(lái)作為標(biāo)簽惭缰,而不是 1浪南;一般是采用單邊標(biāo)簽平滑
在訓(xùn)練 D 的時(shí)候,偶爾翻轉(zhuǎn)標(biāo)簽
有標(biāo)簽數(shù)據(jù)就盡量使用標(biāo)簽
7. 使用 Adam 優(yōu)化器
8. 盡早追蹤失敗的原因
D 的 loss 變成 0从媚,那么這就是訓(xùn)練失敗了
檢查規(guī)范的梯度:如果超過(guò) 100逞泄,那出問(wèn)題了
如果訓(xùn)練正常,那么 D loss 有低方差并且隨著時(shí)間降低
如果 g loss 穩(wěn)定下降拜效,那么它是用糟糕的生成樣本欺騙了 D
9. 不要通過(guò)統(tǒng)計(jì)學(xué)來(lái)平衡 loss
10. 給輸入添加噪聲
給 D 的輸入添加人為的噪聲
http://www.inference.vc/instance-noise-a-trick-for-stabilising-gan-training/
https://openreview.net/forum?id=Hk4_qw5xe
給 G 的每層都添加高斯噪聲
11. 對(duì)于 Conditional GANs 的離散變量
使用一個(gè) Embedding 層
對(duì)輸入圖片添加一個(gè)額外的通道
保持 embedding 低維并通過(guò)上采樣操作來(lái)匹配圖像的通道大小
12 在 G 的訓(xùn)練和測(cè)試階段使用 Dropouts
以 dropout 的形式提供噪聲(50%的概率)
訓(xùn)練和測(cè)試階段,在 G 的幾層使用
https://arxiv.org/pdf/1611.07004v1.pdf
參考文章:
Goodfellow et al., “Generative Adversarial Networks”. ICLR 2014.
生成對(duì)抗網(wǎng)絡(luò)(GAN)相比傳統(tǒng)訓(xùn)練方法有什么優(yōu)勢(shì)?
What-is-the-advantage-of-generative-adversarial-networks-compared-with-other-generative-models
Tips and tricks to make GANs work
作者:材才才
鏈接:http://www.reibang.com/p/9835612d21af
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有各谚。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)紧憾,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。