生成模型VAE、GAN和基于流的模型詳細對比
在Ian Goodfellow和其他研究人員在一篇論文中介紹生成對抗網絡兩年后,Yann LeCun稱對抗訓練是“過去十年里ML最有趣的想法”。盡管GANs很有趣,也很有前途,但它只是生成模型家族的一部分,是從完全不同的角度解決傳統AI問題,在本文中我們將對比常見的三種生成模型。
生成算法
當我們想到機器學習時,首先想到的可能是鑒別算法。判別模型是根據輸入數據的特征對其標簽或類別進行預測,是所有分類和預測解決方案的核心。與這些模型相比生成算法幫助我們講述關于數據的故事并提供數據是如何生成的可能解釋,與判別算法所做的將特征映射到標簽不同,生成模型試圖預測給定標簽的特征。
區別模型定義的標簽y和特征x之間的關系,生成模型回答“你如何得到y”的問題。而生成模型模型則是P(Observation/Cause),然后使用貝葉斯定理計算P(Cause/Observation)。通過這種方式,他們可以捕獲p(x|y), x給定y的概率,或者給定標簽或類別的特征的概率。所以實際上,生成算法也是可以用作分類器的,這可能是因為它們對各個類的分布進行了建模。
生成算法有很多,但屬于深度生成模型類別的最流行的模型是變分自動編碼器(VAE)、gan和基于流的模型。
VAE
變分自編碼器(VAE)是一種生成模型,它“提供潛在空間中觀察結果的概率描述”。簡單地說,這意味著vae將潛在屬性存儲為概率分布。
變分自編碼器(Kingma & Welling, 2014)或VAE的思想深深植根于變分貝葉斯和圖形模型方法。
標準的自動編碼器包括2個相似的網絡,一個編碼器和一個解碼器。編碼器接受輸入并將其轉換為更小的表示形式,解碼器可以使用該表示形式將其轉換回原始輸入。它們將輸入轉換到的潛在空間以及它們的編碼向量所在的空間可能不是連續。這對于生成模型來說是一個問題,因為我們都希望從潛在空間中隨機采樣,或者從連續潛在空間中生成輸入圖像的變化。
而變分自編碼器具有連續的潛在空間,這樣可以使隨機采樣和插值更加方便。為了實現這一點,編碼器的隱藏節點不輸出編碼向量,而是輸出兩個大小相同的向量:一個均值向量和一個標準差向量。每一個隱藏的節點都認為自己是高斯分布的。這里的均值和標準差向量的第i個元素對應第i個隨機變量的均值和標準差值。我們從這個分布向量中采樣,解碼器從輸入向量的概率分布中隨機抽樣。這個過程就是隨機生成。這意味著即使對于相同的輸入,當平均值和標準差保持不變時,實際的編碼在每一次傳遞中都會有所不同。
自編碼器的損失是最小化重構損失(輸出與輸入的相似程度)和潛在損失(隱藏節點與正態分布的接近程度)。潛在損失越小,可以編碼的信息就越少,這樣重構損失就會增加,所以在潛在損失和重建損失之間是需要進行進行權衡的。當潛在損耗較小時,生成的圖像與訓練的的圖像會過于相似,效果較差。在重構損失小的情況下,訓練時的重構圖像效果較好,但生成的新圖像與重構圖像相差較大,所以需要找到一個好的平衡。
VAE可以處理各種類型的數據,序列的和非序列的,連續的或離散的,甚至有標簽的或無標簽的,這使它們成為非常強大的生成工具。
但是VAE的一個主要缺點是它們生成的輸出模糊。正如Dosovitskiy和Brox所指出的,VAE模型往往產生不現實的、模糊的樣本。這是由數據分布恢復和損失函數計算的方式造成的。Zhao等人在2017年的一篇論文中建議修改VAEs,不使用變分貝葉斯方法來提高輸出質量。
生成對抗的網絡
生成對抗網絡(GANs)是一種基于深度學習的生成模型,能夠生成新內容。GAN架構在2014年Ian Goodfellow等人題為“生成對抗網絡”的論文中首次被描述。
GANs采用監督學習方法,使用兩個子模型:生成新示例的生成器模型和試圖將示例分類為真實或假(生成的)的鑒別器模型。
生成器:用于從問題域生成新的似是而非例子的模型。
鑒頻器:用于將示例分類為真實的(來自領域)或假的(生成的)的模型。
這兩個模型作為競爭對手進行訓練。生成器直接產生樣本數據。它的對手鑒別器,試圖區分從訓練數據中提取的樣本和從生成器中提取的樣本。這個競爭過程在訓練中持續進行,直到鑒別器模型有一半以上的時間無法判斷真假,這意味著生成器模型正在生成非常逼真的數據。
當鑒別器成功地鑒別出真假樣本時,它會得到獎勵它的參數保持不變。如果生成器判斷錯誤則受到懲罰,更新其參數。在理想情況下,每當鑒別器不能分辨出差異并預測“不確定”(例如,50%的真假)時,生成器則能從輸入域生成完美的副本。
但是這里每個模型都可以壓倒另一個。如果鑒別器太好,它將返回非常接近0或1的值,生成器則難以獲得更新的梯度。如果生成器太好,它就會利用鑒別器的弱點導致漏報。所以這兩個神經網絡必須具有通過各自的學習速率達到的相似的“技能水平”,這也是我們常說的GAN難以訓練的原因之一。
生成器模型
生成器取一個固定長度的隨機向量作為輸入,在定義域內生成一個樣本。這個向量是從高斯分布中隨機抽取的。經過訓練后,這個多維向量空間中的點將對應于問題域中的點,形成數據分布的壓縮表示,這一步類似于VAE,這個向量空間被稱為潛在空間,或由潛在變量組成的向量空間。GAN的生成器將平均選定的潛在空間中的點。從潛在空間中提取的新點可以作為輸入提供給生成器模型,并用于生成新的和不同的輸出示例。訓練結束后,保留生成器模型,用于生成新的樣本。
鑒別器模型
鑒別器模型將一個示例作為輸入(來自訓練數據集的真實樣本或由生成器模型生成),并預測一個二進制類標簽為real或fake(已生成)。鑒別器是一個正常的(并且很容易理解的)分類模型。
訓練過程結束后,鑒別器被丟棄,因為我們感興趣的是生成器。當然鑒別器也可用于其他目的使用
GANs可以產生可行的樣本但最初版GAN也有缺點:
- 圖像是由一些任意的噪聲產生的。當生成具有特定特征的圖片時,不能確定什么初始噪聲值將生成該圖片,而是需要搜索整個分布。
- GAN只區別于“真實”和“虛假”圖像。但是沒有約束說“貓”的照片必須看起來像“貓”。因此,它可能導致生成的圖像中沒有實際的對象,但樣式看起來卻很相似。
- GANs需要很長時間來訓練。一個GAN在單個GPU上可能需要幾個小時,而單個CPU可能需要一天以上的時間。
基于流的模型
基于流的生成模型是精確的對數似然模型,有易處理的采樣和潛在變量推理。基于流的模型將一堆可逆變換應用于來自先驗的樣本,以便可以計算觀察的精確對數似然。與前兩種算法不同,該模型顯式地學習數據分布,因此損失函數是負對數似然。
在非線性獨立分量分析中,流模型f被構造為一個將高維隨機變量x映射到標準高斯潛變量z=f(x)的可逆變換。流模型設計的關鍵思想是它可以是任意的雙射函數,并且可以通過疊加各個簡單的可逆變換來形成。總結來說:流模型f是由組成一系列的可逆流動作為f(x) =f1?···?fL(x),與每個fi有一個可處理的逆和可處理的雅可比矩陣行列式。
基于流的模型有兩大類:帶有標準化流模型和帶有試圖增強基本模型性能的自回歸流的模型。
標準化流模型
對于許多機器學習問題來說,能夠進行良好的密度估計是必不可少的。但是它在本質上是復雜的:當我們需要在深度學習模型中進行反向傳播時,嵌入的概率分布需要足夠簡單,這樣才可以有效地計算導數。傳統的解決方案是在潛變量生成模型中使用高斯分布,盡管大多數現實世界的分布要復雜得多。標準化流(NF)模型,如RealNVP或Glow,提供了一個健壯的分布近似。他們通過應用一系列可逆變換函數將一個簡單的分布轉化為一個復雜的分布。通過一系列的變換,根據變量變換定理,可以反復地用新變量替換原變量,最后得到最終目標變量的概率分布。
自回歸流的模型
當標準化流中的流動變換被框定為一個自回歸模型,其中向量變量中的每個維度都處于先前維度的條件下,流模型的這種變化稱為自回歸流。與具有標準化流程的模型相比,它向前邁進了一步。
常用的自回歸流模型是用于圖像生成的PixelCNN和用于一維音頻信號的WaveNet。它們都由一堆因果卷積組成——卷積運算考慮到順序:在特定時間戳的預測只使用過去觀察到的數據。在PixelCNN中,因果卷積由一個帶掩碼的積核執行。而WaveNet將輸出通過幾個時間戳轉移到未來時間。
基于流的模型在概念上對復雜分布的建模是非常友好的,但與最先進的自回歸模型相比,它受到密度估計性能問題的限制。盡管流模型最初可能會替代GANs產生良好的輸出,但它們之間的訓練計算成本存在顯著差距,基于流的模型生成相同分辨率的圖像所需時間是GANs的幾倍。
總結
每一種算法在準確性和效率方面都有其優點和局限性。雖然GANs和基于流程的模型通常生成比VAE更好或更接近真實的圖像,但后者比基于流程的模型更具有更快時間和更好的參數效率,下面就是三個模型的對比總結:
可以看到GAN因為并行所以它的效率很高,但它并不可逆。相反,流模型是可逆的但是效率卻不高,而vae是可逆并且高效的,但不能并行計算。我們可以根據這些特性,在實際使用時根據產出、訓練過程和效率之間進行權衡選擇。