GAN的前身——VAE模型
今天跟大家說一說VAE模型相關的原理,首先我們從判別模型和生成模型定義開始說起:
判別式模型:已知觀察變量X和隱含變量z,它對p(z|X)進行建模,它根據輸入的觀察變量X得到隱含變量z出現的可能性。
在圖像模型中,比如根據原始圖像推測圖像具備的一些性質,例如根據數字圖像推測數字的名稱等等圖像分類問題。
生成式模型:與判別式模型相反,它對p(X|z)進行建模,輸入變量是隱含變量,輸出是觀察變量的概率。
在圖像中,通常是輸入圖像具備的性質,輸出是性質對應的圖像。
生成式模型通常用於解決如下問題:
1.構建高維、復雜概率分布,2.數據缺失,3.多模態輸出,4.真實輸出模型,5.未來數據預測,等系列問題
VAE
在經典的自編碼機中,編碼網絡把原始圖像編碼卷積成向量,解碼網絡則能夠將向量解碼成原始圖像,通過使用盡可能多的圖像來訓練網絡,如果保存了某張圖像的編碼向量,那么就能夠隨時用解碼組建來重建該圖像。
那么,問題就來了,潛在向量除了從已有圖像中編碼得到,能否憑空創造出這些潛在的向量來呢? 我們可以這樣做,在編碼網絡中,增加一個約束,使得編碼網絡所生成的潛在向量大體上服從單位高斯分布。那么,解碼器經過訓練之后,能是能夠解碼服從單位高斯分布的解碼器了,於是我們只需要從單位高斯分布中菜樣出一個潛在向量,並將其傳到解碼器中即可。
在VAE中,假定認為輸入數據的數據集D(顯示變量)的分布完全有一組隱變量z操控,而這組隱變量之間相互獨立而且服從高斯分布,那么VAE讓encoder去學習輸入數據的隱變量模型,也就是去學習這組隱變量的高斯概率分布的參數均值和方差,而隱變量z就可以從這組分布參數的正態分布中采樣得到z~N,再通過decoder對z隱變量進行解碼來重構輸入,本質上是實現了連續的,平滑的潛在空間表示。
對於目標函數,誤差項精度與潛在變量在單位高斯分布上的契合程度,包括兩部分的內容:1、生成誤差,用以衡量網絡在重構圖像精度的均方誤差,2、潛在誤差,用以衡量潛在變量在單位高斯分布上契合程度的KL散度,總的目標函數如下:
假設現在有一個樣本集中兩個概率分布p,q,其中p為真實分布,q為非真實分布,那么,按照真實分布p來衡量識別一個樣本所需的編碼長度的期望為:
如果采用錯誤的分布q來表示來自真實分布p的平均編碼長度,則應該是:
此時,就將H(p,q)稱之為交叉熵。
對於KL散度,又稱為相對熵,就是兩個概率分布P和Q差別的非對稱性度量。典型情況下,P表示數據的真實分布,Q表示數據的理論分布,那么D(P||Q)的計算如下:
KL散度不是對稱的,並不滿足距離的性質,即D(P||Q) != D(Q||P)。為了解決對稱問題,我們引入JS散度。
JS散度度量了兩個概率分布的相似度,基於KL散度的變體,解決了KL散度的非對稱的問題,一般的,JS散度是對稱的,其取值是0到1之間,計算如下:
明白了度量之后,在VAE模型中並沒有真正的用z~N來采樣得到z變量,因為采樣之后,無法進行求導。其做法是先采樣一個標准高斯分布(正態分布),然后通過變換得到z~N分布,這樣就能夠對參數進行正常的求導計算了:
VAE遵循 編碼-解碼 的模式,能直接把生成的圖像同原始圖像進行對比,不足的是由於它是直接均方誤差,其神經網絡傾向於生成模糊的圖像。