VAE 變分自編碼器

VAE

學習+整理
來源:
https://www.spaces.ac.cn/archives/5253
https://www.cnblogs.com/blogofnickchen/p/7221641.html

分佈變換

VAE和GAN它們兩個的目標基本是一致的——希望構建一個從隱變量Z生成目標數據X的模型,但是實現上有所不同。更準確地講,它們是假設了Z服從某些常見的分佈(比如正態分佈或均勻分佈),然後希望訓練一個模型X=g(Z)X=g(Z),這個模型能夠將原來的概率分佈映射到訓練集的概率分佈,也就是說,它們的目的都是進行分佈之間的變換。

VAE 變分自編碼器

首先我們有一批數據樣本X1,,Xn{X1,…,Xn},其整體用XX來描述,我們本想根據X1,,Xn{X1,…,Xn}得到XX的分佈p(X)p(X),如果能得到的話,那我直接根據p(X)p(X)來採樣,就可以得到所有可能的XX了(包括{X1,…,Xn}{X1,…,Xn}以外的),這是一個終極理想的生成模型了。當然,這個理想很難實現,於是我們將分佈改一改

p(X)=zp(XZ)p(Z)p(X) = \sum_zp(X|Z)p(Z)

這裏我們就不區分求和還是求積分了,意思對了就行。此時p(XZ)p(X|Z)就描述了一個由Z來生成X的模型,而我們假設Z服從標準正態分佈,也就是p(Z)=N(0,1)p(Z) = N(0, 1)。如果這個理想能實現,那麼我們就可以先從標準正態分佈中採樣一個Z,然後根據Z來算一個X,也是一個很棒的生成模型。接下來就是結合自編碼器來實現重構,保證有效信息沒有丟失,再加上一系列的推導,最後把模型實現。

在整個VAE模型中,我們並沒有去使用p(Z)p(Z)(隱變量空間的分佈)是正態分佈的假設,我們用的是假設p(ZX)p(Z|X)(後驗分佈)是正態分佈!!

具體來說,給定一個真實樣本Xk,我們假設存在一個專屬於Xk的分佈p(Z|Xk)(學名叫後驗分佈),並進一步假設這個分佈是(獨立的、多元的)正態分佈。爲什麼要強調“專屬”呢?因爲我們後面要訓練一個生成器X=g(Z),希望能夠把從分佈p(Z|Xk)採樣出來的一個Zk還原爲Xk。如果假設p(Z)是正態分佈,然後從p(Z)中採樣Z,那麼我們怎麼知道這個Z對應於哪個真實的X呢?現在p(Z|Xk)專屬於Xk,我們有理由說從這個分佈採樣出來的Z應該要還原到Xk中去。

這時候每一個Xk都配上了一個專屬的正態分佈,才方便後面的生成器做還原。但這樣有多少個X就有多少個正態分佈了。我們知道正態分佈有兩組參數:均值μ和方差σ2(多元的話,它們都是向量)。用神經網絡來擬合出專屬於Xk的正態分佈p(Z|Xk)的均值和方差!

構建兩個神經網絡μk=f1(Xk),logσ2=f2(Xk)\mu_k = f_1(X_k), \log\sigma^2 = f_2(X_k)來算它們。選擇擬合logσ2\log\sigma^2而不是直接擬合σ2\sigma^2,是因爲σ2\sigma^2總是非負的,需要加激活函數處理,而擬合logσ2\log\sigma^2不需要加激活函數,因爲它可正可負。

最小化D(Xk^,Xk)2D(\hat{X_k}, X_k)^2

在這裏插入圖片描述

分佈標準化

最小化D(Xk^,Xk)2D(\hat{X_k}, X_k)^2會使方差爲0,方差爲零就等於沒有噪聲了。VAE讓所有的都向標準正態分佈看齊,防止噪聲爲零,保證模型具有生成能力。方法是在重構誤差的基礎上加入額外的loss:

Lμ=f1(Xk)2Lσ2=f2(Xk)2和L_{\mu} = ||f_1(X_k)||^2 和 L_{\sigma^2} = ||f_2(X_k)||^2

因爲它們分別代表了均值和方差的對數,達到標準分佈就是希望它們儘量接近於0。對於這個兩個損失的比例怎麼選取,原論文直接算一般(各分量獨立的)正態分佈與標準正態分佈的KL散度KL(N(μ,σ2)N(0,1))KL(N(\mu, \sigma^2)||N(0, 1))作爲這個額外的loss。

KL散度 Kullback-Leibler Divergence

在統計應用中,我們經常需要用一個簡單的,近似的概率分佈ff^∗來描述
觀察數據 D 或者另一個複雜的概率分佈f。這個時候,我們需要一個量來衡量我們選擇的近似分佈ff^∗相比原分佈f究竟損失了多少信息量,這就是KL散度起作用的地方。

一個概率分佈對應的熵的表達: H=i=1Np(xi)logp(xi)H = -\sum_{i=1}^Np(x_i)\cdot \log p(x_i)

在Variational Inference中,我們希望能夠找到一個相對簡單好算的概率分佈q,使它儘可能地近似我們待分析的後驗概率p(z|x),其中z是隱變量,x是顯變量。在這裏我們的“loss函數”就是KL散度,他可以很好地測量兩個概率分佈之間的距離。如果兩個分佈越接近,那麼KL散度越小,如果越遠,KL散度就會越大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章