這次給大家介紹一下GAN的generalized framework抛猖。其實很多研究都是這樣茎匠,先找到一個比較直觀好理解方法忘瓦,然后去研究他的框架搁廓,發(fā)現(xiàn)原來的就是一個特例。所以物理學家才想找什么歸一化的方程耕皮。境蜕。
本文主要介紹了f-GAN、WGAN凌停、improved WGAN粱年、conditional GAN和cycle GAN資料來源于Hung-yi Lee
先介紹一些背景知識
- paper: Sebastian Nowozin, Botond Cseke, Ryota Tomioka, f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization. NIPS, 2016
一句話總結:可以設計discriminator,和任何f-divergence有關(原來是和JS Divergence有關) - f-divergence
- Fenchel Conjugate
f-divergence
用來量兩個分布的差異罚拟,假設P和Q是兩個分布台诗。p(x),q(x)分別是從兩個分布sample出x的概率
f是一個函數(shù)嘍赐俗,你帶不同的函數(shù)就會得到不同的divergence拉队,只要符合上述兩個條件,比如KL Divergence (f(x)=xlog(x))阻逮,reverse KLD (f(x)=-log(x))粱快,Chi Square (f(x)=(x-1)^2)等
Fenchel Conjugate
這個東西是凸優(yōu)化中的,學過SVM的朋友應該知道哦叔扼!(主要就是把一般問題轉化為簡單,好解得問題)
這個東西就是可以把f-divergence寫成GAN的樣子,這里簡單說一下定義吧澎现,感興趣的同學可以去看看凸優(yōu)化
看到這個上確界是不是很快能想到不等式干旧,最小最大對偶問題椎眯?那你功力不錯编整!
上面的過程都頗直接的,這里給定一個D其實就是f-divergence的lower bound,我們max它,就可以近似f-divergence啦
從概率的角度講呢庙睡,就可以改寫成這樣
是不是很眼熟赵颅,這個式子一下就會求了吧,sample,對吧列肢!找一個D能盡量最大化上式,那你就找到了衡量兩個分布的f-divergence怀骤!(比如真實數(shù)據(jù)分布和偽造數(shù)據(jù)分布)
我們把中間過程寫成V(G,D)是不是就和原來一樣了么?蓝撇!那個D就是Discriminator虽抄。
那也就是說,現(xiàn)在你想要算什么f-divergence独柑,只要算出f的共軛來迈窟,帶進去就可以啦!那你說帶不同的f-divergence有差么忌栅?這就是上次提到的Mode Collapse,原始GAN不能產出多樣性的data车酣,就是因為原來是用JS Divergence,現(xiàn)在你就可以用KLD啦索绪,也許可以解決Mode Collapse湖员!(實際上是差不多....也就是說這個問題不是我們minimize哪個divergence產生的)。現(xiàn)在明白GAN就是f-divergence的一個特例了吧瑞驱!
這篇paper還有說一點是Double-loop v.s. Single-step,也就是訓練的時候本來是D訓練多次娘摔,G訓練一次,現(xiàn)在可以都只訓練一次唤反,可以證明是收斂的凳寺!大家可以看看paper,這里先不說了
接下來彤侍,我們回憶一下上次提到的肠缨,我們用JS Divergence來量兩個分布的差異時,當兩個分布沒有交集的時候拥刻,它總是log2怜瞒,這樣會導致G的訓練失效父泳,它不明白到底怎么改變參數(shù)才能讓divergence變小般哼,其實這時候Discriminator失去了它作用
那其實很明顯可以看到吴汪,當兩個分布逐漸接近的時候,其實我們的模型就在變好蒸眠,那有沒有辦法來衡量這種趨勢呢?(找到一種度量兩個分布的距離不就好了么漾橙!就像perceptron一樣,轉化為度量誤分類點到分類平面的距離楞卡!)
接下來霜运,我們就介紹這種模型WGAN
下面我們來介紹一下WGAN
- paper: Martin Arjovsky, Soumith Chintala, Leon Bottou, Wasserstein GAN, arXiv prepring, 2017
Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin, Aaron Courville, Improved Training of Wasserstein GANs, arXiv prepring, 2017
一句話總結:用Earth Mover's Distance來估計兩個分布的差異 - Earth Mover's Distance
它類似于線性規(guī)劃中運輸問題的最優(yōu)解(又挖坑了),你可以想象成搬運工把一堆土搬到指定的地方蒋腮,那搬運所做平均最小功最小就是EMD淘捡,那我們可以用一個矩陣來表示
上圖表示把P的土搬到Q的位置,B就是平均搬運的距離池摧,那EMD是最小的搬運平均距離焦除,那現(xiàn)在當兩個分布不斷接近時,它的EMD其實是不斷的連續(xù)的在變小作彤,模型就知道該往哪個方向走可以讓兩個分布差異變斜炱恰!
我們來看看把EMD套用到GAN的框架里面=呋洹(文獻直接給出)
EMD可以表示成最大化這個式子创葡,D屬于1-Lipschitz function。從定義可以看出绢慢,D加了這個限制其實也就是說灿渴,D要是一個不會變化太猛烈的函數(shù),如果沒有這個約束會有什么問題呢胰舆?其實我們最大化這個式子只要讓x從真實數(shù)據(jù)sample出來的值為正無窮逻杖,從假的數(shù)據(jù)集sample出來的值為負無窮就可以,這樣能得到earth mover's distance嗎思瘟?這里和原來是有區(qū)別的荸百,最初的GAN我們假設D可以是任何輸出的函數(shù)!(沒忘吧)
這個圖可以幫助理解滨攻,用原始GAN的D够话,相當于一個sigmoid二分類器,它平滑了里分類面較遠的點(導致梯度很小接近如零)光绕,使得比較難分類的點(正負邊界上)有很好的學習女嘲,這是logistic回歸中用sigmoid方程的好處之一(自己臆想的,它導致是sigmoid直接原因是屬于指數(shù)族分布)诞帐,但是我們現(xiàn)在任務不是為了分類欣尼,用WGAN的D的那條綠色的線更適合,至少他梯度不會變化太大,在哪里都有可學習性愕鼓,不會出現(xiàn)gradient vanish問題
接下來我們看看怎么解這個問題钙态,如果沒有這個限制,直接gradient ascending就可以菇晃,但現(xiàn)在有這個限制怎么辦呢册倒?作者開始就用了weight clipping來限制D的變化范圍(RNN有做的限制是gradient clipping),通過限制了weight磺送,input的變化導致的output的變化肯定是在一個范圍內的驻子,但可能不是1-Lipschitz,但可以保證是K-Lipschitz估灿。也很直觀對吧崇呵,如果不加限制可能就會出現(xiàn)一根不斷接近90度的分類線,你的training就無法停止馅袁!但是這是不一定可以找到W距離的
具體來說就是讓weight在-c到c之間:
if w > c, then w = c;
if w < -c, then w = -c
算法其實只需要改一點就好演熟,原來用的logD和log(1-D),現(xiàn)在只需要用D和-D就可以啦,然后學習D的過程中做一個weight clipping就好啦司顿!第一篇paper中還有一個流言就是說不要用Adam來train芒粹,要用RSMprop,也有paper正好相反大溜。化漆。,大家可以試試
- 那我們這里小結一下
- 最初GAN的D是用來衡量JS Divergence的钦奋,假設每次我們把D train到底座云,那我們可能得到的結果都是定值log2,根本不知道我們generate的圖片到底有多好付材;作者說它通常D不訓練到底(D更新一次朦拖,G更新一次),那其實他衡量的根本不是JS Divergence,也不知道是啥厌衔,那他的discriminator的output也就失去了意義璧帝,你只能通過直覺來看G生成的好壞
- 如果我們現(xiàn)在用的是WGAN的話,Discriminator衡量的是Wasserstein Distance,它是在衡量可以表示兩個分布的距離富寿,所以可以從loss里面看出來你的generator生成的圖片到底好不好睬隶。比如下圖二,G和D都用MLP則產生的圖都是爛的页徐,loss也都很大
上面的解法我們只能說可以做到D是K-Lipschitz苏潜,但無法說是1-Lipschitz,那有什么方法可以讓模型盡量去找1-Lipschitz呢变勇?其實相當于你可以加更大的限制恤左,大家可以想想,一般模型怎么加限制呢?下面簡單聊聊
利用上面這個1-Lipschitz的性質飞袋,(注意一點是D對x的微分戳气,不是對參數(shù)的!)授嘀,給模型加正則物咳。按照定義也頗直覺的對吧锣险,我們從所有的D里面找到使max最大的D蹄皱,對那些gradient norm大于1的加penalty,這樣只要lambda給足夠大芯肤,就可以找到1-Lipschitz巷折,這就是Improved WGAN,因為不可能積分我們要做sample崖咨,所以
這個用來約束的penalty分布锻拘,直覺上這個應該是uniform分布對吧,但其實那樣的話可能效率會很低击蹲,我們來介紹一下paper中是怎么選擇的
paper中說只用取真實分布和G中間的部分來作為penalty的分布署拟,實驗結果就很好了!其實也頗直接歌豺,因為他們之外的分布對G的更新也沒意義對吧
那其實還有一點就是推穷,paper中要norm越接近1約好,過大過小都有penalty类咧,所以實際操作是用下面這個公式
paper中是這么說的(同時Appendix有證明馒铃!)
"one may wonder why we penalize the norm of the gradient for differing from 1, instead of just penalizing large gradients. The reason is that the optimal critic ... actually has gradients with norm 1 almost everywhere under Pr and Pg"
"Simply penalizing overly large gradients also works in theory, but experimentally we found that this approach converged faster and to better optima."
他說假設你可以找到那個最好的Discriminator可以量出Wasserstein Distance的,那么它有個特性就是讓真實data和G產生的data的連線上的Gradient都是1痕惋。那其實我們也是希望真實分布和G產生的分布差距大一點(也就是兩個分布之間越陡約好)区宇,但是不能太大(最大為1),最后也說了值戳,試驗結果這樣最好啦议谷!
我們現(xiàn)在聊聊如何產生句子,為什么一般GAN不能做NLP呢堕虹?
那句子由詞組成柿隙,一般用one-hot embedding來表示每個詞,一個句子可用一個matrix表示鲫凶,圖片產生也就是產生一個矩陣而已禀崖,那直接產生句子好了唄。但是因為真實的句子是one-hot表示每個詞也就是離散的螟炫,只有一個1其他都是0波附,而generator很難產生只有一個1和0的矩陣,那D是不是很容易發(fā)現(xiàn)什么假的?只要不是只有一個1的向量那肯定就是假的了掸屡。根本不需要學什么語義文法的事情封寞,那其實不論G產生什么東西,D隨便就可以判斷真假仅财,那學什么東西狈究。(圖的話因為每個像素值是連續(xù)的)。其實主要因為真實data和產生的data沒有overlap的情況盏求,那JS Divergence量出來永遠是log2,train什么東西還抖锥?!是不是一下就知道該怎么辦了碎罚?WGAN磅废!
下面是一些WGAN產生的詩,有些還不錯哦
其實主要產生這種離散數(shù)據(jù)的GAN主要是SeqGAN荆烈,但它不像傳統(tǒng)的GAN拯勉,基于Reinforcement Learning來做,下次來聊這個憔购,我們的圖靈對話機宫峦!
前面講的都是Generation的GAN,現(xiàn)在簡單將一些GAN做transformation玫鸟,比如text to image导绷,你輸入一句話,產生描述你說的話的圖鞋邑,image to image等等
比如inputs=一條狗诵次,output應該輸出一個狗的圖片。那你問這不就是傳統(tǒng)的supervise learning么枚碗?直接訓練一個這樣的模型不就好了么逾一?那為什么用GAN呢?其實因為有許多狗的圖片肮雨,它可以對于inputs=一條狗遵堵,那你傳統(tǒng)方法會傾向于輸出這個狗圖片的均值,得到一個非常模糊的圖怨规,他不是sample的data
如果你用GAN的話可以approximate真實狗的分布陌宿,然后依照你的text得到高清圖片(有見過文章用GAN去馬賽克,脫衣服的哦)波丰,一般就是用Conditional GAN
上圖有兩種方法可以訓練Discriminator壳坪,那對應的正負樣本應該是什么呢?大家想想吧掰烟。paper中效果比較好的是右圖
再舉一個image to image的例子爽蝴,比如黑白圖片到彩色圖片沐批,白天到黑夜等。
這里有一個trick是在G輸出的結果中加入一個constrain蝎亚,讓output和target越接近約好九孩,這樣產生的圖會更真實,不會產生一些怪怪的不存在的東西
上面都是有paired data來訓練模型发框,假設沒有paired data躺彬,如何做這種風格的轉化呢?你不能讓畫家來對著你的照片畫畫
-
Cycle GAN/Disco GAN
transform an object from one domain to another
比如把一張照片轉化為梵高畫風的圖梅惯,冬天的景色轉為夏天的景色等
Cycle GAN
這里怎么train呢宪拥?是不是可以容易想到你讓D來辨別是否是梵高畫的畫,這樣不斷訓練之后G產生的圖就越來越像梵高的話了个唧,但有一個問題是可能產生的畫和輸入的照片完全無關江解,inputs當做noise忽略掉就好了设预。徙歼。。作者為了避免這種結果鳖枕,又加了一個generator魄梯,把產生梵高的畫再合成輸出原始圖片,有點像AE宾符,讓input和output越接近越好酿秸。這樣產生的圖會保留原來的information。那個把梵高的畫轉為原始的generator就可以用來把真實梵高的畫轉為照片啦魏烫!
這個技術玩起來還是不錯的辣苏,比如你可以把所有的照片都轉為畫家的畫像,卡通人物等等
這次學了這些哄褒,有錯誤歡迎指出稀蟋,下次學一下另一個重要技術Reinforcement Learning,走向終極目標(圖靈問答)