變分自編碼器(VAE:Auto-Encoding Variational Bayes)


代碼實現: 基於tensorflow2.2實現,代碼見github

參考文獻
1. Auto-Encoding Variational Bayes
2. 變分自編碼器VAE:原來是這麼一回事 | 附開源代碼


基於潛變量的生成模型

模型聯合概率分佈可表示爲pθ(x,z)=pθ(xz)pθ(z)p_{\bm\theta}(\bm x,\bm z)=p_\bm\theta(\bm x|\bm z)p_\bm \theta(\bm z),模型的生成過程爲
zpθ(z)    xpθ(xz) \bm z\sim p_\bm \theta(\bm z) \implies \bm x\sim p_\bm \theta(\bm x|\bm z)
考慮一個獨立同分布數據集X={x(i)}i=1NX=\{\bm x^{(i)}\}_{i=1}^N,我們假設數據的生成過程爲:

  • 基於先驗分佈pθ(z)p_\bm \theta(\bm z)生成隨機變量z\bm z
  • 基於條件概率分pθ(xz)p_\bm \theta(\bm x|\bm z)生成樣本x\bm x

然而,我們很難獲取因變量z\bm z的分佈,如先驗概率分佈pθ(zx)=pθ(xz)pθ(z)/pθ(x)p_\bm \theta(\bm z|\bm x)=p_\bm \theta(\bm x|\bm z)p_\bm \theta(\bm z)/p_\bm \theta(\bm x)難以計算。

使用後驗概率分佈qϕ(zx)q_\bm \phi(\bm z|\bm x)作爲真實後驗概率分佈pθ(zx)p_\bm \theta(\bm z|\bm x)的近似,將qϕ(zx)q_\bm \phi(\bm z|\bm x)可作爲編碼器,即給定樣本x\bm x下,生成包含所有可能的編碼z\bm z,並可通過編碼z\bm z重新生成樣本x\bm x。同樣地,將pθ(xz)p_\bm \theta(\bm x|\bm z)作爲解碼器,即給定編碼z\bm z,生成與x\bm x對應的分佈。

再看一下,傳統高斯混合模型的生成思想:

p(x)=zp(z)p(xz) p(x)=\sum_zp(z)p(x|z)
式中p(z)N(0,I)p(z)\sim\mathcal N(0, I)p(xz)N(μ(z),σ(z))p(x|z)\sim\mathcal N(\mu(z),\sigma(z))

我們從標準正太分佈中採樣一個zz,再根據zz計算對應各高斯混合基模型的均值和方差,就可以利用高斯混合模型生成xx。但是這種模型顯然沒有利用到監督樣本數據,即如何將採樣zz對應到xx?模型的損失函數是什麼?

VAE的思想是,每個樣本都有自己特定的正太分佈q(zx)q(z|x),我們有理由學習一個解碼器/生成器,把從特定正太分佈採樣的zz還原爲xx 我們可從特定分佈q(zx)q(z|x)中隨機採樣,生成各式各樣與xx類似的樣本,爲了使模型具備通用生成能力(不根據真實樣本),我們希望所有的q(zx)q(z|x)都近似於標準正太分佈,這樣我們就可以從標準正太分佈中採樣,生成隨機樣本。


變分邊界與目標函數

獨立同分布數據集對數似然爲
logpθ(x(1),,x(N))=xlogpθ(x) \log p_\bm \theta(\bm x^{(1)},\cdots,\bm x^{(N)})=\sum_\bm x\log p_\bm \theta(\bm x)

對於單個樣本
logpθ(x)=zqϕ(zx)logpθ(x)dz=zqϕ(zx)log(pθ(z,x)qϕ(zx)qϕ(zx)pθ(zx))dz=zqϕ(zx)log(pθ(xz)pθ(z)qϕ(zx))dz+zqϕ(zx)log(qϕ(zx)pθ(zx))dz=Lb+DKL(qϕ(zx)pθ(zx))=DKL(qϕ(zx)pθ(z))+Eqϕ(zx)[logpθ(xz)]+DKL(qϕ(zx)pθ(zx)) \begin{aligned} \log p_\bm \theta(\bm x) &=\int_\bm zq_\bm \phi(\bm z|\bm x)\log p_\bm \theta(\bm x)\text d\bm z\\[2ex] &=\int_\bm zq_\bm \phi(\bm z|\bm x)\log\left(\frac{p_\bm \theta(\bm z,\bm x)}{q_\bm \phi(\bm z|\bm x)}\frac{q_\bm \phi(\bm z|\bm x)}{p_\bm \theta(\bm z|\bm x)}\right)\text d\bm z\\[2ex] &=\int_\bm zq_\bm \phi(\bm z|\bm x)\log\left(\frac{p_\bm \theta(\bm x|\bm z)p_\bm \theta(\bm z)}{q_\bm \phi(\bm z|\bm x)}\right)\text d\bm z + \int_\bm zq_\bm \phi(\bm z|\bm x)\log\left(\frac{q_\bm \phi(\bm z|\bm x)}{p_\bm \theta(\bm z|\bm x)}\right)\text d\bm z\\[2ex] &=L_b+D_{KL}\Big(q_\bm \phi(\bm z|\bm x)\big|\big|p_\bm \theta(\bm z|\bm x)\Big)\\[2ex] &=-D_{KL}\Big(q_\bm \phi(\bm z|\bm x)\big|\big|p_\bm \theta(\bm z)\Big)+\Bbb E_{q_\bm \phi(\bm z|\bm x)}[\log p_\bm \theta(\bm x|\bm z)]+D_{KL}\Big(q_\bm \phi(\bm z|\bm x)\big|\big|p_\bm \theta(\bm z|\bm x)\Big) \end{aligned}
因爲KL散度爲不小於0的距離度量,因此LbL_b爲目標函數下界。因爲目標函數值與qϕ(zx)q_\bm\phi(\bm z|\bm x)無關,調整qϕ(zx)q_\bm\phi(\bm z|\bm x)最大化LbL_b,目標函數值不改變,但目標函數第二項KL散度趨近於0,若繼續調整pθ(xz)p_\bm\theta(\bm x|\bm z)以最大化LbL_b,則目標函數值很有可能增加。因此,最大化目標函數的下界LbL_b即可,第三項KL散度可忽略


VAE模型結構

訓練過程中,編碼器爲每個樣本x\bm x生成對應正太分佈的均值和方差,表示樣本來自於N(μ(z),σ(z))\mathcal N(\mu(z),\sigma(z)),解碼器將從N\mathcal N中的採樣,重構回對應的樣本x\bm x

同一樣本在不同mini-batch中對應不同的分佈,模型爲了更好重構,傾向於將編碼器輸出方差至爲0,這樣就喪失了隨機性,即模型喪失樣本生成能力,退化爲普通的AutoEncoder。因此,VAE約束所有編碼向量服從標準正太分佈,從而防止噪聲爲零。

由於
DKL(N(μ,σ2N(0,1)))=12(logσ2μ2σ2+1) -D_{KL}\Big(\mathcal N(\mu, \sigma^2\big|\big|\mathcal N(0, 1))\Big)=\frac{1}{2}\Big(\log\sigma^2-\mu^2-\sigma^2+1\Big)
如果,我們強制令pθ(z)p_\theta(z)服從標準正太分佈,最大化目標函數等價於最大化
12(logσ2+μ2+σ21)+Eqϕ(zx)[logpθ(xz)] \frac{1}{2}\Big(-\log\sigma^2+\mu^2+\sigma^2-1\Big)+\Bbb E_{q_\bm \phi(\bm z|\bm x)}[\log p_\bm \theta(\bm x|\bm z)]

其中,第一項爲 正則化損失,它有助於學習具有良好結構的潛在空間;第二項爲 重構損失,它迫使解碼後的樣本匹配初始輸入,如mnist數據集規範化爲[0, 1]區間,解碼器使用sigmoid輸出,則此項爲交叉熵。


此外,採樣操作不可導,模型實現使用 重參數技巧
ϵN(0,1)    μ+ϵ×σN(μ,σ2) \epsilon\sim\mathcal N(0, 1) \implies \mu+\epsilon\times \sigma \sim\mathcal N(\mu,\sigma^2)
根據編碼器生成樣本的均值和方差,但是我們不能直接生成對應的正太分佈,再從中採樣作爲編碼器輸出,因爲採樣過程不可導。換種思路,從標準正太分佈中採樣數據(作爲樣本數據不參與求導),根據編碼器輸出將其變換到對應的正太分佈,再作爲編碼器輸出。

神經網絡實現VAE

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