轉自:http://www.gwylab.com/note-vae.html
1.VAE模型架構
損失函數方面,除了必要的重構損失外,VAE還增添了一個損失函數(見上圖Minimize2內容),這同樣是必要的部分,因為如果不加的話,
整個模型就會出現問題:為了保證生成圖片的質量越高,編碼器肯定希望噪音對自身生成圖片的干擾越小,於是分配給噪音的權重越小,這樣只需要將(σ1, σ2, σ3)賦為接近負無窮大的值就好了。(那么在ci中,第一項就為0了,就退化為了自編碼器。)
所以,第二個損失函數就有限制編碼器走這樣極端路徑的作用(如果此時再賦值 為負無窮大,那么第二項就為正無窮大,但是總體是要minimize它的,所以不會使得σ負無窮大了),這也從直觀上就能看出來,處取得最小值(但是σ實際上不會是0的),於是(σ1, σ2, σ3)就會避免被賦值為負無窮大。
2.作用原理
對於生成模型而言,主流的理論模型可以分為隱馬爾可夫模型HMM、朴素貝葉斯模型NB和高斯混合模型GMM,而VAE的理論基礎就是高斯混合模型。
什么是高斯混合模型呢?就是說,任何一個數據的分布,都可以看作是若干高斯分布的疊加。
如果P(X)代表一種分布的話,存在一種拆分方法能讓它表示成圖中若干淺藍色曲線對應的高斯分布的疊加。有意思的是,這種拆分方法已經證明出,當拆分的數量達到512時,其疊加的分布相對於原始分布而言,誤差是非常非常小的了。
那么對於離散值來說:
m代表着編碼維度上的編號,譬如實現一個512維的編碼,m的取值范圍就是1,2,3……512。m會服從於一個概率分布P(m)(多項式分布)。
m表示每一個樣本屬於一個高斯分布的概率吧,m也服從一個上述的多項式的概率分布,那么總的px就可以表示為這些分布的疊加。
現在編碼的對應關系是,每采樣一個m,其對應到一個小的高斯分布,P(X)就可以等價為所有的這些高斯分布的疊加,即上圖中黃色部分。
那么這個是針對連續的,z相當於m,z不是多項式分布,而是一個高斯分布。那么求和變為了求積分。
3.演進模型
https://zhuanlan.zhihu.com/p/68903857,講了個大概,可以看看。
4. 后驗坍縮
https://datascience.stackexchange.com/questions/48962/what-is-posterior-collapse-phenomenon
the model ends up relying solely on the auto-regressive properties of the decoder while
ignoring the latent variables, which become uninformative. 該模型最終僅依賴於解碼器的自回歸屬性,而忽略了潛在變量,這些變量變得無用。
當后驗沒有坍縮的時候,每個維度都是從對應的輸入的μ和σ采樣的,即編碼器仍能從x中學習到有用的信息μ和σ。
如果是坍縮的話,那么對任意的x都有相同的μ和σ,這里表示為了常數a、b,每次生成的x也都很相似,也就是z不具有從每個x中學習到的特異性了。
5.為什么VAE隱空間要選正態分布作為先驗?
https://www.zhihu.com/question/359919018
重采樣中的z就是服從正態分布,而正態分布的分布方差低,計算簡單,。。先這么理解吧。
在這里,p是標准正態分布。
https://zhuanlan.zhihu.com/p/34998569
選定Z服從標准正態分布是為了給Z添加約束,而標准正態分布就可以看為是為了省事,而且實驗發現因為它有效。
正態分布中又正好有均值和方差,分別用來重構和添加噪聲,以免退化為AE。
重構就是為了模型編碼能生成均值為0的Z,讓它學習到的0均值。而σ方差就是為了添加接近1的噪聲,即KL散度。
損失函數=重構loss+KL散度,一開始重構比較大,主要降低第一項,那么第二項就會相對升高,不用服從正態分布,主要管理均值而不管方差了。
隨着訓練進行,重構損失下降,KL相對來說上升,在均值降低的同時增大方差,就能夠學習到每個樣本特征,而不是學一個普遍特征。