1. 程式人生 > >條條大路通羅馬LS-GAN:把GAN建立在Lipschitz密度上

條條大路通羅馬LS-GAN:把GAN建立在Lipschitz密度上

最近很多關心深度學習最新進展,特別是生成對抗網路的朋友可能注意到了一種新的GAN-- Wasserstein GAN。其實在WGAN推出的同時,一種新的LS-GAN (Loss Sensitive GAN,損失敏感GAN)也發表在預印本 [1701.06264] Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities 上。


那這兩種GAN有沒有什麼聯絡呢?作為LS-GAN的作者,筆者就帶大家一覽WGAN和LS-GAN本質和聯絡。

GAN前傳和“無限的建模能力”

熟悉經典GAN的讀者都知道,GAN是一種通過對輸入的隨機噪聲z

 (比如高斯分佈或者均勻分佈),運用一個深度網路函式G(z),從而希望得到一個新樣本,該樣本的分佈,我們希望能夠儘可能和真實資料的分佈一致(比如影象、視訊等)。

在證明GAN能夠做得擬合真實分佈時,Goodfellow做了一個很大膽的假設:用來評估樣本真實度的Discriminator網路(下文稱D-網路)具有無限的建模能力,也就是說不管真實樣本和生成的樣本有多複雜,D-網路都能把他們區分開。這個假設呢,也叫做非引數假設


當然,對於深度網路來說,咱只要不斷的加高加深,這還不是小菜一碟嗎?深度網路擅長的就是幹這個的麼。

但是,正如WGAN的作者所指出的,一旦真實樣本和生成樣本之間重疊可以忽略不計(這非常可能發生,特別當這兩個分佈是低維流型的時候),而又由於D-網路具有非常強大的無限區分能力,可以完美地分割這兩個無重疊的分佈,這時候,經典GAN用來優化其生成網路(下文稱G-網路)的目標函式--JS散度-- 就會變成一個常數!

我們知道,深度學習演算法,基本都是用梯度下降法來優化網路的。一旦優化目標為常數,其梯度就會消失,也就會使得無法對G-網路進行持續的更新,從而這個訓練過程就停止了。這個難題一直一來都困擾這GAN的訓練,稱為梯度消失問題。

WGAN來襲

為解決這個問題,WGAN提出了取代JS散度的Earth-Mover(EM)來度量真實和生成樣本密度之間的距離。該距離的特點就是,即便用具有無限能力的D-網路完美分割真實樣本和生成樣本,這個距離也不會退化成常數,仍然可以提供梯度來優化G-網路。不過WGAN的作者給出的是定性的解釋,缺少定量分析,這個我們在後面解釋LS-GAN時會有更多的分析。

現在,我們把這個WGAN的優化目標記下來,下文我們會把它跟本文的主角LS-GAN 做一番比較。

這裡 f-函式和 g-函式 分別是WGAN的批評函式(critics)和對應的G-網路。批評函式是WGAN裡的一個概念,對應GAN裡的Discriminator。該數值越高,代表對應的樣本真實度越大。

好了,對WGAN就暫時說到這裡。總結下,由於假設中的無限建模能力,使得D-網路可以完美分開真實樣本和生成樣本,進而JS散度為常數;而WGAN換JS散度為EM距離,解決了優化目標的梯度為零的問題。

不過細心的讀者注意到了,WGAN在上面的優化目標(12)裡,有個對f-函式的限定:它被限定到所謂的Lipschitz連續的函式上的。那這個會不會影響到上面對模型無限建模能力的假設呢?

其實,這個對f-函式的Lipschitz連續假設,就是溝通LS-GAN和WGAN的關鍵,因為LS-GAN就是為了限制GAN的無限建模能力而提出的。

熟悉機器學習原理的朋友會知道,一提到無限建模能力,第一反應就應該是條件反應式的反感。為什麼呢?無限建模能力往往是和過擬合,無泛化性聯絡在一起的。

仔細研究Goodfellow對經典GAN的證明後,大家就會發現,之所以有這種無限建模能力假設,一個根本原因就是GAN沒有對其建模的物件--真實樣本的分佈--做任何限定。

換言之,GAN設定了一個及其有野心的目標:就是希望能夠對各種可能的真實分佈都適用。結果呢,就是它的優化目標JS散度,在真實和生成樣本可分時,變得不連續,才使得WGAN有了上場的機會,用EM距離取而代之。

所以,某種意義上,無限建模能力正是一切麻煩的來源。LS-GAN就是希望去掉這個麻煩,取而代之以“按需分配”建模能力。

LS-GAN和“按需分配”的建模能力 

好,讓我們換個思路,直接通過限定的GAN的建模能力,得到一種新的GAN模型。這個就是LS-GAN了。我們先看看LS-GAN的真容:

這個是用來學習損失函式的目標函式。我們將通過最小化這個目標來得到一個“損失函式" (L_\theta,下文稱之為L-函式)。L-函式在真實樣本上越小越好,在生成的樣本上越大越好。

另外,對應的G-網路,通過最小化下面這個目標實現:

這裡注意到,在公式(6)中,對L-函式的學習目標 S中的第二項,它是以真實樣本x和生成樣本\mathbf z_G的一個度量\Delta(\mathbf x, \mathbf z_G)為各自L-函式的目標間隔,把x\mathbf z_G分開。

這有一個很大的好處:如果生成的樣本和真實樣本已經很接近,我們就不必要求他們的L-函式非得有個固定間隔,因為,這個時候生成的樣本已經非常好了,接近或者達到了真實樣本水平。

這樣呢,LS-GAN就可以集中力量提高那些距離真實樣本還很遠,真實度不那麼高的樣本上了。這樣就可以更合理使用LS-GAN的建模能力。在後面我們一旦限定了建模能力後,也不用擔心模型的生成能力有損失了。這個我們稱為“按需分配”。


上圖就是對LS-GAN這種對建模能力”按需“分配的圖示。

有了上面的準備,我們先把LS-GAN要建模的樣本分佈限定在Lipschitz 密度上,即如下的一個假設:

那麼什麼是Lipschitz密度了?簡而言之,Lipschitz密度就是要求真實的密度分佈不能變化的太快。密度的變化隨著樣本的變化不能無限地大,要有個度。不過這個度可以非常非常地大,只要不是無限大就好。

好了,這個條件還是很弱地,大部分分佈都是滿足地。比如,你把一個影象調得稍微亮一些,它看上去仍然應該是真實的影象,在真實影象中的密度在Lipschitz假設下不應該會有突然地、劇烈地變化。不是嗎?


然後,有了這個假設,我就能證明LS-GAN,當把L-函式限定在Lipschitz連續的函式類上,它得到地生成樣本地分佈和真實樣本是完全一致!


前面我們說了,經典GAN事實上對它生成的樣本密度沒有做任何假設,結果就是必須給D-網路引入無限建模能力,正是這種能力,在完美分割真實和生成樣本,導致了梯度消失,結果是引出了WGAN。

現在,我們把LS-GAN限定在Lipschitz密度上,同時限制住L-函式的建模能力到Lipschitz連續的函式類上,從而證明了LS-GAN得到的生成樣本密度與真實密度的一致性。

那LS-GAN和WGAN又有什麼關係呢?


細心的朋友可能早注意到了,WGAN在學習f-函式是,也限定了其f-函式必須是Lipschitz連續的。不過WGAN匯出這個的原因呢,是因為EM距離不容易直接優化,而用它的共軛函式作為目標代替之。

也就是說,這個對f-函式的Lipschitz連續性的約束,完全是“技術”上的考慮,沒有太多物理意義上的考量。

而且,WGAN的作者也沒有在他們的論文中證明:WGAN得到的生成樣本分佈,是和真實資料的分佈是一致的。不過,這點在我們更新的預印本中給出了明確的證明,如下:

換言之:我們證明了,WGAN在對f-函式做出Lipschitz連續的約束後,其實也是將生成樣本的密度假設為了Lipschiz 密度。這點上,和LS-GAN是一致的!兩者都是建立在Lipschitz密度基礎上的生成對抗網路。

好了,讓我們把LS-GAN和WGAN對L-函式和f-函式的學習目標放在一起仔細再看一看:

LS-GAN

WGAN

形式上來看,LS-GAN和WGAN也有很大區別。WGAN是通過最大化f-函式在真實樣本和生成樣本上的期望之差實現學習的,這種意義上,它可以看做是一種使用“一階統計量"的方法。

LS-GAN則不同。觀察LS-GAN優化目標的第二項,由於非線性()_+函式的存在,使得我們無法把L-函式分別與期望結合,像WGAN那樣得到一階統計量。因為如此,才使得LS-GAN與WGAN非常不同。

LS-GAN可以看成是使用成對的(Pairwise)“真實/生成樣本對”上的統計量來學習f-函式。這點迫使真實樣本和生成樣本必須相互配合,從而更高效的學習LS-GAN。

如上文所述,這種配合,使得LS-GAN能夠按需分配其建模能力:當一個生成樣本非常接近某個真實樣本時,LS-GAN就不會在過度地最大化他們之間L-函式地差值,從而LS-GAN可以更有效地集中優化那些距離真實樣本還非常遠地生成樣本,提高LS-GAN模型優化和使用地效率。

梯度消失問題

那LS-GAN是否也能解決經典GAN中的梯度消失問題呢?即當它的L-函式被充分訓練後,是否對應的G-網路訓練目標仍然可以提供足夠的梯度資訊呢?

我們回顧下,在WGAN裡,其作者給出G-網路的訓練梯度,並證明了這種梯度在對應的f-函式被充分優化後,仍然存在。

不過,僅僅梯度存在這點並不能保證WGAN可以提供足夠的梯度資訊訓練 G-網路。為了說明WGAN可以解決梯度消失問題,WGAN的作者宣稱:“G-網路的訓練目標函式”在對其網路連結權重做限定後, 是接近或者最多線性的。這樣就可以避免訓練目標函式飽和,從而保證其能夠提供充足的梯度訓練G-網路。


好了,問題的關鍵時為什麼G-網路的訓練目標函式是接近或者最多線性的,這點WGAN裡並沒有給出定量的分析,而只有大致的定性描述,這裡我們引用如下:

現在,讓我們回到LS-GAN,看看如何給出一直定量的形式化的分析。在LS-GAN裡,我們給出了最優的L-函式的一種非引數化的解

這個定理比較長,簡單的來說,就是所有的最優 L-GAN的解,都是在兩個分段線性的上界和下界L-函式之間。如下圖所示:


紅線是上界,綠線是下界。任何解出來最優L-函式,一定在這兩個分段線性的上下界之間,包括用一個深度網路解出來L-函式。

也就是說,LS-GAN解出的結果,只要上下界不飽和,它的得到的L-函式就不會飽和。而這裡看到這個L-函式的上下界是分段線性的。這種分段線性的函式幾乎處處存在非消失的梯度,這樣適當地控制L-函式地學習過程,在這兩個上下界之間地最優L-函式也不會出現飽和現象。

好了,這樣我們就給出了WGAN分析梯度消失時候,缺失的哪個定量分析了。

最後,我們看看LS-GAN合成影象的例子,以及和DCGAN的對比。

看看在CelebA上的結果:

如果我們把DCGAN和LS-GAN中Batch Normalization 層都去掉,我們可以看到DCGAN模型取崩潰,如果我們把DCGAN和LS-GAN中Batch Normalization 層都去掉,我們可以看到DCGAN模型取崩潰,而LS-GAN仍然可以得到非常好的合成效果 不僅如此,LS-GAN在去掉batch normalization後,如上圖(b)所示,不僅如此,LS-GAN在去掉batch normalization後,如上圖(b)所示,也沒有看到任何mode collapse現象

我們進一步通過實驗看看、在LS-GAN中L-函式網路過訓練後,模型還能不能提供足夠的梯度來訓練G-網路。

下圖是L-網路每次都訓練,而G-網路每個1次、3次、5次才訓練時,對應的用來更新G-網路的梯度大小(在log scale上):

我們可以看到:即便當L-網路相對G-網路多訓練若干次後,更新G-網路的梯度仍然充分大,而我們可以看到:即便當L-網路相對G-網路多訓練若干次後,更新G-網路的梯度仍然充分大,而沒有出現梯度消失的問題。

不僅如此,隨著訓練的進行,我們可以看到,G-網路的梯度逐漸增大,一直到一個相對比較穩定的水平。相對固定強度的梯度說明了,G-網路的訓練目標函式,最終非常可能是達到一個接近線性的函式(這是因為線性函式的梯度是固定的)。

這個也進一步說明了,LS-GAN定義的G-網路的訓練目標函式沒有發生飽和,其定義是合理的,也是足以避免梯度消失問題的。

對LS-GAN進行有監督和半監督的推廣

LS-GAN和GAN一樣,本身是一種無監督的學習演算法。LS-GAN的另一個突出優點是,通過定義適當的損失函式,它可以非常容易的推廣到有監督和半監督的學習問題。

比如,我們可以定義一個有條件的損失函式L_\theta(\mathbf x, y),這個條件y可以是輸入樣本\mathbf x的類別。當類別和樣本一致的時候,這個損失函式會比類別不一致的時候小。

於是,我們可以得到如下的Conditional LS-GAN (CLS-GAN)

這樣,一旦得到損失函式L_\theta(\mathbf x, y),在給定一個樣本x後,我們可以用最小化損失函式的那個類別來對樣本進行分類,即

我們可以看看在MNIST, CIFAR-10和SVHN上,針對不同類別給出的合成影象的效果:

半監督的訓練是需要使用完全標註的訓練資料集。當已標註的資料樣本比較有限時,會使得訓練相應模型比較困難。

進一步,我們可以把CLS-GAN推廣到半監督的情形,即把已標記資料和未標記資料聯合起來使用,利用未標記資料提供的相關分佈資訊來指導資料的分類。

為此,我們定義一個特別的半監督的損失函式:

對給定樣本對給定樣本x,我們不知道它的具體類別,所以我們在所有可能的類別上對損失函式取最小,作為對該樣本真實類別的一個最佳的猜測。這與上面的公式(7)是一致的。

這樣,我們可以相應的推廣CLS-GAN,得到如下的訓練目標 最優化損失函式

該訓練目標可以通過挖掘各個類別中可能的變化,幫助CLS-GAN模型合成某類中的更多的“新”的樣本,來豐富訓練資料集。這樣,即便標註的資料集比較有限,通過那些合成出來已標記資料,也可以有效的訓練模型。該訓練目標可以通過挖掘各個類別中可能的變化,幫助CLS-GAN模型合成某類中的更多的“新”的樣本,來豐富訓練資料集。這樣,即便標註的資料集比較有限,通過那些合成出來已標記資料,也可以有效的訓練模型。

比如,在下面圖中,CLS-GAN模型通過對未標記MNIST資料進行分析,可以按類別合成出更多不同書寫風格的數字。

這些數字可以增加已標註的訓練資料量,進一步提供模型準確度;而更準確的模型可以進一步提供CLS-GAN的合成影象的準確性。通過這種彼此不斷的提高,半監督的CLS-GAN在只有很少已標註訓練資料下,仍然可以做到準確的分類。這些數字可以增加已標註的訓練資料量,進一步提供模型準確度;而更準確的模型可以進一步提供CLS-GAN的合成影象的準確性。通過這種彼此不斷的提高,半監督的CLS-GAN在只有很少已標註訓練資料下,仍然可以做到準確的分類。

我們可以看下在SVHN上,當只有1000張已標註訓練資料時分類的準確度:

下面是在CIFAR-10上,4000張已標記資料下的分類準確度。下面是在CIFAR-10上,4000張已標記資料下的分類準確度。

結論

那麼究竟GAN,WGAN和LS-GAN誰更好呢?

持平而論,筆者認為是各有千秋。究竟誰更好,還是要在不同問題上具體分析。

這三種方法只是提供了一個大體的框架,對於不同的具體研究物件(影象、視訊、文字等)、資料型別(連續、離散)、結構(序列、矩陣、張量),應用這些框架,對具體問題可以做出很多不同的新模型。

當然,在具體實現時,也有非常多的要考慮的細節,這些對不同方法的效果都會起到很大的影響。畢竟,細節是魔鬼

筆者在實現LS-GAN也很多的具體細緻的問題要克服。一直到現在,我們還在不斷持續的完善相關程式碼。

對LS-GAN有興趣的讀者,可以參看我們分享的程式碼,並提出改進的建議。 

對研究GAN感興趣的讀者,也歡迎聯絡筆者: [email protected],一起探討相關演算法、理論。

最後,歡迎大家訪問我的個人主頁,我們會分享更多的研究資訊


文章轉自:https://zhuanlan.zhihu.com/p/25204020