---
# System prepended metadata

title: VAE detail

---

# VAE detail
在training階段學習到p(z), 也就是prior
後於使用model時，從p(x) mapping 到p(z), 再由prior mapping 出x'。

下述三個機率先置知識，放在另一個hackmd內：
Maximum Likelihood Estimation(MLE)
Maximum a Posterior(MAP)
Marginal Likelihood
https://hackmd.io/5gu5SPJzR1qJvOVZ_mMSHg

## VAE main
現在輸入樣本x，VAE目的是將其透過encoder輸出低維隱藏分布p(z)的平均值向量及標準差向量以代表p(z)，再將p(z)透過decoder試圖還原出x

首先我們有sample x，想找出其prior p(z)
$p_\theta (x,z)=p_\theta (x|z)p(z)$
theta為母數，在模型中是block內的node參數
所以我們知道
$p(x)=\int p_\theta (x,z)dz=\int p_\theta (x|z)p(z)dz$
上式是decoder在做的事
因為我們想讓encoder的輸出為機率分布，所以他的表示只有mean向量及std向量，又其為哪種機率分布我們也不會知道，是由向量中這些mean及std做出的高斯分布疊加成的，所以又稱z為隱藏分布。
![](https://i.imgur.com/ShxhY6y.png)

在過程中，我們會先設x1,x2,...,xn的資料點之間為獨立關係，取log才分得開來
$logp_\theta (x1,x2,...,xn)=\sum logp_\theta (xi)$
$logp(x)=\mathbb{E}_{q_\phi (z|x)}[logp(x)]=\int _zq(z|x)logp(x)dz=\int _zq(z|x)log(p(z,x)/p(z|x))dz$
$=\int _zq(z|x)log(\frac{p(z,x)}{q(z|x)}\frac{q(z|x)}{p(z|x)})dz=\int _zq(z|x)log(\frac{p(z,x)}{q(z|x)})dz+\int _zq(z|x)log(\frac{q(z|x)}{p(z|x)})dz$
末兩項，後者$\int _zq(z|x)log(\frac{q(z|x)}{p(z|x)})dz$為KL divergence，記做$D_{KL}(q(z|x)||p(z|x))$，為正數，可以介定$q(z|x)$與$p(z|x)$的相似程度，當其趨近於零時，模型即收斂
q(z|x)是我們做出來的機率分布，p(z|x)為實際情況的posterior

前者$\int _zq(z|x)log(\frac{p(z,x)}{q(z|x)})dz=\int _zq(z|x)log(\frac{p(x|z)p(z)}{q(z|x)})dz$叫做lower bound
我們知道：
$p(z|x)=\frac{p(x|z)p(z)}{p(x)}$
也就是
$p(x)=\frac{p(x|z)p(z)}{p(z|x)}$
同取log再取z的期望值就跟lower bound很像，差異在於$q(z|x)$與$p(z|x)$，所以lower bound越大，也是在說明model的收斂程度

有了上面這些，我們就能訓練一個model，使其可以做出一q(z)，讓KL divergence收斂到趨近於0後就可以代表prior p(z)，從而可以重建出x

![](https://i.imgur.com/eyD9w4u.png)
