在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將潛在屬性儲存為機率分佈。
變分自編碼器(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也有缺點:
基於流的生成模型是精確的對數似然模型,有易處理的取樣和潛在變數推理。基於流的模型將一堆可逆變換應用於來自先驗的樣本,以便可以計算觀察值的精確對數似然。與前兩種演算法不同,該模型明確地學習資料分佈,因此損失函數是負對數似然。
在非線性獨立分量分析中,流模型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是可逆且高效的,但不能並行計算。我們可以根據這些特性,在實際使用時根據產出、訓練過程和效率之間進行權衡選擇。
以上是生成模型VAE、GAN和基於流的模型詳細對比的詳細內容。更多資訊請關注PHP中文網其他相關文章!