F-GAN更高一層看GAN

今天介紹一篇比較經典的工作,作者命名爲f-GAN,他在文章中給出了通過一般的ff散度來構造一般的GAN的方案。可以毫不誇張地說,這論文就是一個GAN模型的“生產車間”,它一般化的囊括了很多GAN變種,並且可以啓發我們快速地構建新的GAN變種(當然有沒有價值是另一回事,但理論上是這樣)。

局部變分 #

整篇文章對ff散度的處理事實上在機器學習中被稱爲“局部變分方法”,它是一種非常經典且有用的估算技巧。事實上本文將會花大部分篇幅介紹這種估算技巧在ff散度中的應用結果。至於GAN,只不過是這個結果的基本應用而已。

f散度 #

首先我們還是對ff散度進行基本的介紹。所謂ff散度,是KL散度的一般化:

f(P‖Q)=∫q(x)f(p(x)q(x))dx(1)(1)Df(P‖Q)=∫q(x)f(p(x)q(x))dx


注意,按照通用的約定寫法,括號內是p/qp/q而不是q/pq/p,大家不要自然而言地根據KL散度的形式以爲是q/pq/p。

 

可以發現,這種形式能覆蓋我們見過的很多概率分佈之間的度量了,這裏直接把論文中的表格搬進來(部分)

凸函數 #

上面列舉了一堆的分佈度量以及對應的ff,那麼一個很自然的問題是這些ff的共同特點是什麼呢?

答案是:

1、它們都是正實數到實數的映射(ℝ+→ℝR+→R);

2、f(1)=0f(1)=0;

3、它們都是凸函數。

第一點是常規的,第二點f(1)=0f(1)=0保證了f(P‖P)=0Df(P‖P)=0,那第三點凸函數是怎麼理解呢?其實它是凸函數性質的一個最基本的應用,因爲凸函數有一個非常重要的性質(詹森不等式):

𝔼[f(x)]≥f(𝔼[x])(2)(2)E[f(x)]≥f(E[x])


也就是“函數的平均大於平均的函數”,有些教程會直接將這個性質作爲凸函數的定義。而如果f(u)f(u)是光滑的函數,我們一般會通過二階導數f″(u)f″(u)是否恆大於等於0來判斷是否凸函數。

 

利用(2)(2),我們有

∫q(x)f(p(x)q(x))dx=≥===𝔼x∼q(x)[f(p(x)q(x))]f(𝔼x∼q(x)[p(x)q(x)])f(∫q(x)p(x)q(x)dx)f(∫p(x)dx)f(1)=0(3)(3)∫q(x)f(p(x)q(x))dx=Ex∼q(x)[f(p(x)q(x))]≥f(Ex∼q(x)[p(x)q(x)])=f(∫q(x)p(x)q(x)dx)=f(∫p(x)dx)=f(1)=0


也就是說,這三個條件保證了ff散度是非負,而且當兩個分佈一模一樣時ff散度就爲0,這使得fDf可以用來簡單地度量分佈之間的差異性。當然,ff散度原則上並沒有保證P≠QP≠Q時f(P‖Q)>0Df(P‖Q)>0。但通常我們會選擇嚴格凸的ff(即f″(u)f″(u)恆大於0),那麼這時候可以保證P≠QP≠Q時f(P‖Q)>0Df(P‖Q)>0,也就是說這時候有f(P‖Q)=0⇔P=QDf(P‖Q)=0⇔P=Q。(注:即便如此,一般情況下f(P‖Q)Df(P‖Q)仍然不是滿足公理化定義的“距離”,不過這個跟本文主題關係不大,這裏只是順便一提。)

 

凸共軛 #

現在從比較數學的角度討論一下凸函數,一般地,記凸函數的定義域爲𝔻D(對於本文來說,𝔻=ℝ+D=R+)。選擇任意一個點ξξ,我們求y=f(u)y=f(u)在u=ξu=ξ處的切線,結果是

y=f(ξ)+f′(ξ)(u−ξ)(4)(4)y=f(ξ)+f′(ξ)(u−ξ)


考慮兩者的差函數

h(u)=f(u)−f(ξ)−f′(ξ)(u−ξ)(5)(5)h(u)=f(u)−f(ξ)−f′(ξ)(u−ξ)


所謂凸函數,直觀理解,就是它的圖像總在它的(任意一條)切線上方,因此對於凸函數來說下式恆成立

f(u)−f(ξ)−f′(ξ)(u−ξ)≥0(6)(6)f(u)−f(ξ)−f′(ξ)(u−ξ)≥0


整理成

f(u)≥f(ξ)−f′(ξ)ξ+f′(ξ)u(7)(7)f(u)≥f(ξ)−f′(ξ)ξ+f′(ξ)u


因爲不等式是恆成立的,並且等號是有可能取到的,因此可以導出

f(u)=maxξ∈𝔻{f(ξ)−f′(ξ)ξ+f′(ξ)u}(8)(8)f(u)=maxξ∈D{f(ξ)−f′(ξ)ξ+f′(ξ)u}


換新的記號,記t=f′(ξ)t=f′(ξ),並從中反解出ξξ(對於凸函數,這總能做到,讀者可以自己嘗試證明),然後記

g(t)=−f(ξ)+f′(ξ)ξ(9)(9)g(t)=−f(ξ)+f′(ξ)ξ


那麼就有

f(u)=maxt∈f′(𝔻){tu−g(t)}(10)(10)f(u)=maxt∈f′(D){tu−g(t)}


這裏的g(t)g(t)就稱爲f(u)f(u)的共軛函數。留意花括號裏邊的式子,給定ff後,gg也確定了,並且整個式子關於uu是線性的。所以總的來說,我們做了這樣的一件事情:

 

對一個凸函數給出了線性近似,並且通過最大化裏邊的參數就可以達到原來的值。

注意給定uu,我們都要最大化一次tt才能得到儘可能接近f(u)f(u)的結果,否則隨便代入一個tt,只能保證得到下界,而不能確保誤差大小。所以它稱爲“局部變分方法”,因爲要在每一個點(局部)處都要進行最大化(變分)。這樣一來,我們可以理解爲tt實際上是uu的函數,即

f(u)=maxT是值域爲f′(𝔻)的函數{T(u)u−g(T(u))}(11)(11)f(u)=maxT是值域爲f′(D)的函數{T(u)u−g(T(u))}

上述討論過程實際上已經給出了計算凸共軛的方法,在這裏我們直接給出上表對應的凸函數的共軛函數。

(注:這裏的WW朗伯W函數。)

f-GAN #

由上述推導,我們就可以給出f散度的估算公式,並且進一步給出f-GAN的一般框架。

f散度估計 #

計算ff散度有什麼困難呢?根據定義(1)(1),我們同時需要知道兩個概率分佈P,QP,Q纔可以計算兩者的ff散度,但事實上在機器學習中很難做到這一點,有時我們最多隻知道其中一個概率分佈的解析形式,另外一個分佈只有採樣出來的樣本,甚至很多情況下我們兩個分佈都不知道,只有對應的樣本(也就是說要比較兩批樣本之間的相似性),所以就不能直接根據(1)(1)來計算ff散度了。

結合(1)(1)(11)(11),我們得到

f(P‖Q)==maxT∫q(x)[p(x)q(x)T(p(x)q(x))−g(T(p(x)q(x)))]dxmaxT∫[p(x)⋅T(p(x)q(x))−q(x)⋅g(T(p(x)q(x)))]dx(12)(12)Df(P‖Q)=maxT∫q(x)[p(x)q(x)T(p(x)q(x))−g(T(p(x)q(x)))]dx=maxT∫[p(x)⋅T(p(x)q(x))−q(x)⋅g(T(p(x)q(x)))]dx


T(p(x)q(x))T(p(x)q(x))記爲整體T(x)T(x),那麼就有

f(P‖Q)=maxT(𝔼x∼p(x)[T(x)]−𝔼x∼q(x)[g(T(x))])(13)(13)Df(P‖Q)=maxT(Ex∼p(x)[T(x)]−Ex∼q(x)[g(T(x))])


(13)(13)就是估計ff散度的基礎公式了。意思就是說:分別從兩個分佈中採樣,然後分別計算T(x)T(x)g(T(x))g(T(x))的平均值,優化TT,讓它們的差儘可能地大,最終的結果就是ff散度的近似值了。顯然T(x)T(x)可以用足夠複雜的神經網絡擬合,我們只需要優化神經網絡的參數。

 

注意在對凸函數的討論中,我們在最大化目標的時候,對TT的值域是有限制的。因此,TT的最後一層,我們必須設計適當的激活函數,使得TT滿足要求的值域。當然激活函數的選擇不是唯一的,參考的激活函數已經列舉在前表。注意,儘管理論上激活函數的選取是任意的,但是爲了優化上的容易,應該遵循幾個原則:

1、對應的定義域爲ℝR,對應的值域爲要求值域(邊界點可以忽略);

2、最好選擇全局光滑的函數,不要簡單地截斷,例如要求值域爲ℝ+R+的話,不要直接用relu(x)relu(x),可以考慮的是exex或者log(1+ex)log⁡(1+ex)

3、注意式(13)(13)的第二項包含了g(T(x))g(T(x)),也就是ggTT的複合計算,因此選擇激活函數時,最好使得它與gg的複合運算比較簡單。

GAN批發 #

好了,說了那麼久,幾乎都已經到文章結尾了,似乎還沒有正式說到GAN。事實上,GAN可以算是整篇文章的副產物而已。

GAN希望訓練一個生成器,將高斯分佈映射到我們所需要的數據集分佈,那就需要比較兩個分佈之間的差異了,經過前面的過程,其實就很簡單了,隨便找一種ff散度都可以了。然後用式(13)(13)ff散度進行估計,估計完之後,我們就有ff散度的模型了,這時候生成器不是希望縮小分佈的差異嗎?最小化ff散度就行了。所以寫成一個表達式就是

minGmaxT(𝔼x∼p(x)[T(x)]−𝔼x=G(z),z∼q(z)[g(T(x))])(14)(14)minGmaxT(Ex∼p(x)[T(x)]−Ex=G(z),z∼q(z)[g(T(x))])


或者反過來:

minGmaxT(𝔼x=G(z),z∼q(z)[T(x)]−𝔼x∼p(x)[g(T(x))])(15)(15)minGmaxT(Ex=G(z),z∼q(z)[T(x)]−Ex∼p(x)[g(T(x))])


就這樣完了~

 

需要舉幾個例子?好吧,先用JS散度看看。把所有東西式子一步步代進去,你會發現最終結果是(略去了log2log⁡2的常數項)

minGmaxD(𝔼x∼p(x)[logD(x)]+𝔼x=G(z),z∼q(z)[log(1−D(x))])(16)(16)minGmaxD(Ex∼p(x)[log⁡D(x)]+Ex=G(z),z∼q(z)[log⁡(1−D(x))])


其中DDσ(x)=1/(1+e−x)σ(x)=1/(1+e−x)激活。這就是最原始版本的GAN了。

 

用Hellinger距離試試?結果是

minGmaxD(−𝔼x∼p(x)[eD(x)]−𝔼x=G(z),z∼q(z)[e−D(x)])(17)(17)minGmaxD(−Ex∼p(x)[eD(x)]−Ex=G(z),z∼q(z)[e−D(x)])


這裏的D(x)D(x)是線性激活。這個貌似還沒有命名?不過論文中已經對它做過實驗了。

 

那用KL散度呢?因爲KL散度是不對稱的,所以有兩個結果,分別爲

minGmaxD(𝔼x∼p(x)[D(x)]−𝔼x=G(z),z∼q(z)[eD(x)−1])(18)(18)minGmaxD(Ex∼p(x)[D(x)]−Ex=G(z),z∼q(z)[eD(x)−1])


minGmaxD(𝔼x=G(z),z∼q(z)[D(x)]−𝔼x∼p(x)[eD(x)−1])(19)(19)minGmaxD(Ex=G(z),z∼q(z)[D(x)]−Ex∼p(x)[eD(x)−1])


這裏的D(x)D(x)也是線性激活。

 

好吧,不再舉例了。其實這些ff散度本質上都差不多,看不到效果差別有多大。不過可以注意到,JS散度和Hellinger距離都是對稱的、有界的,這是一個非常好的性質,以後我們會用到。

總結 #

說白了,本文主要目的還是介紹ff散度及其局部變分估算而已~所以大部分還是理論文字,GAN只佔一小部分。

當然,經過一番折騰,確實可以達到“GAN生產車間”的結果(取決於你有多少種ff散度),這些新折騰出來的GAN可能並不像我們想象中的GAN,但它們確實在優化ff散度。不過,以往標準GAN(對應JS散度)有的問題,其實ff散度照樣會有,因此f-GAN這個工作更大的價值在於“統一”,從生成模型的角度,並沒有什麼突破。

轉載到請包括本文地址:https://spaces.ac.cn/archives/6016

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章