參考:
https://www.cnblogs.com/huangshiyu13/p/6209016.html
https://zhuanlan.zhihu.com/p/25401928
https://blog.csdn.net/ustbfym/article/details/78870990
https://blog.csdn.net/StreamRock/article/details/81258543
https://blog.csdn.net/weixin_40955254/article/details/82315224
https://blog.csdn.net/weixin_40955254/article/details/82315909
Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013)
簡介:
變分自編碼器(Variational auto-encoder,VAE)是一類重要的生成模型(generative model),它於2013年由Diederik P.Kingma和Max Welling提出。
這里有一些使用VAE好處,就是我們可以通過編碼解碼的步驟,直接比較重建圖片和原始圖片的差異,但是GAN做不到。
假設,給定一系列貓的照片,我希望你能夠對應我隨機輸入的一個n維向量,生成一張新的貓的照片,你需要怎么去做?對於GAN就是典型的深度學習時代的邏輯,你不是不清楚這個n維向量與貓的圖片之間的關系嘛,沒關系,我直接擬合出來貓的圖片對於n維向量的分布,通過對抗學習的方式獲得較好的模型效果,這個方法雖然很暴力,但是卻是有效的。
VAE則不同,他通過說我希望生成一張新的貓臉,那么這個n維向量代表的就是n個決定最終貓臉模樣的隱形因素。對於每個因素,都對應產生一種分布,從這些分布關系中進行采樣,那么我就可以通過一個深度網絡恢復出最終的貓臉。VAE相比較於GAN它的效果往往會略微模糊一點,但是也不失為一種良好的解決方案。
問題背景:
首先我們有一批數據樣本 {x1,…,xn},其整體用 X 來描述,我們本想根據 {x1,…,xn} 得到 X 的分布 p(X),如果能得到的話,那我直接根據 p(X) 來采樣,就可以得到所有可能的 X 了(包括 {x1,…,xn} 以外的),這是一個終極理想的生成模型了。但是,這個過程往往是很困難的。
於是,我們退而求其次,就想到了上文中提到的隱形變量z,這個z就是決定最終x形態的因素向量。給定一個圖片Xk,我們假定p(z|xk)是專屬於xk的后驗概率分布,這個概率分布服從正態分布。得到了這個概率,我們可以從分布中采樣,並且通過最終的解碼器將圖片再恢復出來。
由於上述所說,我們所假設的這些分布都是正態分布,那么我們就需要求得相應的方差和均值,所以在編碼實現的過程中,不難看到encoder部分真實做的事情就是,對相應的輸入數據,通過兩個網絡產生了均值和方差。
是一個包含了N個連續或者離散樣本x的數據集。
假設數據是通過涉及到一個未觀察到的連續隨機變量z的過程產生的,這個過程包含了兩步。
(1)通過某個先驗分布 產生一個
;
(2)根據某個條件分布 產生樣本
。
假設 和
產生自分布
,如何得到
和
是一個未知的難題。文章中用
作為編碼器/識別模型(encoder or recognition model),基於數據x產生一個關於數據x的編碼值z的分布。
作為解碼器/生成模型(decoder or generative decoder),基於編碼值z產生一個對應數據x的分布。其中φ和θ的值通過兩者的聯合學習得到。
模型推導:
等價於
最大似然估計(maximum likelihood estimation, MLE):一種重要而普遍的求估計量的方法。MLE的目標是找出一組參數,使得模型產生出觀測數據的概率最大。
KL散度:相對熵(relative entropy),又被稱為Kullback-Leibler散度(Kullback-Leibler divergence)或信息散度(information divergence),是兩個概率分布(probability distribution)間差異的非對稱性度量。在在信息理論中,相對熵等價於兩個概率分布的信息熵(Shannon entropy)的差值。
蒙特卡羅估計(Monte Carlo estimate):
證明:
MLP(多層感知器):
VAE的encoder和decoder都只用了一層隱含層。
近似計算的證明:
表示元素乘法;按照高斯分布求解KL散度即可得到結果。
由上圖可知,最后的loss可由藍色的兩項組成,前一項為KL散度(計算方式見最后),反應與真實分布的距離;后一項為重建損失,可由交叉熵體現。
訓練好了以后,生成樣本采用下面的網絡結構: