GAN原理"潛"析

為了后面介紹seqGAN + RL的應(yīng)用其垄,先來介紹一下這個很火的GAN,火到似乎女媧上帝都是“干”出來的...
稍提一點背景。統(tǒng)計機(jī)器學(xué)習(xí)中祸憋,這個世界是從分布中抽樣產(chǎn)生的(假設(shè)P(world)是產(chǎn)生這個世界的分布吐咳,那這個世界的每一個東西都是從P里面iid抽出來的)逻悠,我們只要能拿到這個分布,就可創(chuàng)建一個"真實"的世界韭脊!那怎么拿到這個分布呢童谒?建模!一般是參數(shù)模型沪羔,當(dāng)世界為無窮維的就是非參數(shù)模型饥伊。(也就是說產(chǎn)生世界的分布還依賴于其他分布,比如產(chǎn)生宇宙的分布蔫饰,宇宙依賴于....貝葉斯學(xué)派喜歡搞復(fù)雜)琅豆。很幸運!我們有概率論來表示這些分布篓吁,有測度論來衡量他們的大小(除了連續(xù)空間中很小的邊邊角角的地方measure zero)茫因,然后又知道NN只要足夠多參數(shù)(節(jié)點),可以幾乎擬合任何函數(shù)杖剪!到這了冻押,是不是覺得我們已經(jīng)可以創(chuàng)造世界了?J⒑佟(扯得有點多了洛巢。大家也知道,其實問題很多次兆,這里先不講了稿茉,下面會提到一些)
再說一點大家都明白的就是,世界分布其實也是不知道的,所以我們也不能通過積分逼近它漓库,最通用的就是采樣了恃慧,然后通過MLE或者minimize cross-entropy(KL散度,衡量分布的差異)
那先來淺析一下GAN米苹,講講這個是干嘛的糕伐。
其實上面也說了,他就是個生成模型蘸嘶,可以產(chǎn)生數(shù)據(jù)良瞧,比如一首歌,一張圖训唱,一首詩褥蚯,但更希望產(chǎn)生"真"的數(shù)據(jù)!可以產(chǎn)生數(shù)據(jù)的模型其實很多况增,比如auto-encoder(AE)赞庶,經(jīng)典之作VAE,通過decoder的部分就可以產(chǎn)生數(shù)據(jù)澳骤,但是有一個問題是歧强,他們不是真的產(chǎn)生數(shù)據(jù),只是讓input和output一樣为肮,以下列舉了生成模型的方法和AE摊册,VAE,資料很多

Generative Model Family

AE
VAE

那么GAN就是用來產(chǎn)生真實數(shù)據(jù)的颊艳!他的能力是通過進(jìn)化得來的茅特!舉個通俗栗子(老王造假幣,警察打假)說明下GAN是怎么演化的棋枕。老王想造假幣謀生白修,一開始他造的假幣很快就被警察實習(xí)生識破了;然后老王回去研究一頓之后造出來的假幣重斑,實習(xí)生分辨不出來了兵睛,但是被小警員給識破了;老王回去又開始研究绸狐,騙過了小警員卤恳;但被警司給識破了....反復(fù)研究識破,最后老王造的假幣警察已經(jīng)識別不出來了寒矿,和真的一樣!這就是GAN的很直觀的原理若债,其中造假幣的老王叫generator符相,警察叫discriminator他們兩個不斷博弈對抗,最后讓generator學(xué)會了以假亂真啊终,達(dá)到所謂的納什均衡

具體到模型上镜豹,就是第一代的generator v1(G1),產(chǎn)生的數(shù)據(jù),喂給discriminator v1蓝牲,被輕易地的分辨出來G1產(chǎn)生的是假的趟脂,(初始化一個G,產(chǎn)生n個隨機(jī)數(shù)喂給G1產(chǎn)生n張圖(target 0)后例衍,從真實數(shù)據(jù)中取n張圖為真實數(shù)據(jù)(target 1)昔期,然后喂給D1訓(xùn)練);G2要變強(qiáng)騙過D1(固定D1佛玄,更新G1的參數(shù)硼一,使其產(chǎn)生的數(shù)據(jù)的標(biāo)簽為1),然后D1也要進(jìn)化為D2梦抢,可以辨別G2產(chǎn)生的假數(shù)據(jù)(G2產(chǎn)生的數(shù)據(jù)標(biāo)簽為0再訓(xùn)練)..... 最后我就得到了一個世界上最強(qiáng)的G和一個世界上最強(qiáng)的D般贼!你不會問我以我的G來騙我的D會怎么樣呢!(一會告訴你)

intuition process of GAN

淺析之后是不是要"潛"析一下了奥吩!(公式編輯是很累哦哼蛆。。還是上圖吧)

這說明MLE等價于最小化KL divergence霞赫,這種divergence衡量了兩個分布的差異腮介。前面也提到NN的特性,可以擬合復(fù)雜的函數(shù)绩脆,那如何用NN產(chǎn)生分布呢萤厅?分布的函數(shù)還是一個分布,輸入一個分布到NN即可靴迫!(比如你可以輸入一個正太分布等)這好像似乎沒GAN什么事惕味。。
那我們來看一下產(chǎn)生一個x的概率玉锌,通過上面的方法

Z是我們輸入的分布名挥,G是NN很復(fù)雜,我們是沒辦法計算這個的likelihood主守,也就說到這里我們就卡住了禀倔,那算不了likelihood我們怎么來調(diào)參?参淫!GAN(干救湖!不會弄公式輸入真的很僵!)
終于到了GAN了涎才,先來介紹一下GAN的原理


generator和discriminator可以是任何函數(shù)鞋既,只是現(xiàn)在都用NN而已力九,G也是和原理一樣通過一個先驗分布產(chǎn)生復(fù)雜分布,D也差不多邑闺,output一個scalar來衡量差異〉埃現(xiàn)在出現(xiàn)了一個V(G,D),通過它可以得到我們要的G陡舅!那就來講講它吧


先不談這個怎么來的抵乓,但這個看起來很直觀對吧。第一個式子x 從真實數(shù)據(jù)中sample來靶衍,那D給他打分高(true data)灾炭,第二個式子x從G中sample來就給他打分低(false data),也就是-D(x)要高摊灭,假設(shè)現(xiàn)在有一個G咆贬,我們要找一個D來maximize V,這樣才是一個合格的Discriminator帚呼!


是不是很驚掏缎!用D來maxmize V(G,D)得到的竟然是真實分布和生成分布的差異!(Divergence),既然有了衡量差異的東西煤杀,那接下來很自然就是調(diào)節(jié)G的參數(shù)來最小化這個差異就好了眷蜈,也就是上上上圖中最后一個式子!順便說一下JSD取值為[0,log2]沈自,當(dāng)兩種分布重合的時候JSD=0
好了酌儒,那現(xiàn)在就可以解這個argmin max V(G,D),來得到G,損失就是max V(G,D)枯途,用GD就可以解啦(max過程可以用抽樣來做)
這里提一點比較小的問題忌怎,回想一下上述步驟,我們假設(shè)先有一個G然后找一個D得到max(V)(也就是真實和生成的差異),再來調(diào)節(jié)G找到差異最小的那個G酪夷;這時候G跟新了榴啸,那D應(yīng)該重新找最大,順應(yīng)G也應(yīng)該重新調(diào)整參數(shù)來找最小差異的分布晚岭,但這個新的分布一定比上一個分布的差異小么鸥印?其實也就如同機(jī)器學(xué)習(xí)設(shè)定學(xué)習(xí)率類似,所以實際編程的話坦报,我們盡量小步或者少次更新G不過好像作者Goodfellow并不在乎這個(這名字老板一定喜歡搀玖!)
這里稍微提一下實際操作過程款侵,因為我們不可能做V里面的積分菇存,還是sample的方法

是不是很眼熟拴疤,一般二分類器的就是在maximize它!比如邏輯回歸等字管。

貼一張具體算法夏块,很清晰有木有疏咐!剛才有提到G的更新要小(次數(shù)少或者步長小)纤掸!D過程迭代多次是因為數(shù)值計算不可能一次找到最大值脐供,每次其實是在找lower bound,多迭代幾次可以找的盡可能大的

更新G的時候因為第一項和G無關(guān)借跪,就可以不要政己,但是在實際操作中還有一點不一樣的地方,就是V

如果用原始的V掏愁,由于開始G產(chǎn)生的數(shù)據(jù)比較假歇由,會使D(x)值比較小(log(1-D(x))),從圖中也可以看出來果港,D(x)值小對應(yīng)的梯度也是比較小沦泌,會導(dǎo)致在開始訓(xùn)練的時候很慢,改進(jìn)之后的損失保證了和原來的同樣趨勢的同時辛掠,解決了這個問題谢谦,開始訓(xùn)練比較快,之后訓(xùn)練比較慢(-log(D(x)))萝衩。這樣比較符合一般訓(xùn)練的感覺(其實這個loss是個比較奇怪的Divergence回挽,是KLD - 2JSD,但是有一個在操作上的好處是猩谊,寫成這樣等同于是讓G產(chǎn)生的data 作為Discriminator的positive的sample千劈!細(xì)節(jié)就不說了)

再稍微提一個地方!(來解釋一下最強(qiáng)的D和G誰更厲害)先擺一張圖來自Martin的Towards Principled Methods for Training Generative Adversarial Networks, 2017

Martin Arjovsky, Leon Bottou, Towards Principled Methods for Training Generative Adversarial Networks, 2017

D的loss是用來衡量JSD(JS Divergence)的牌捷,可以根據(jù)JSD來調(diào)G墙牌,但是這是理想的狀況。實際上如上圖暗甥,D的loss都趨近于0喜滨,也就是準(zhǔn)確率為100%,這篇paper告訴我們G train 25個epoch時淋袖,G已經(jīng)很強(qiáng)了(他產(chǎn)生的圖已經(jīng)很真實了)鸿市,但是你會發(fā)現(xiàn),這時trian一個D時即碗,它一眼就可以分辨出來焰情!是否是說D更厲害呢?為什么D的loss會趨近于0呢剥懒,這不是說明JSD沒有給我們什么作用呢内舟?(圖上表示很快就趨近于0了!)

  • 我們沒辦法做上面的積分初橘,只能用sample的方法验游,sample的數(shù)據(jù)充岛,就算G生成的數(shù)據(jù)和真實數(shù)據(jù)有重疊,但因為sample的數(shù)據(jù)耕蝉,總可以用一個powerful的D找到一個分類面把他們完全分開崔梗,那一個辦法是限制住D,讓它不要過擬合垒在;但是蒜魄,其實D可以量出JSD的前提是D的capacity是可以輸出任何值,也就是要它很powerful场躯!這就出現(xiàn)了奇妙的矛盾谈为,一方面實際操作上要它弱一點,另一方面從理論角度又希望它強(qiáng)一點
  • 現(xiàn)在從data的本質(zhì)上解釋踢关,我們的data都是高維空間的manifold(實際data和G產(chǎn)生的data)伞鲫,這樣其實data的交際是很小的,這樣算出來的divergence就是log2签舞,這會造成什么問題呢秕脓?

前面提到GAN的類似演化的過程,變得越來越好瘪菌!讓G產(chǎn)生的data和真實的越來越近撒会,但是讓計算機(jī)必須要讓這個距離越來越小,但是量出來的都是log2...就沒有動力進(jìn)化师妙。诵肛。。怎么解決這個問題呢默穴!(WGAN!!!下次講怔檩,這個是重點!蓄诽!)

那先講個trick

  • 增加噪聲
    讓低緯的manifold變寬薛训,可能就有overlap,D就沒有辦法完全分開仑氛,但是noise要不斷變小乙埃,減少干擾(這是操作上應(yīng)該考慮的)

另一個問題 Mode Collapse
也就是只產(chǎn)生一個mode,比如產(chǎn)生數(shù)據(jù)只能產(chǎn)生一種形式锯岖,比如只會畫狗介袜,但是我們其實不知道他不會干什么。出吹。(尷尬了吧)也就是說G只會針對一個mode調(diào)參遇伞,Goodfellow原來以為是原因是原先的loss設(shè)定(divergence)有問題,最初提到的MLE也就是loss是KLD捶牢,但是我們實際是上在minimize reverse KL Divergence鸠珠,我們來看下圖

這里就舉例為什么會有mode collapse巍耗。我們來看reverse KL,在什么時候它取值會很大渐排?就是真實數(shù)據(jù)不存在的時候炬太,也就是G產(chǎn)生不像真實數(shù)據(jù)時,就會產(chǎn)生很大的loss飞盆,這時候它不會冒險產(chǎn)生新圖娄琉,它寧愿保守的產(chǎn)生固有的某個圖(Mode)!(KL情況類似分析即可) GoodFellow說我們是可以直接用KL divergence,但是也不會完全解決這個問題

好啦吓歇,這次就先解析這些希望這些內(nèi)容可以讓你對GAN有更多的了解,有些內(nèi)容也是個人觀點票腰, 如果有錯誤請指明哦城看。其實GAN有很多內(nèi)容,這個GAN是不能直接做問答機(jī)的杏慰,現(xiàn)在就不說了测柠,下次!會介紹一些改進(jìn)的GAN缘滥,然后就可以開始介紹我們的圖靈問答機(jī)了:湫病!
如有錯誤的地方一定要指出哦朝扼!一起進(jìn)步T叻А!擎颖!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榛斯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子搂捧,更是在濱河造成了極大的恐慌驮俗,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件允跑,死亡現(xiàn)場離奇詭異王凑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)聋丝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門索烹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人潮针,你說我怎么就攤上這事术荤。” “怎么了每篷?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵瓣戚,是天一觀的道長端圈。 經(jīng)常有香客問我,道長子库,這世上最難降的妖魔是什么舱权? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮仑嗅,結(jié)果婚禮上宴倍,老公的妹妹穿的比我還像新娘。我一直安慰自己仓技,他們只是感情好鸵贬,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脖捻,像睡著了一般阔逼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上地沮,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天嗜浮,我揣著相機(jī)與錄音,去河邊找鬼摩疑。 笑死危融,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雷袋。 我是一名探鬼主播吉殃,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼片排!你這毒婦竟也來了寨腔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤率寡,失蹤者是張志新(化名)和其女友劉穎迫卢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冶共,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡乾蛤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捅僵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片家卖。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庙楚,靈堂內(nèi)的尸體忽然破棺而出上荡,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布酪捡,位于F島的核電站叁征,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏逛薇。R本人自食惡果不足惜捺疼,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望永罚。 院中可真熱鬧啤呼,春花似錦、人聲如沸呢袱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽产捞。三九已至醇锚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坯临,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工恋昼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留看靠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓液肌,卻偏偏與公主長得像挟炬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嗦哆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容