從14年開始到現(xiàn)在兩年多的時間里硝枉,GAN(Generative Adversarial Network,對抗生成網絡)在機器學習、人工智能領域最具矚目和創(chuàng)新性的研究成果之一废累。近些天倚搬,仔細看了多篇機器學習領域的論文和研究冶共,更進一步加深了對GAN的敬佩之情。特地將自己的一些理解和看法記錄下來,以饗讀者捅僵,共勉家卖。廢話不多說,從GAN的興起開始介紹吧庙楚。
GAN的思想
GAN最早于2014年底有Goodfellow大神提出上荡。Ian Goodfellow 是世界上最重要的 AI 研究者之一,他在 OpenAI(谷歌大腦的競爭對手馒闷,由 Elon Must 和 Sam Altman 創(chuàng)立)工作過不長的一段時間(2015年底-2016年底)酪捡,2017年3月重返 Google Brain, 加入Google Brain纳账,他們建立了一個探索“生成模型”(generative models)的新研究團隊逛薇。
我們在理解GAN時,首先要明白對抗生成網絡拆開來是兩個東西:一個是判別模型(Discremator疏虫,簡稱D模型)永罚,一個是生成模型(Generator,簡稱G模型)卧秘。
說一個具體點的例子:兩個人比賽呢袱,看是 A 的矛厲害,還是 B 的盾厲害翅敌。在GAN模型中羞福,我們會拿一些真實數(shù)據(jù),同時混合上亂七八糟的虛構數(shù)據(jù)蚯涮。A 拼命地把隨手拿過來的假數(shù)據(jù)模仿成真實數(shù)據(jù)治专,并揉進真實數(shù)據(jù)里。B 則拼命地想把真實數(shù)據(jù)和假數(shù)據(jù)區(qū)分開恋昼。這里看靠,A 就是一個生成模型,類似于賣假貨的液肌,一個勁兒地學習如何騙過 B挟炬。而 B 則是一個判別模型,類似于警察叔叔嗦哆,一個勁兒地學習如何分辨出 A 的騙人技巧谤祖。如此這般,隨著 B 的鑒別技巧的越來越牛老速,A 的騙人技巧也是越來越純熟粥喜。一個造假一流的 A,就是我們想要的生成模型橘券!這個基本的對抗思想就是GAN的精髓了额湘。
GAN的困難
看似簡單的GAN模型卿吐,在實際使用時卻會遇到非常多的困難。最大的一個就是GAN的不收斂問題锋华,如果大家有試驗過GAN可能會知道嗡官,GAN的收斂是很困難的。往往就是需要設置很多的參數(shù)毯焕,比如學習率衍腥,比如說你的網絡結構,你去很好的去提出G和D的能力纳猫,才能使得它最終達到收斂婆咸。最主要的原因來源于兩部分。
第一芜辕、就是梯度消失的問題尚骄。當你優(yōu)化的時候,對于公式里我們的生成器侵续、判別器的損失函數(shù)會存在梯度消失的問題乖仇,那么我們需要設計一些更好的損失函數(shù),使得梯度消失問題得到解決询兴。
第二、就是模式發(fā)現(xiàn)問題起趾。我們的生成器可能生成同樣的數(shù)據(jù)而不是多樣的數(shù)據(jù)诗舰。例如貓,它可能生成的都是黑貓训裆、或者生成MNIST的數(shù)據(jù)全都是零眶根。那么這個問題主要原因是來源于,因為我們的梯度下降實際上不區(qū)分min-max和max-min边琉。那么會導致我們的生成器會希望多生成一些重復但是很安全的樣本属百。比如說我生了一些黑貓或生成一些0,甚至可能到這樣一個情況就是它生成的接真實的就完全一樣变姨,但它只適合這樣一個情況族扰。那么這是我們不希望,我們希望生成器會生成多樣樣本定欧,盡量與真實樣本多樣化一致渔呵。
GAN的推動
不過從一提出開始,GAN網絡就收到越來越多人的追捧和崇拜砍鸠。其改進方法大概少說也有100種了扩氢,[Github](https://github.com/hindupuravinash/the-gan-zoo上已有列出。