# 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)