GAN总结
1.原始GAN
1.GAN的原理:
GAN的主要靈感來源于博弈論中零和博弈的思想,應(yīng)用到深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)上來說,就是通過生成網(wǎng)絡(luò)G(Generator)和判別網(wǎng)絡(luò)D(Discriminator)不斷博弈,進(jìn)而使G學(xué)習(xí)到數(shù)據(jù)的分布,如果用到圖片生成上,則訓(xùn)練完成后,G可以從一段隨機(jī)數(shù)中生成逼真的圖像。G, D的主要功能是:
●? G是一個(gè)生成式的網(wǎng)絡(luò),它接收一個(gè)隨機(jī)的噪聲z(隨機(jī)數(shù)),通過這個(gè)噪聲生成圖像?
●? D是一個(gè)判別網(wǎng)絡(luò),判別一張圖片是不是“真實(shí)的”。它的輸入?yún)?shù)是x,x代表一張圖片,輸出D(x)代表x為真實(shí)圖片的概率,如果為1,就代表100%是真實(shí)的圖片,而輸出為0,就代表不可能是真實(shí)的圖片
訓(xùn)練過程中,生成網(wǎng)絡(luò)G的目標(biāo)就是盡量生成真實(shí)的圖片去欺騙判別網(wǎng)絡(luò)D。而D的目標(biāo)就是盡量辨別出G生成的假圖像和真實(shí)的圖像。這樣,G和D構(gòu)成了一個(gè)動(dòng)態(tài)的“博弈過程”,最終的平衡點(diǎn)即納什均衡點(diǎn).
2. GAN的特點(diǎn):
●? 相比較傳統(tǒng)的模型,他存在兩個(gè)不同的網(wǎng)絡(luò),而不是單一的網(wǎng)絡(luò),并且訓(xùn)練方式采用的是對(duì)抗訓(xùn)練方式
●? GAN中G的梯度更新信息來自判別器D,而不是來自數(shù)據(jù)樣本
3.?GAN 的優(yōu)點(diǎn):
(以下部分摘自ian?goodfellow 在Quora的問答)
●? GAN是一種生成式模型,相比較其他生成模型(玻爾茲曼機(jī)和GSNs)只用到了反向傳播,而不需要復(fù)雜的馬爾科夫鏈
●? 相比其他所有模型, GAN可以產(chǎn)生更加清晰,真實(shí)的樣本
●? GAN采用的是一種無監(jiān)督的學(xué)習(xí)方式訓(xùn)練,可以被廣泛用在無監(jiān)督學(xué)習(xí)和半監(jiān)督學(xué)習(xí)領(lǐng)域
●? 相比于變分自編碼器, GANs沒有引入任何決定性偏置( deterministic bias),變分方法引入決定性偏置,因?yàn)樗麄儍?yōu)化對(duì)數(shù)似然的下界,而不是似然度本身,這看起來導(dǎo)致了VAEs生成的實(shí)例比GANs更模糊
●? 相比VAE, GANs沒有變分下界,如果鑒別器訓(xùn)練良好,那么生成器可以完美的學(xué)習(xí)到訓(xùn)練樣本的分布.換句話說,GANs是漸進(jìn)一致的,但是VAE是有偏差的
●? GAN應(yīng)用到一些場(chǎng)景上,比如圖片風(fēng)格遷移,超分辨率,圖像補(bǔ)全,去噪,避免了損失函數(shù)設(shè)計(jì)的困難,不管三七二十一,只要有一個(gè)的基準(zhǔn),直接上判別器,剩下的就交給對(duì)抗訓(xùn)練了。
4.?GAN的缺點(diǎn):
●? 訓(xùn)練GAN需要達(dá)到納什均衡,有時(shí)候可以用梯度下降法做到,有時(shí)候做不到.我們還沒有找到很好的達(dá)到納什均衡的方法,所以訓(xùn)練GAN相比VAE或者PixelRNN是不穩(wěn)定的,但我認(rèn)為在實(shí)踐中它還是比訓(xùn)練玻爾茲曼機(jī)穩(wěn)定的多
●? GAN不適合處理離散形式的數(shù)據(jù),比如文本
●? GAN存在訓(xùn)練不穩(wěn)定、梯度消失、模式崩潰的問題(目前已解決)
模式崩潰(model collapse)原因
一般出現(xiàn)在GAN訓(xùn)練不穩(wěn)定的時(shí)候,具體表現(xiàn)為生成出來的結(jié)果非常差,但是即使加長(zhǎng)訓(xùn)練時(shí)間后也無法得到很好的改善。
具體原因可以解釋如下:GAN采用的是對(duì)抗訓(xùn)練的方式,G的梯度更新來自D,所以G生成的好不好,得看D怎么說。具體就是G生成一個(gè)樣本,交給D去評(píng)判,D會(huì)輸出生成的假樣本是真樣本的概率(0-1),相當(dāng)于告訴G生成的樣本有多大的真實(shí)性,G就會(huì)根據(jù)這個(gè)反饋不斷改善自己,提高D輸出的概率值。但是如果某一次G生成的樣本可能并不是很真實(shí),但是D給出了正確的評(píng)價(jià),或者是G生成的結(jié)果中一些特征得到了D的認(rèn)可,這時(shí)候G就會(huì)認(rèn)為我輸出的正確的,那么接下來我就這樣輸出肯定D還會(huì)給出比較高的評(píng)價(jià),實(shí)際上G生成的并不怎么樣,但是他們兩個(gè)就這樣自我欺騙下去了,導(dǎo)致最終生成結(jié)果缺失一些信息,特征不全。
關(guān)于梯度消失的問題可以參考鄭華濱的令人拍案叫絕的wassertein?GAN,里面給出了詳細(xì)的解釋,不過多重復(fù)。
局部極小值點(diǎn)
原始GAN中判別器要最小化如下?lián)p失函數(shù),盡可能把真實(shí)樣本分為正例,生成樣本分為負(fù)例:
?(公式1 )
其中是真實(shí)樣本分布,是由生成器產(chǎn)生的樣本分布。對(duì)于生成器,Goodfellow一開始提出來一個(gè)損失函數(shù),后來又提出了一個(gè)改進(jìn)的損失函數(shù),分別是
?(公式2)
?(公式3)
為什么GAN不適合處理文本數(shù)據(jù)
1.?文本數(shù)據(jù)相比較圖片數(shù)據(jù)來說是離散的,因?yàn)閷?duì)于文本來說,通常需要將一個(gè)詞映射為一個(gè)高維的向量,最終預(yù)測(cè)的輸出是一個(gè)one-hot向量,假設(shè)softmax的輸出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么變?yōu)閛nehot是(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ì)于生成器來說,G輸出了不同的結(jié)果但是D給出了同樣的判別結(jié)果,并不能將梯度更新信息很好的傳遞到G中去,所以D最終輸出的判別沒有意義。
2.?另外就是GAN的損失函數(shù)是JS散度,JS散度不適合衡量不想交分布之間的距離。
(WGAN雖然使用wassertein距離代替了JS散度,但是在生成文本上能力還是有限,GAN在生成文本上的應(yīng)用有seq-GAN,和強(qiáng)化學(xué)習(xí)結(jié)合的產(chǎn)物)
訓(xùn)練GAN的一些技巧
1.?輸入規(guī)范化到(-1,1)之間,最后一層的激活函數(shù)使用tanh(BEGAN除外)
2.?使用wassertein GAN的損失函數(shù),
3.?如果有標(biāo)簽數(shù)據(jù)的話,盡量使用標(biāo)簽,也有人提出使用反轉(zhuǎn)標(biāo)簽效果很好,另外使用標(biāo)簽平滑,單邊標(biāo)簽平滑或者雙邊標(biāo)簽平滑
4.?使用mini-batch norm, 如果不用batch?norm?可以使用instance?norm?或者weight?norm
5.?避免使用RELU和pooling層,減少稀疏梯度的可能性,可以使用leakrelu激活函數(shù)
6.?優(yōu)化器盡量選擇ADAM,學(xué)習(xí)率不要設(shè)置太大,初始1e-4可以參考,另外可以隨著訓(xùn)練進(jìn)行不斷縮小學(xué)習(xí)率,
7.?給D的網(wǎng)絡(luò)層增加高斯噪聲,相當(dāng)于是一種正則
2.DCGAN
【Paper】 :
????????????http://arxiv.org/abs/1511.06434
【github】 :
????????????https://github.com/Newmu/dcgan_code??theano
????????? ??https://github.com/carpedm20/DCGAN-tensorflow??tensorflow
????????? ??https://github.com/jacobgil/keras-dcgan????keras
????????????https://github.com/soumith/dcgan.torch??torch
DCGAN是繼GAN之后比較好的改進(jìn),其主要的改進(jìn)主要是在網(wǎng)絡(luò)結(jié)構(gòu)上,到目前為止,DCGAN的網(wǎng)絡(luò)結(jié)構(gòu)還是被廣泛的使用,DCGAN極大的提升了GAN訓(xùn)練的穩(wěn)定性以及生成結(jié)果質(zhì)量。
論文的主要貢獻(xiàn)是:
◆??為GAN的訓(xùn)練提供了一個(gè)很好的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
◆??表明生成的特征具有向量的計(jì)算特性。
DCGAN的生成器網(wǎng)絡(luò)結(jié)構(gòu)如上圖所示,相較原始的GAN,DCGAN幾乎完全使用了卷積層代替全鏈接層,判別器幾乎是和生成器對(duì)稱的,從上圖中我們可以看到,整個(gè)網(wǎng)絡(luò)沒有pooling層和上采樣層的存在,實(shí)際上是使用了帶步長(zhǎng)(fractional-strided)的卷積代替了上采樣,以增加訓(xùn)練的穩(wěn)定性。
DCGAN能改進(jìn)GAN訓(xùn)練穩(wěn)定的原因主要有:
◆??使用步長(zhǎng)卷積代替上采樣層,卷積在提取圖像特征上具有很好的作用,并且使用卷積代替全連接層。
◆??生成器G和判別器D中幾乎每一層都使用batchnorm層,將特征層的輸出歸一化到一起,加速了訓(xùn)練,提升了訓(xùn)練的穩(wěn)定性。(生成器的最后一層和判別器的第一層不加batchnorm)
◆??在判別器中使用leakrelu激活函數(shù),而不是RELU,防止梯度稀疏,生成器中仍然采用relu,但是輸出層采用tanh
◆? 使用adam優(yōu)化器訓(xùn)練,并且學(xué)習(xí)率最好是0.0002,(我也試過其他學(xué)習(xí)率,不得不說0.0002是表現(xiàn)最好的了)
?主要改進(jìn)總結(jié):
1.將pooling層用convolutions替代。(對(duì)于判別模型,允許網(wǎng)絡(luò)學(xué)習(xí)自己的空間下采樣;対于生成模型,允許它學(xué)習(xí)自己的空間上采樣)
2.在generator和discriminator上都使用batchnorm:
解決初始化差的問題
幫助梯度傳播到每一層
防止generator把所有的樣本都收斂到同一個(gè)點(diǎn)
3.在CNN中移除全連接層
4.在generator的除了輸出層外的所有層使用ReLU,輸出層采用tanh
5.在discriminator的所有層上使用LeakyReLU.
問題:
DCGAN雖然有很好的架構(gòu),但是對(duì)GAN訓(xùn)練穩(wěn)定性來說是治標(biāo)不治本,沒有從根本上解決問題,而且訓(xùn)練的時(shí)候仍需要小心的平衡G,D的訓(xùn)練進(jìn)程,往往是訓(xùn)練一個(gè)多次,訓(xùn)練另一個(gè)一次。
3.WGAN
【paper】:?
????????????https://arxiv.org/abs/1701.07875
【GitHub】:
????????????https://github.com/hwalsuklee/tensorflow-generative-model-collections
? ? ? ? ? ? ? https://github.com/Zardinality/WGAN-tensorflow
與DCGAN不同,WGAN主要從損失函數(shù)的角度對(duì)GAN做了改進(jìn),損失函數(shù)改進(jìn)之后的WGAN即使在全鏈接層上也能得到很好的表現(xiàn)結(jié)果,WGAN對(duì)GAN的改進(jìn)主要有:
◆? 判別器最后一層去掉sigmoid
◆? 生成器和判別器的loss不取log
◆? 對(duì)更新后的權(quán)重強(qiáng)制截?cái)嗟揭欢ǚ秶鷥?nèi),比如[-0.01,0.01],以滿足論文中提到的lipschitz連續(xù)性條件。
◆? 論文中也推薦使用SGD, RMSprop等優(yōu)化器,不要基于使用動(dòng)量的優(yōu)化算法,比如adam,但是就我目前來說,訓(xùn)練GAN時(shí),我還是adam用的多一些。
?
從上面看來,WGAN好像在代碼上很好實(shí)現(xiàn),基本上在原始GAN的代碼上不用更改什么,但是它的作用是巨大的
◆? WGAN理論上給出了GAN訓(xùn)練不穩(wěn)定的原因,即交叉熵(JS散度)不適合衡量具有不相交部分的分布之間的距離,轉(zhuǎn)而使用wassertein距離去衡量生成數(shù)據(jù)分布和真實(shí)數(shù)據(jù)分布之間的距離,理論上解決了訓(xùn)練不穩(wěn)定的問題。
◆? 解決了模式崩潰的(collapse mode)問題,生成結(jié)果多樣性更豐富。
◆? 對(duì)GAN的訓(xùn)練提供了一個(gè)指標(biāo),此指標(biāo)數(shù)值越小,表示GAN訓(xùn)練的越差,反之越好。可以說之前訓(xùn)練GAN完全就和買彩票一樣,訓(xùn)練好了算你中獎(jiǎng),沒中獎(jiǎng)也不要?dú)怵H,多買幾注吧。
有關(guān)GAN和WGAN的解釋,可以參考鏈接:https://zhuanlan.zhihu.com/p/25071913
總的來說,GAN中交叉熵(JS散度)不適合衡量生成數(shù)據(jù)分布和真實(shí)數(shù)據(jù)分布的距離,如果通過優(yōu)化JS散度訓(xùn)練GAN會(huì)導(dǎo)致找不到正確的優(yōu)化目標(biāo),所以,WGAN提出使用wassertein距離作為優(yōu)化方式訓(xùn)練GAN,但是數(shù)學(xué)上和真正代碼實(shí)現(xiàn)上還是有區(qū)別的,使用Wasserteion距離需要滿足很強(qiáng)的連續(xù)性條件—lipschitz連續(xù)性,為了滿足這個(gè)條件,作者使用了將權(quán)重限制到一個(gè)范圍的方式強(qiáng)制滿足lipschitz連續(xù)性,但是這也造成了隱患,接下來會(huì)詳細(xì)說。另外說實(shí)話,雖然理論證明很漂亮,但是實(shí)際上訓(xùn)練起來,以及生成結(jié)果并沒有期待的那么好。
注:Lipschitz限制是在樣本空間中,要求判別器函數(shù)D(x)梯度值不大于一個(gè)有限的常數(shù)K,通過權(quán)重值限制的方式保證了權(quán)重參數(shù)的有界性,間接限制了其梯度信息。
4.WGAN-GP (improved wgan)
【paper】:
????????????https://arxiv.org/abs/1704.00028
【GitHub】:
????????https://link.zhihu.com/?target=https%3A//github.com/igul222/improved_wgan_training
????????https://github.com/caogang/wgan-gp
WGAN-GP是WGAN之后的改進(jìn)版,主要還是改進(jìn)了連續(xù)性限制的條件,因?yàn)?#xff0c;作者也發(fā)現(xiàn)將權(quán)重剪切到一定范圍之后,比如剪切到[-0.01,+0.01]后,發(fā)生了這樣的情況,如下圖左邊表示。
發(fā)現(xiàn)大多數(shù)的權(quán)重都在-0.01?和0.01上,這就意味了網(wǎng)絡(luò)的大部分權(quán)重只有兩個(gè)可能數(shù),對(duì)于深度神經(jīng)網(wǎng)絡(luò)來說不能充分發(fā)揮深度神經(jīng)網(wǎng)絡(luò)的擬合能力,簡(jiǎn)直是極大的浪費(fèi)。并且,也發(fā)現(xiàn)強(qiáng)制剪切權(quán)重容易導(dǎo)致梯度消失或者梯度爆炸,梯度消失很好理解,就是權(quán)重得不到更新信息,梯度爆炸就是更新過猛了,權(quán)重每次更新都變化很大,很容易導(dǎo)致訓(xùn)練不穩(wěn)定。梯度消失與梯度爆炸原因均在于剪切范圍的選擇,選擇過小的話會(huì)導(dǎo)致梯度消失,如果設(shè)得稍微大了一點(diǎn),每經(jīng)過一層網(wǎng)絡(luò),梯度變大一點(diǎn)點(diǎn),多層之后就會(huì)發(fā)生梯度爆炸 。為了解決這個(gè)問題,并且找一個(gè)合適的方式滿足lipschitz連續(xù)性條件,作者提出了使用梯度懲罰(gradient penalty)的方式以滿足此連續(xù)性條件,其結(jié)果如上圖右邊所示。
?梯度懲罰就是既然Lipschitz限制是要求判別器的梯度不超過K,那么可以通過建立一個(gè)損失函數(shù)來滿足這個(gè)要求,即先求出判別器的梯度d(D(x)),然后建立與K之間的二范數(shù)就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的損失函數(shù)設(shè)計(jì)。但是注意到D的梯度的數(shù)值空間是整個(gè)樣本空間,對(duì)于圖片(既包含了真實(shí)數(shù)據(jù)集也包含了生成出的圖片集)這樣的數(shù)據(jù)集來說,維度及其高,顯然是及其不適合的計(jì)算的。作者提出沒必要對(duì)整個(gè)數(shù)據(jù)集(真的和生成的)做采樣,只要從每一批次的樣本中采樣就可以了,比如可以產(chǎn)生一個(gè)隨機(jī)數(shù),在生成數(shù)據(jù)和真實(shí)數(shù)據(jù)上做一個(gè)插值
????????????????于是就算解決了在整個(gè)樣本空間上采樣的麻煩。
所以WGAN-GP的貢獻(xiàn)是:
◆? 提出了一種新的lipschitz連續(xù)性限制手法—梯度懲罰,解決了訓(xùn)練梯度消失梯度爆炸的問題。
◆? 比標(biāo)準(zhǔn)WGAN擁有更快的收斂速度,并能生成更高質(zhì)量的樣本
◆? 提供穩(wěn)定的GAN訓(xùn)練方式,幾乎不需要怎么調(diào)參,成功訓(xùn)練多種針對(duì)圖片生成和語言模型的GAN架構(gòu)
但是論文提出,由于是對(duì)每個(gè)batch中的每一個(gè)樣本都做了梯度懲罰(隨機(jī)數(shù)的維度是(batchsize,1)),因此判別器中不能使用batch norm,但是可以使用其他的normalization方法,比如Layer Normalization、Weight Normalization和Instance Normalization,論文中使用了Layer Normalization,weight?normalization效果也是可以的。為了比較,還是給出了下面這張圖,可以發(fā)現(xiàn)WGAN-GP完爆其他GAN:
5.LSGAN
最小二乘GAN
全稱是Least Squares Generative Adversarial Networks
【paper】
????????????https://arxiv.org/abs/1611.04076
【github】
????????????https://github.com/hwalsuklee/tensorflow-generative-model-collections
????????????https://github.com/guojunq/lsgan
LSGAN原理:
其實(shí)原理部分可以一句話概括,即使用了最小二乘損失函數(shù)代替了GAN的損失函數(shù)。
但是就這樣的改變,緩解了GAN訓(xùn)練不穩(wěn)定和生成圖像質(zhì)量差多樣性不足的問題。
事實(shí)上,作者認(rèn)為使用JS散度并不能拉近真實(shí)分布和生成分布之間的距離,使用最小二乘可以將圖像的分布盡可能的接近決策邊界,其損失函數(shù)定義如下:
其中作者設(shè)置a=c=1,b=0
論文里還是給了一些數(shù)學(xué)推導(dǎo)與證明,感興趣的可以去看看
生成結(jié)果展示:
6.BEGAN:
BEGAN全稱是Boundary Equilibrium GANs
【paper】:
????????????https://arxiv.org/abs/1703.10717
【GitHub】:
????????????https://github.com/carpedm20/BEGAN-tensorflow
????????????https://github.com/Heumi/BEGAN-tensorflow
????????????https://github.com/carpedm20/BEGAN-pytorch
BEGAN的主要貢獻(xiàn):
◆? 提出了一種新的簡(jiǎn)單強(qiáng)大GAN,使用標(biāo)準(zhǔn)的訓(xùn)練方式,不加訓(xùn)練trick也能很快且穩(wěn)定的收斂
◆? 對(duì)于GAN中G,D的能力的平衡提出了一種均衡的概念(GAN的理論基礎(chǔ)就是goodfellow理論上證明了GAN均衡點(diǎn)的存在,但是一直沒有一個(gè)準(zhǔn)確的衡量指標(biāo)說明GAN的均衡程度)
◆? 提出了一種收斂程度的估計(jì),這個(gè)機(jī)制只在WGAN中出現(xiàn)過。作者在論文中也提到,他們的靈感來自于WGAN,在此之前只有wgan做到了
◆??提供了一個(gè)超參數(shù),這個(gè)超參數(shù)可以在圖像的多樣性和生成質(zhì)量之間做均衡(熟悉GAN的小伙伴就知道這又多難得)?
先說說BEGAN的主要原理,BEGAN和其他GAN不一樣,這里的D使用的是auto-encoder結(jié)構(gòu),就是下面這種,D的輸入是圖片,輸出是經(jīng)過編碼解碼后的圖片,
為了估計(jì)分布的誤差,作者使用了auto-encoder作為D,D的輸入是圖像V,維度為RNx,輸出的也是維度為RNx的圖片,本文中n=1,自編碼器的模型如下?
,
之前的GAN以及其變種都是希望生成器生成的數(shù)據(jù)分布盡可能的接近真實(shí)數(shù)據(jù)的分布,當(dāng)生成數(shù)據(jù)分布等同于真實(shí)數(shù)據(jù)分布時(shí),我們就確定生成器G經(jīng)過訓(xùn)練可以生成和真實(shí)數(shù)據(jù)分布相同的樣本,即獲得了生成足以以假亂真數(shù)據(jù)的能力,所以從這一點(diǎn)出發(fā),研究者們?cè)O(shè)計(jì)了各種損失函數(shù)去令G的生成數(shù)據(jù)分布盡可能接近真實(shí)數(shù)據(jù)分布。BEGAN代替了這種估計(jì)概率分布方法,它不直接去估計(jì)生成分布Pg與真實(shí)分布Px的差距,進(jìn)而設(shè)計(jì)合理的損失函數(shù)拉近他們之間的距離,而是估計(jì)分布的誤差之間的距離,作者認(rèn)為只要分布的的誤差分布相近的話,也可以認(rèn)為這些分布是相近的。即如果我們認(rèn)為兩個(gè)人非常相似,又發(fā)現(xiàn)這兩人中的第二個(gè)人和第三個(gè)人很相似,那么我們就完全可以說第一個(gè)人和第三個(gè)人長(zhǎng)的很像。
在BEGAN中,第一個(gè)人相當(dāng)于訓(xùn)練的數(shù)據(jù)x,第二個(gè)人相當(dāng)于D對(duì)x編碼解碼后的圖像D(x),第三個(gè)人相當(dāng)于D以G的生成為輸入的結(jié)果D(g(z)),所以,如果||D(x)-x||?-?|| D(x)- D(g(z))?||?不斷趨近于0,那么隨著訓(xùn)練,D(x)會(huì)不斷接近x,那么D(g(z))?接近于D(x),豈不是就意味著 g(z) 的數(shù)據(jù)分布和x分布幾乎一樣了,那么就說明G學(xué)到了生成數(shù)據(jù)的能力。于是乎,假設(shè)圖片足夠大,像素很多。但是問題來了,如果||D(x)-x||?-?|| D(x)- D(g(z))?||剛好等于0,這時(shí)候,D(x)和x可能還差的很遠(yuǎn)呢,那不就什么也學(xué)不到了D(x)-x是一個(gè)圖片,假設(shè)圖片上的每一個(gè)像素都滿足獨(dú)立同分布條件,根據(jù)中心極限定理,像素的誤差近似滿足正太分布,假設(shè)期望是m1,方差是μ1,同理D(x)- D(g(z)),還有m2,?μ2這時(shí)候如果我們?cè)儆脀assertein距離衡量m1與m2的距離,
trace是求跡操作。
再滿足下面這個(gè)條件下,
即他們成正比,這時(shí)候連lipschitz連續(xù)性條件也不需要了,
令D不斷的最大化m2,最小化m1,而G則不斷最小化m2,當(dāng)m2 接近m1的時(shí)候我們就認(rèn)為GAN完成了訓(xùn)練。?
分析到這里我們得出結(jié)論,我們可以去估計(jì)誤差的分布而不是直接估計(jì)分布去擬合GAN,但是損失函數(shù)究竟是怎么樣的呢?
有一個(gè)問題,當(dāng)m1和m2很接近是,條件1是趨于無窮的,不可能再忽略,于是,boundary(限制)就來了,
設(shè)置一個(gè)位于[0~1]之間的數(shù)λ,強(qiáng)制將m1和m2劃分開界限,具體的損失函數(shù)如下:
BEGAN的訓(xùn)練結(jié)果:不同的γ可以在圖片的質(zhì)量和生成多樣性之間做選擇。
7.SRGAN
SRGAN (Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, arxiv, 21 Nov, 2016)將生成式對(duì)抗網(wǎng)絡(luò)(GAN)用于SR問題。其出發(fā)點(diǎn)是傳統(tǒng)的方法一般處理的是較小的放大倍數(shù),當(dāng)圖像的放大倍數(shù)在4以上時(shí),很容易使得到的結(jié)果顯得過于平滑,而缺少一些細(xì)節(jié)上的真實(shí)感。因此SRGAN使用GAN來生成圖像中的細(xì)節(jié)。
傳統(tǒng)的方法使用的代價(jià)函數(shù)一般是最小均方差(MSE),即
該代價(jià)函數(shù)使重建結(jié)果有較高的信噪比,但是缺少了高頻信息,出現(xiàn)過度平滑的紋理。SRGAN認(rèn)為,應(yīng)當(dāng)使重建的高分辨率圖像與真實(shí)的高分辨率圖像無論是低層次的像素值上,還是高層次的抽象特征上,和整體概念和風(fēng)格上,都應(yīng)當(dāng)接近。整體概念和風(fēng)格如何來評(píng)估呢?可以使用一個(gè)判別器,判斷一副高分辨率圖像是由算法生成的還是真實(shí)的。如果一個(gè)判別器無法區(qū)分出來,那么由算法生成的圖像就達(dá)到了以假亂真的效果。
因此,該文章將代價(jià)函數(shù)改進(jìn)為
第一部分是基于內(nèi)容的代價(jià)函數(shù),第二部分是基于對(duì)抗學(xué)習(xí)的代價(jià)函數(shù)。基于內(nèi)容的代價(jià)函數(shù)除了上述像素空間的最小均方差以外,又包含了一個(gè)基于特征空間的最小均方差,該特征是利用VGG網(wǎng)絡(luò)提取的圖像高層次特征: 對(duì)抗學(xué)習(xí)的代價(jià)函數(shù)是基于判別器輸出的概率: 其中 是一個(gè)圖像屬于真實(shí)的高分辨率圖像的概率。 是重建的高分辨率圖像。SRGAN使用的生成式網(wǎng)絡(luò)和判別式網(wǎng)絡(luò)分別如下: 該方法的實(shí)驗(yàn)結(jié)果如下 從定量評(píng)價(jià)結(jié)果上來看,PSNR和SSIM這兩個(gè)指標(biāo)評(píng)價(jià)的是重建結(jié)果和金標(biāo)準(zhǔn)在像素值空間的差異。SRGAN得到的評(píng)價(jià)值不是最高。但是對(duì)于MOS(mean opinion score)的評(píng)價(jià)顯示,SRGAN生成的高分辨率圖像看起來更真實(shí)。這里直介紹了一些對(duì)GAN在訓(xùn)練和生成上改進(jìn)的工作,具體還有很多很多很多很多沒有介紹到,這里只是挑選了一些典型的,用的比較多的來介紹一下。感興趣的可以去看看https://github.com/hindupuravinash/the-gan-zoo
GAN動(dòng)物園,上百個(gè)GAN等著被翻牌。
Google研究原文請(qǐng)見:https://arxiv.org/abs/1711.10337
在此項(xiàng)研究中,Google此項(xiàng)研究中使用了minimax損失函數(shù)和用non-saturating損失函數(shù)的GAN,分別簡(jiǎn)稱為MM GAN和NS GAN,對(duì)比了WGAN、WGAN GP、LS GAN、DRAGAN、BEGAN,除了DRAGAN上文都做了介紹,另外還對(duì)比的有VAE(變分自編碼器)。
?
結(jié)語:
雖然得出的結(jié)論是沒有明顯的證據(jù)說明其他GAN比原始GAN好,但是,有本事你用原始GAN生成一個(gè)2K的高清圖給我看看,此時(shí)BEGAN和PG-GAN相視一笑,默默不說話。大部分情況來說,還是wgan-gp用的更多一些。生成高清圖像BEGAN最簡(jiǎn)單合適。
?
參考文獻(xiàn):
1.https://zhuanlan.zhihu.com/p/27159510?utm_source=wechat_session&utm_medium=social
2. https://www.zhihu.com/question/56171002/answer/148593584
3. http://www.inference.vc/instance-noise-a-trick-for-stabilising-gan-training/
4. https://github.com/soumith/ganhacks
5. https://github.com/hindupuravinash/the-gan-zoo
6. https://zhuanlan.zhihu.com/p/25071913
7. https://zhuanlan.zhihu.com/p/25071913
8.https://zhuanlan.zhihu.com/p/25532538?utm_medium=social&utm_source=weibo
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!總結(jié)
- 上一篇: MOSS 2007 / WSS 3.0
- 下一篇: 火热的数据中台对企业的价值是什么?