GAN論文逐段精讀【論文精讀】

GAN
generative advertisarial Nets
1、標(biāo)題 + 作者
機(jī)器學(xué)習(xí)中有兩大類(lèi)
- 分辨模型:判斷數(shù)據(jù)的類(lèi)別或者預(yù)測(cè)實(shí)數(shù)值
- 生成模型(generative):生成數(shù)據(jù)
adversarial:對(duì)抗
Nets:networks
一作 Ian J.Goodfellow ,也是《深度學(xué)習(xí)》(花書(shū))的作者
2、摘要
寫(xiě)法簡(jiǎn)潔,重點(diǎn)在于講清楚GAN
文章提出了一個(gè)新的framework(framework通常是一個(gè)比較大的模型)用來(lái)估計(jì)生成模型,通過(guò)對(duì)抗的過(guò)程,同時(shí)會(huì)訓(xùn)練兩個(gè)模型
- 生成模型G:用來(lái)抓取整個(gè)數(shù)據(jù)的分布(生成模型就是要對(duì)整個(gè)數(shù)據(jù)的分布進(jìn)行建模,使得能夠生成各種分布,這里的分布就是指的生成圖片、文字或者電影等,在統(tǒng)計(jì)學(xué)中,整個(gè)世界是通過(guò)采樣不同的分布來(lái)得到的,所以如果想要生成東西,就應(yīng)該抓取整個(gè)數(shù)據(jù)的分布)
- 辨別模型D:用來(lái)估計(jì)樣本到底是從真正的數(shù)據(jù)生成出來(lái)的還是來(lái)自生成模型生成出來(lái)的,
生成模型盡量想讓辨別模型犯錯(cuò)(生成模型一般是盡量使數(shù)據(jù)分布接近,但是這個(gè)地方有所不同,它是想讓辨別模型犯錯(cuò))
這個(gè)framework對(duì)應(yīng)的是minmax two-player game(博弈論中一個(gè)很有名的兩人對(duì)抗游戲)
在任何函數(shù)空間的 G 和 D 中存在一個(gè)獨(dú)一無(wú)二的解( G 能夠?qū)?shù)據(jù)的真實(shí)分布找出來(lái),如果已經(jīng)把真實(shí)數(shù)據(jù)發(fā)掘出來(lái)的,辨別模型 D 就做不了什么事情了),如果 G 和 D 是MLP的話(huà),那么整個(gè)系統(tǒng)就可以通過(guò)誤差的反向傳播來(lái)進(jìn)行訓(xùn)練
不需要使用任何馬爾科夫鏈或著說(shuō)對(duì)一個(gè)近似的推理過(guò)程展開(kāi),相比其他方法更加簡(jiǎn)單,而且實(shí)驗(yàn)效果非常好
3、導(dǎo)言
深度學(xué)習(xí)是用來(lái)發(fā)現(xiàn)一些豐富的有層次的模型,這些模型能夠?qū)I中各種應(yīng)用的各種數(shù)據(jù)做概率分布的表示
- 深度學(xué)習(xí)不僅僅是深度神經(jīng)網(wǎng)絡(luò),更多的是對(duì)整個(gè)數(shù)據(jù)分布的特征表示,深度神經(jīng)網(wǎng)絡(luò)只是其中的一個(gè)手段
雖然深度學(xué)習(xí)在辨別模型上取得了很大進(jìn)展,但是在生成模型上做的還是比較差(難點(diǎn)在于在最大化似然函數(shù)的時(shí)候要對(duì)概率分布進(jìn)行很多近似,這個(gè)近似的計(jì)算比較困難)
深度學(xué)習(xí)在生成模型上進(jìn)展不大,是因?yàn)橐ソ聘怕史植挤植紒?lái)計(jì)算似然函數(shù),這篇文章的關(guān)鍵是不用近似似然函數(shù)而可以用別的方法來(lái)得到一個(gè)計(jì)算上更好的模型
這個(gè)框架中每一個(gè)模型都是MLP,所以取名叫GAN。這個(gè)框架中有兩類(lèi)模型
- 生成模型:類(lèi)似于造假的人,他的目的是去生產(chǎn)假幣
- 辨別模型:類(lèi)似于警察,他的任務(wù)是將假幣找出來(lái),和真幣區(qū)分開(kāi)開(kāi)來(lái)
造假者和警察會(huì)不斷地學(xué)習(xí),造假者會(huì)提升自己的造假技能,警察會(huì)提升自己判別真幣和假幣的性能,最終希望造假者能夠贏得這場(chǎng)博弈,也就是說(shuō)警察無(wú)法區(qū)分真幣和假幣,這時(shí)就能生成跟真實(shí)一樣的數(shù)據(jù)了
框架下面的生成模型是一個(gè)MLP,它的輸入是一個(gè)隨機(jī)的噪音,MLP能夠把產(chǎn)生隨機(jī)噪音的分布(通常是一個(gè)高斯分布)映射到任何想要擬合的分布中。同理,如果判別模型也是MLP的情況下,在這個(gè)框架下的特例叫做adversarial nets,因?yàn)閮蓚€(gè)模型都是基于MLP,所以在訓(xùn)練的時(shí)候可以直接通過(guò)誤差的反向傳遞而不需要像使用馬爾科夫鏈類(lèi)似的算法來(lái)對(duì)一個(gè)分布進(jìn)行復(fù)雜的采樣,從而具有計(jì)算上的優(yōu)勢(shì)
4、相關(guān)工作
視頻中所讀的版本是GAN在neurips上的最終版本,它是一個(gè)比較新的版本
在搜索的時(shí)候可能會(huì)搜索到arxiv版本,它是一個(gè)比較早期的版本,作者沒(méi)有將最新的版本上傳到arxiv上面
以上兩個(gè)版本的主要區(qū)別就是相關(guān)工作是不不一樣的
- arxiv版本上面相關(guān)工作的部分其實(shí)什么都沒(méi)寫(xiě),寫(xiě)的并不相關(guān)
- neurips的版本上寫(xiě)了很多真正相關(guān)的工作
首先闡述了其他方法所存在的問(wèn)題:之前的方法是想要構(gòu)造出一個(gè)分布函數(shù)出來(lái),然后提供一些參數(shù)讓他可以學(xué)習(xí),通過(guò)最大化這些參數(shù)的對(duì)數(shù)似然函數(shù)來(lái)做這樣的壞處是采樣一個(gè)分布的時(shí)候計(jì)算比較困難(尤其是維度比較高的時(shí)候)
因?yàn)檫@些方法計(jì)算比較困難,所以開(kāi)展了generative machines的相關(guān)工作,不再去構(gòu)造這樣一個(gè)分布出來(lái),而是去學(xué)習(xí)一個(gè)模型去近似這個(gè)分布,這兩種方法是有區(qū)別的
- 前一種方法明確知道分布是什么,包里面的均值、方差等
- 后一種方法不用去構(gòu)造分布,只需要一個(gè)模型去近似想要的結(jié)果就可以了,缺點(diǎn)是不知道最后具體的分布是什么樣的,好處是計(jì)算起來(lái)比較容易

- 上式中對(duì) f 的期望求導(dǎo)等價(jià)于對(duì) f 自身求導(dǎo),這也是為什么可以通過(guò)誤差的反向傳遞對(duì)GAN進(jìn)行求解
VAEs跟GAN非常類(lèi)似
通過(guò)一個(gè)辨別模型來(lái)幫助生成模型,比如說(shuō)NCE也用了這樣的思路,但是NCE相對(duì)來(lái)說(shuō)損失函數(shù)更加復(fù)雜一點(diǎn),在求解上沒(méi)有GAN的性能那么好
和predictability minimization算法的區(qū)別
- 其實(shí)GAN就是predictability minimization反過(guò)來(lái)
一個(gè)真實(shí)有用的技術(shù)會(huì)在不同的領(lǐng)域不斷被人重新發(fā)現(xiàn)給予新的名詞,大家通常會(huì)將功勞歸功于那個(gè)教會(huì)了大家這個(gè)技術(shù)的人,而不是最早發(fā)明他的人
adversarial examples和GAN的區(qū)別
- adversarial examples是說(shuō)通過(guò)構(gòu)造一些和真實(shí)樣本很像的假樣本,能夠糊弄到分類(lèi)器,從而測(cè)試整個(gè)算法的穩(wěn)定性
5、模型
這個(gè)框架最簡(jiǎn)單的應(yīng)用是當(dāng)生成器和辨別器都是MLP的時(shí)候,生成器需要去學(xué)一個(gè)在數(shù)據(jù)x上的pg分布,x中每個(gè)值的分布都是由pg這個(gè)分布來(lái)控制的
生成模型如何輸出x
- 首先在一個(gè)輸入分布為Pz的噪音變量 z 上定義一個(gè)先驗(yàn),z可以認(rèn)為是一個(gè)100維的向量,每一元素是均值為0,方差為1的高斯噪音
- 生成模型就是把z映射成x,生成模型是MLP,他有一個(gè)可以學(xué)習(xí)的參數(shù) θg
假設(shè)想要生成游戲的圖片
- 第一種辦法是反匯編游戲代碼,然后利用代碼就知道游戲是如何生成出來(lái)的,這就類(lèi)似于構(gòu)造分布函數(shù)的方法,在計(jì)算上比較困難
- 第二種辦法是不管游戲程序是什么,假設(shè)用一個(gè)若干維的向量就足以表達(dá)游戲背后隱藏的邏輯,再學(xué)一個(gè)映設(shè)(MLP,MLP理論上可以擬合任何一個(gè)函數(shù),所以可以通過(guò)構(gòu)造一個(gè)差不多大小的向量,然后利用MLP強(qiáng)行將z映射成x,使得他們相似就可以了),這種方法的好處是計(jì)算比較簡(jiǎn)單,壞處是MLP不在乎背后真正的分布是什么,而是只是每次生成一個(gè)東西,看起來(lái)相似就行了
辨別器D也是一個(gè)MLP,它也有自己可以學(xué)習(xí)的參數(shù) θd ,它的作用是將數(shù)據(jù)放進(jìn)來(lái)之后輸出一個(gè)標(biāo)量,這個(gè)標(biāo)量用來(lái)判斷x到底是來(lái)自真實(shí)采樣的數(shù)據(jù)還是生成出來(lái)的圖片(以游戲?yàn)槔褪沁@個(gè)圖片到底是來(lái)自游戲中的截圖,還是生成器自己生成的圖片),因?yàn)橹罃?shù)據(jù)的來(lái)源,所以會(huì)給數(shù)據(jù)一個(gè)標(biāo)號(hào)(如果來(lái)自真實(shí)的數(shù)據(jù)就是1,來(lái)自生成的數(shù)據(jù)就是0)
所以就采樣一些數(shù)據(jù)來(lái)訓(xùn)練一個(gè)兩類(lèi)的分類(lèi)器
在訓(xùn)練D的同時(shí)也會(huì)去訓(xùn)練G,G用來(lái)最小化log(1-D(G(z)))
- z 代表隨機(jī)噪音,放到G中就會(huì)生成圖片,假設(shè)辨別器正確的話(huà),辨別器的輸出應(yīng)該為0,表示是生成的數(shù)據(jù),這個(gè)式子最終為log1等于0
- 但是如果辨別器沒(méi)有做好,會(huì)輸出一個(gè)大于0的數(shù),在極端情況下輸出1,即辨別器百分之百地確信生成模型所生成的辨別器來(lái)自真實(shí)的數(shù)據(jù),即判斷錯(cuò)誤。則無(wú)論無(wú)何log(1-一個(gè)大于零小于1 的數(shù))的最終結(jié)果就會(huì)變成一個(gè)負(fù)數(shù),在極端情況下,log0是負(fù)無(wú)窮大
- 所以如果要訓(xùn)練G來(lái)最小化log(1-D(G(z)))就意味著,訓(xùn)練一個(gè)G使得辨別器盡量犯錯(cuò),無(wú)法區(qū)分出來(lái)數(shù)據(jù)到底是來(lái)自真實(shí)數(shù)據(jù)還是生成模型所生成的數(shù)據(jù)
總結(jié)

- 目標(biāo)函數(shù)如上圖中公式所示,是一個(gè)兩人的minimax游戲
- V(G,D)是一個(gè)價(jià)值函數(shù)
- 公式右邊第一項(xiàng)是期望,x是采樣真實(shí)分布
- 公式右邊第二項(xiàng)是期望,x是采樣噪音分布
- 在D是完美的情況下,公式右邊的兩項(xiàng)應(yīng)該都是等于0的
- 如果D不完美、有誤分類(lèi)的情況下,這兩項(xiàng)因?yàn)閘og的關(guān)系,都會(huì)變成一個(gè)負(fù)數(shù)值
- 所以如果想要辨別器完美地分類(lèi)這兩類(lèi)的話(huà),就應(yīng)該最大化D的值,最小化G,目標(biāo)函數(shù)中有兩個(gè)東西,一個(gè)是min,一個(gè)是max,和一般的訓(xùn)練步驟有所區(qū)別,一般只有一個(gè)min,或者只有一個(gè)max,這里既有min又有max,就是兩個(gè)模型在相互對(duì)抗:D是盡量把數(shù)據(jù)分開(kāi),G是盡量使生成數(shù)據(jù)分不開(kāi),這個(gè)在博弈論中叫兩人的minimax游戲
- 如果達(dá)到了一個(gè)均衡,就是D不能往前進(jìn)步,G也不能往前進(jìn)步了,就認(rèn)為達(dá)到了均衡,這個(gè)均衡叫做納什均衡

- 上圖中一共有四張圖,分別表示GAN在前面三步和最后一步所做的工作
- z是一個(gè)一維的標(biāo)量
- x也是一個(gè)一維的標(biāo)量
- 噪音是均勻分布采樣來(lái)的
- 所要真實(shí)擬合的x如圖中黑色圓點(diǎn)所示,是一個(gè)高斯分布
- (a)表示第一步的時(shí)候,生成器將均勻分布進(jìn)行映射,圖中綠色的線(xiàn)就是把z映射成了一個(gè)高斯分布,此時(shí)辨別器視圖中藍(lán)色的線(xiàn),表現(xiàn)一般
- (b)表示更新辨別器,盡量把這兩個(gè)東西分開(kāi),兩個(gè)高斯分布的最高點(diǎn)表示真實(shí)分布和噪聲最有可能出現(xiàn)的地方,辨別器需要在真實(shí)分布的地方值為1,在噪音分布的地方值為0,這樣就可以盡量將來(lái)自真實(shí)分布的x和來(lái)自于生成器的x盡量分別開(kāi)來(lái)
- (c)表示盡量更新生成器,使得能夠盡量糊弄到辨別器(就是將生成器生成的高斯分布的峰值盡量左移,向真實(shí)數(shù)據(jù)的高斯分布進(jìn)行靠攏),讓辨別器犯錯(cuò),這時(shí)候辨別器就需要盡量調(diào)整來(lái)把這兩個(gè)細(xì)微的區(qū)別區(qū)別開(kāi)來(lái)。
- (d)表示通過(guò)不斷地調(diào)整生成器和辨別器,直到最后生成器的模型能夠?qū)?lái)自均勻分布的隨即噪音z映射成幾乎跟真實(shí)分布差不多融合的高斯分布,即從真實(shí)的黑點(diǎn)中采樣還是從生成器的綠線(xiàn)采樣,辨別模型都是分辨不出來(lái)的(不管來(lái)自于哪個(gè)分布,辨別器對(duì)這每個(gè)值的輸出都是0.5,這就是GAN最后想要的結(jié)果:生成器生成的數(shù)據(jù)和真實(shí)數(shù)據(jù)在分布上是完全分別不出來(lái)的,辨別器最后對(duì)此無(wú)能為力)

- 上圖表示的是算法一
- 第一行是一個(gè)for循環(huán),每一次循環(huán)里面是做一次迭代,迭代的另一部分也是一個(gè)k步的for循環(huán),每一步中先采樣m個(gè)噪音樣本,再采樣m個(gè)來(lái)自真實(shí)數(shù)據(jù)的樣本,組成一個(gè)兩個(gè)m大小的小批量,將其放入價(jià)值函數(shù)中求梯度(就是將采樣的真實(shí)樣本放入辨別器,將采樣的噪音放進(jìn)生成器得到的生成樣本放進(jìn)辨別器,放進(jìn)去之后對(duì)辨別器的參數(shù)求梯度來(lái)更新辨別器),這樣子做k步,做完之后再采樣m個(gè)噪音樣本放進(jìn)第二項(xiàng)中,把它對(duì)于生成器的模型的梯度算出來(lái),然后對(duì)生成器進(jìn)行更新,這樣就完成了一次迭代
- 每次迭代中,先更新辨別器,再更新生成器
- k是一個(gè)超參數(shù),k不能取太小,也不能取太大,需要辨別器有足夠的更新但也不要更新的太好。如果沒(méi)有足夠好的更新,對(duì)新的數(shù)據(jù),生成器生成的東西已經(jīng)改變了,如果辨別器沒(méi)有做相應(yīng)的變化,那么再更新生成器來(lái)糊弄D其實(shí)意義不大;反過(guò)來(lái)講如果將D訓(xùn)練到足夠完美,log(1-D(G(z)))就會(huì)變成0,對(duì)0進(jìn)行求導(dǎo),生成模型的更新就會(huì)有困難(如果辨別器是警察,生成器是造假者,假設(shè)造假者一生產(chǎn)假幣,警察就將其一鍋端了,造假者也就不會(huì)賺到錢(qián),就沒(méi)有能力去改進(jìn)之后的工藝了;反過(guò)來(lái)講,如果警察沒(méi)有能力,造假者隨便造點(diǎn)東西,警察也看不出來(lái),也抓不到造假者,那么造假者也不會(huì)有動(dòng)力去改進(jìn)工藝,使得假鈔和真鈔真的長(zhǎng)得差不多,所以最好是兩方實(shí)力相當(dāng),最后大家能夠一起進(jìn)步)
- k就是一個(gè)超參數(shù),使得D的更新和G的更新在進(jìn)度上差不多
- 外層循環(huán)迭代N次直到完成,如何判斷是否收斂,這里有兩項(xiàng),一個(gè)是往上走(max),一個(gè)是往下走(min),有兩個(gè)模型,所以如何判斷收斂并不容易。整體來(lái)說(shuō),GAN的收斂是非常不穩(wěn)定的,所之后有很多工作對(duì)其進(jìn)行改進(jìn)
在上面的公式中,等式右邊的第二項(xiàng)存在一定的問(wèn)題:在早期的時(shí)候G比較弱,生成的數(shù)據(jù)跟真實(shí)的數(shù)據(jù)差得比較遠(yuǎn),這就很容易將D訓(xùn)練的特別好(D能夠完美地區(qū)分開(kāi)生成的數(shù)據(jù)和真實(shí)的數(shù)據(jù)),就導(dǎo)致log(1-D(G(z)))會(huì)變成0,它變成0的話(huà),對(duì)他求梯度再更新G的時(shí)候,就會(huì)發(fā)現(xiàn)求不動(dòng)了。所以在這種情況下建議在更新G的時(shí)候?qū)⒛繕?biāo)函數(shù)改成最大化log(D(G(z)))就跟第一項(xiàng)差不多了,這樣的話(huà)就算D能夠把兩個(gè)東西區(qū)分開(kāi)來(lái),但是因?yàn)槭亲畲蠡脑?huà),問(wèn)題還是不大的,但是這也會(huì)帶來(lái)另外一個(gè)問(wèn)題,如果D(G(z))等于零的話(huà),log(D(G(z)))是負(fù)無(wú)窮大,也會(huì)帶來(lái)數(shù)值上的問(wèn)題,在之后的工作中會(huì)對(duì)其進(jìn)行改進(jìn)
6、理論
當(dāng)且僅當(dāng)生成器學(xué)到的分布和真實(shí)數(shù)據(jù)的分布式相等的情況下,目標(biāo)函數(shù)有全局的最優(yōu)解
算法一確實(shí)能夠求解目標(biāo)函數(shù)
第一個(gè)結(jié)論:當(dāng)G是固定,即生成器是固定的情況下,最優(yōu)的辨別器的計(jì)算如下圖公式中所示

- * 表示最優(yōu)解
- Pdata表示將x放進(jìn)去之后,在真實(shí)產(chǎn)生數(shù)據(jù)的分布中的概率是多少
- pg表示將x放進(jìn)去之后,生成器所擬合的分布的概率是多少
- 分布是在0和1之間的數(shù)值,所以上式中的每一項(xiàng)都是大于等于0、小于等于1的,因此上式中分子、分母中所有的項(xiàng)都是非負(fù)的,所以整個(gè)式子右式的值是在0到1之間的
- 當(dāng)Pdata和pg是完全相等的情況下(即對(duì)每一個(gè)x,兩個(gè)p給出來(lái)的結(jié)果是一樣的),右式的值是1/2,即不管對(duì)什么樣的x,最優(yōu)的辨別器的輸出概率都是1/2,表示這兩個(gè)分布是完全分不開(kāi)的
- 這里可以看到D是如何訓(xùn)練出來(lái)的,從兩個(gè)分布中分別采樣出數(shù)據(jù),用之前的目標(biāo)函數(shù)訓(xùn)練一個(gè)二分類(lèi)的分類(lèi)器,這個(gè)分類(lèi)器如果說(shuō)給的值都是1/2,即什么值都分辨不出來(lái),就表示這兩個(gè)分布是重合的,否則的話(huà)就能夠分辨出來(lái),這個(gè)東西在統(tǒng)計(jì)學(xué)中非常有用,這叫做two sample test:判斷兩個(gè)數(shù)據(jù)是不是來(lái)自同一個(gè)分布在統(tǒng)計(jì)上其實(shí)有很多工具,比如說(shuō)用T分布檢測(cè)(在數(shù)據(jù)科學(xué)中經(jīng)常使用,可以完全不管分布是什么樣子的,可以無(wú)視在高維上很多統(tǒng)計(jì)工序不好用,就訓(xùn)練一個(gè)二分類(lèi)的分類(lèi)器,如果這個(gè)分類(lèi)器能夠分開(kāi)這兩個(gè)數(shù)據(jù),就表示這兩個(gè)數(shù)據(jù)是來(lái)自于不同分布,如果不能分開(kāi),就表示這個(gè)數(shù)據(jù)是來(lái)自同一分布的,這個(gè)技術(shù)在很多實(shí)用的技術(shù)中經(jīng)常會(huì)用到它,比如說(shuō)在一個(gè)訓(xùn)練集上訓(xùn)練一個(gè)模型然后把它部署到另外一個(gè)環(huán)境,然后看新的測(cè)試數(shù)據(jù)跟訓(xùn)練數(shù)據(jù)是不是一樣的時(shí)候,就可以訓(xùn)練一個(gè)分類(lèi)器把它分一下就行了,這樣就可以避免訓(xùn)練一個(gè)模型部署到一個(gè)新的環(huán)境,然后新的環(huán)境和模型不匹配的問(wèn)題)
期望的計(jì)算如下圖所示

- 等式右邊第一項(xiàng)是在Pdata上面對(duì)函數(shù)求均值
- 等式右邊第二項(xiàng)是在Pz上面對(duì)函數(shù)求均值
- 已知x=g(z),x是由g(z)生成出來(lái)的,假設(shè)pg就是生成器對(duì)應(yīng)的數(shù)據(jù)映射,就將g(z)替代成x,替代之后,右邊第二項(xiàng)對(duì)z的概率求期望就變成了對(duì)x求期望,x的分布來(lái)自于生成器所對(duì)應(yīng)的pg。
- 一旦完成替代之后,第一項(xiàng)和第二項(xiàng)是可以合并了,合并之后,積分里面的東西抽象出來(lái)經(jīng)過(guò)替換變量就可以得到一個(gè)關(guān)于y的函數(shù),如果y是一個(gè)值的話(huà),它其實(shí)是一個(gè)凸函數(shù),取決于a、b不一樣,它的形狀不一樣。因?yàn)樗且粋€(gè)凸函數(shù),所以他會(huì)有一個(gè)最大值,因?yàn)橐笞畲笾?,所以?huì)求導(dǎo),結(jié)果是y=a/(a+b),意味著對(duì)于任何的x,最優(yōu)解的D對(duì)他的輸出等于y等于Pdata(x)/(Pdata(x) + pg(x)),就證明了之前的結(jié)論

- 將所求到的最優(yōu)解代入到上圖所示的價(jià)值函數(shù)中,最大化D,就是將D*直接代進(jìn)去然后展開(kāi),就能得到如上圖所示的結(jié)果,就能得到之前的結(jié)論,再把得到的結(jié)果寫(xiě)成一個(gè)關(guān)于G的函數(shù),因?yàn)镈已經(jīng)求得最優(yōu)解并帶入了,所以整個(gè)式子就只跟G相關(guān),所以將他記成C(G),到此對(duì)整個(gè)價(jià)值函數(shù)求解就只需要對(duì)C(G)進(jìn)行最小化就行了,因?yàn)镈的最優(yōu)解已經(jīng)算出來(lái)了
- 定理一是說(shuō)當(dāng)且僅當(dāng)生成器的分布和真實(shí)數(shù)據(jù)的分布是相等的情況下,C(G)取得全局最小值的時(shí)候
- KL散度:用來(lái)衡量?jī)蓚€(gè)分布。如下圖左側(cè)紅色公式所示,它表示的在知道p的情況下至少要多少個(gè)比特才能夠?qū)描述出來(lái)

- 上式中最終結(jié)果中的兩項(xiàng)實(shí)際上就是兩個(gè)KL散度如下圖中的公式所示

- KL散度一定是大于等于零的,KL要等于0,那么p和q要相等
- 如果C(G)要取得最小值,所以需要兩個(gè)KL散度等于零,又因?yàn)閜=q,所以Pdata=(Pdata+pg)/2,所以C(G)的最優(yōu)解就等價(jià)于Pdata=pg,這就證明了D在已經(jīng)取得了最優(yōu)解的情況下,如果想要對(duì)G取最優(yōu)解的話(huà)一定是pg=Pdata,具體來(lái)說(shuō),對(duì)于寫(xiě)成這種形式的兩個(gè)分布又叫做JS散度
- JS散度和KL散度的區(qū)別:JS散度是對(duì)稱(chēng)的,而KL不是對(duì)稱(chēng)的,不能將p和q進(jìn)行互換,但是對(duì)于JS散度,將p和q進(jìn)行互換也是可以保持不變的,所以說(shuō)它是一個(gè)對(duì)稱(chēng)的散度,而KL是一個(gè)不對(duì)稱(chēng)的散度
- 也有評(píng)論說(shuō)因?yàn)镚AN是一個(gè)對(duì)稱(chēng)的散度,所以使得它在訓(xùn)練上更加容易。但是也可以取一個(gè)更好的目標(biāo)函數(shù)使得訓(xùn)練更加艱難
- 到此就證明了目標(biāo)函數(shù)的選擇還是很不錯(cuò)的
結(jié)論二是說(shuō)算法一是能夠優(yōu)化目標(biāo)函數(shù)的
當(dāng)G和D有足夠的容量的時(shí)候而且算法一允許在中間的每一步D是可以達(dá)到它的最優(yōu)解的時(shí)候,如果對(duì)G的優(yōu)化是去迭代下圖所示的步驟(式中G已經(jīng)換成最優(yōu)解了),那么最后的pg會(huì)收斂到Pdata

- 將目標(biāo)(價(jià)值函數(shù))看成是一個(gè)關(guān)于pg(模型或者分布)的函數(shù),pg其實(shí)是一個(gè)函數(shù),那么目標(biāo)函數(shù)就是一個(gè)關(guān)于函數(shù)的函數(shù)
- 一個(gè)函數(shù)的輸入可以是標(biāo)量或者是向量
- 這里目標(biāo)函數(shù)是一個(gè)函數(shù)的函數(shù):輸入不再是一個(gè)值,而是一個(gè)值加上了計(jì)算(等于是說(shuō)在python中寫(xiě)一個(gè)函數(shù),本來(lái)是接收一個(gè)x,x是一個(gè)vector,然后現(xiàn)在需要接收一個(gè)clousure,clousure就包括了計(jì)算和數(shù)),之前是在高維的值的空間里面做迭代,現(xiàn)在需要在一個(gè)函數(shù)空間里面做梯度下降
- Ex~pg其實(shí)是關(guān)于pg的一個(gè)很簡(jiǎn)單的函數(shù),這個(gè)東西展開(kāi)之后就是把pg寫(xiě)出來(lái),是一個(gè)積分,積分里面有一個(gè)pg(x),后面一項(xiàng)跟pg無(wú)關(guān),所以他其實(shí)就是一個(gè)線(xiàn)性函數(shù),而且是一個(gè)凸函數(shù)
- 在每一步中把D求到最優(yōu),就是說(shuō)一個(gè)凸函數(shù)的上限函數(shù)還是一個(gè)凸函數(shù),所以這個(gè)凸函數(shù)做梯度下降的時(shí)候會(huì)得到一個(gè)最優(yōu)解
- 雖然假設(shè)了每一次會(huì)對(duì)D優(yōu)化到極致,但實(shí)際上在算法上只是迭代了k步,所以說(shuō)這個(gè)證明并不能說(shuō)算法一是工作的,但是實(shí)際上算法一跑的還是挺好的(其實(shí)算法一跑的并不好,還是挺難收斂的,經(jīng)常會(huì)出現(xiàn)各種問(wèn)題)
7、實(shí)驗(yàn)+總結(jié)
下圖是生成的一些圖片

- 數(shù)字生成的還行,但是后面的圖片效果不太好,分辨率特別低,需要很長(zhǎng)的時(shí)間才能生成稍微能看的圖片
總結(jié)
- 壞處是整個(gè)訓(xùn)練是比較難的,G和D需要比較好的均衡,如果沒(méi)有均衡好的話(huà)會(huì)導(dǎo)致生成的圖片比較差
- 優(yōu)勢(shì)是因?yàn)樯善鞑](méi)有看真正樣本上的數(shù)據(jù),沒(méi)有試圖去擬合真實(shí)數(shù)據(jù)的特征,使得它能夠生成一些比較銳利的邊緣,但是這個(gè)說(shuō)法在后面發(fā)現(xiàn)并不是這樣的
未來(lái)的工作
- conditional GAN:現(xiàn)在生成的時(shí)候是不受控制的,隨便給定一個(gè)z,然后看最終出來(lái)的是什么東西,但最好是說(shuō)控制一下去偏向所想要生成的東西
8、評(píng)論
寫(xiě)作
- 總的來(lái)說(shuō),寫(xiě)作還是比較明確的,主要關(guān)注GAN在干什么
- 摘要中主要講述了GAN在干什么事情
- intro非常短,首先寫(xiě)了一點(diǎn)故事性(為什么要做這個(gè)事情),然后接下來(lái)就是寫(xiě)GAN在干什么
- 在相關(guān)工作中,雖然第一個(gè)版本寫(xiě)的比較糟糕,基本上就是在說(shuō)與別人不一樣,但是后來(lái)的版本也基本承認(rèn)了很多想法前面的人工作都已經(jīng)做過(guò)了(真正偉大的工作不在乎你的那些想法在別的地方已經(jīng)出現(xiàn)過(guò)還是沒(méi)有,關(guān)鍵是說(shuō)你能夠給大家展示用這個(gè)東西在某個(gè)應(yīng)用上能夠取得非常好的效果,能夠讓別人信服跟著你繼續(xù)往下做,然后把整個(gè)領(lǐng)域做大,這個(gè)是偉大工作的前提)
- 第三章講的是GAN的目標(biāo)函數(shù)以及如何做優(yōu)化
- 第四章證明了為什么目標(biāo)函數(shù)能得到最優(yōu)解以及求解算法在一定程度上能夠得到最優(yōu)解
- 最后一章簡(jiǎn)單介紹了一些實(shí)驗(yàn)和未來(lái)的工作
這樣的寫(xiě)法比較i清楚,想讀的東西可以一路讀下來(lái)
但是如果工作的開(kāi)創(chuàng)性并不是很高的時(shí)候就一定要寫(xiě)清楚跟別人的區(qū)別是什么和貢獻(xiàn)是什么
對(duì)于GAN本身這個(gè)算法而言
- 它開(kāi)創(chuàng)了一個(gè)領(lǐng)域
- 從一般化的角度來(lái)及那個(gè),它影響了之后的很多工作(不僅僅是關(guān)于GAN):1、他是無(wú)監(jiān)督學(xué)習(xí)的,不需要使用標(biāo)號(hào);2、他用一個(gè)有監(jiān)督學(xué)習(xí)的損失函數(shù)來(lái)做無(wú)監(jiān)督學(xué)習(xí)的,他的標(biāo)號(hào)(來(lái)自于采樣的還是生成的)來(lái)自于數(shù)據(jù),用了監(jiān)督學(xué)習(xí)的損失函數(shù),所以在訓(xùn)練上確實(shí)會(huì)高效很多,這也是之后自監(jiān)督學(xué)習(xí)(比如說(shuō)BERT)的靈感的來(lái)源
----end----