# vaeelbo **Repository Path**: ioou/vaeelbo ## Basic Information - **Project Name**: vaeelbo - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-03-03 - **Last Updated**: 2024-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ELBO 推导 ${p_{\theta}}$生成模型,有高斯假设, $q_{\phi}$ 变分模型,也等于x->z的过程。 ### VAE 这里E的分布为q为q(z|x), 换句话说,就是本来直接最大化E的生成模型$p_\theta$的置信度,但实际上,没有$p_{\theta}$这个分布,且实际采样的时候使用q分布,所以换元,将Ep换成Eq $Eq[logp(x0)] = log\frac{p(x|z)p(z)}{p(z|x)}$, $>= log\frac{p(x|z) p(z)}{q(z|x)} (+KL(q, p))$, ${\quad}$ #换元 $= log\frac{ p(z)}{q(z|x)} + log [p(x|z)] $ 加上Eq 于是有,左侧正则,右侧重建,其中z为z(x0)函数 ### DDPM 这里E的分布为q为q(x1:T|x0) $Eq[logp(x0)] = log \frac{p(x0), p(x1:T)}{p(x1:T|x0)}$, $>= log \frac{p(x0) p(x1:T)}{q(x1:T|x0)} (+KL(q, p))$, ${\quad}$ #换元 $= log[p(x0)] +log \sum_{t>1}\frac{p(xt-1|xt)}{q(xt|xt-1, x0)} + \frac{p(x0|x1)}{q(x1|x0, x0)}$, 其中第二项 $\frac{p(xt-1|xt)}{q(xt|xt-1, x0)} = \frac{p(xt-1|xt)}{q(xt|xt-1)} = \frac{p(xt-1|xt)}{q(xt-1|xt, x0)}\frac{p(xt-1|x0)}{p(xt|x0)}$, 于是有 $= log[p(xT)] +log \sum_{t>2} \frac{p(xt-1|xt)}{q(xt-1|xt, x0)}\frac{p(xt-1|x0)}{p(xt|x0)} + \frac{p(x0|x1)}{q(x1|x0)}$, $= log[\frac{p(xT)}{q(xT|x0)}] + log \sum_{t>2} \frac{p(xt-1|xt)}{q(xt-1|xt, x0)} + log[p(x0|x1)]$, 第一项正则,然而q分布没有参数,第二项为重建,也是最重要的损失函数,第三项为重建 其中q(xt-1|xt,x0)根据马尔科夫转移分布计算其后验。 q分布没有参数,x->z的过程不需要训练。 ## VAE - 何为变分: - 对泛函求极值的为题称为变分 - 隐变量模型: - 对于一个连续分布1中采样随机变量z,z为另一个连续分布2的参数,从2中采样得到x; - 观测为x时,我们想要推断出z。 - gmm为第一次采样离散,第二次采样为gaussian的隐变量模型。 - vae - 对于p(z|x),我们采用q(z)去拟合,其参数为 $\theta$ 。求最好的q(z)函数的过程称为变分。 - encoder: 根据x求得q(z|x)函数 - decoder: 根据z去采样x的分布 我们要通过采用image=x来估计p(x)的分布,使之最大, $p(x) = KL【q(z|x)|| p(z|x)】 + L$, 其中, $KL(q(z|x)|| p(z|x)$ 是我们想要优化的,使得q的分布去模拟实际分布,这个实际模型(生成模型p)使我们建模出来的,有强硬假设。则使得L最大。 $L = E_qlog\frac{p(z)p(x|z)}{q(z|x)}$, $=-KL(q(z|x), p(z)) + E_q p(x|z)$, 其中 ${p_{\theta}}$, $q_{\phi}$ p表示生成模型的参数,q表示变分的参数,(x->z)【q是encoder部分的参数】 而DM中,q也表示从x0->z,p也表示生成模型。两者的elbo形式一致。 为了使得L最大, 左侧KL项是正则项,使得q(z|x),满足正态假设; 右侧重建项,使得概率最大,$E_{q_{\theta}(z|x)}p(x|z)$ ,在x和 $\theta$ 项(也就是x->z分布函数=**encoder**)确定的情况下,多次重采样进行优化z->x(**decoder**)的采样分布函数。 如果z->x也满足高斯假设。 ## elbo 用模型预测的z的后验分布去近似实际的后验分布。两个版本都涉及到z的先验后验相似的问题。 ##### 1 原始版本 micheal jordan,这里的生硬的假设是,z的实际后验分布和x无关且各个变量之间独立。 $$ min_{q(z)} KL(q(z) ||p(z|x) ) =E_{q(z)}[log\frac{q(z)\cdot p(x)}{p(z|x)\cdot p(x)}] \\ = E_{q(z)}[log\frac{q(z) }{p(x|z)\cdot p(z)} + logp(x)] \\ = E_{q(z)}[ -logp(x|z) + log\frac{q(z) }{p(z)}]+logp(x) \\ $$ $$ 左边括号中的为ELBO = -variational ~free ~energy \\ = E_{q(z)}[log[p(x|z)] + log( \frac{p(z)} {q(z)} ] \\ = E_{q(z)}[log[p(x|z)]] - KL(q(z)||p(z)) >=左边项 $$ ##### 2 这里的假设是z模型中的后验分布和z实际的先验分布是接近的,(最后一项) $$ min_{q(z|x)} KL(q(z|x) ||p(z|x) ) =E_{q(z)}[log\frac{q(z|x)\cdot p(x)}{p(z|x)\cdot p(x)}] \ = E_{q(z|x)}[log\frac{q(z|x) }{p(x|z)\cdot p(z)} + logp(x)] \ = E_{q(z|x)}[ -logp(x|z) + log\frac{q(z|x) }{p(z)}]+logp(x) \ $$ $$ 左边括号中的为ELBO = -variational ~free ~energy \ = E_{q(z|x)}[log[p(x|z)] + log( \frac{p(z)} {q(z|x)} ] \ = E_{q(z|x)}[log[p(x|z)]] - KL(q(z|x)||p(z)) >=左边项 $$ 其中, $q(z)$ : z(latent variable)的估计先验分布。 $p(x)$ : x(Image)的经验数据分布。 $p(z)$ : z的先验分布。 $q_{\theta}(z|x)$ encoder; $p_{\phi}(x|z)$ decoder loss function 1. 对于交叉熵项(左边),为NLLoss,化简后为$(\frac{x-\mu_{x}}{ \sigma_{x}})^2$, 假设$\sigma_{x} = 1$ 。为了最小化这个项,使得模型输入输出一致,即重建损失。 2. 对于KL相对熵项(右边),为正则项,有些反直觉。$p(z)$的先验分布一般有正态假设为$N(0,1)$,KL项可解析求出使得$q(z|x)$估计出的均值与方差z( $\mu$, $\sigma$)与$N(0,1)$中的0,1越近越好。都是正态假设。进一步进行推导如下。 $ D_{KL}(q_\phi(z| x) || p_{\theta}(z)) = \int q(z) log\frac{q(z)}{p(z)}dz $ $ =\int q(z) ((log q(z) - log p(z))dz $ $ =\int q(z) [log(\frac{1}{\sqrt{2 \pi \sigma^2}} e^{\frac{(z-\mu)^2}{2 \sigma^2}} e^{\frac{(z-\mu)^2}{2 \sigma^2}})- log(\frac{1}{\sqrt{2 \pi }} e^{\frac{(z)^2}{2}})] $ $ =\int q(z)(log \frac{1}{\sigma})dz + \int \frac{z^2}{2}q(z)dz - \int \frac{(z-\mu)^2}{2\sigma^2}q(z) $ 观察最后一项,为 二阶矩=方差 $ = (log \frac{1}{\sigma}) +\int \frac{1}{2} (z-\mu + \mu)^2q(z)dz -\frac{1}{2} $ $ = (log \frac{1}{\sigma}) +\frac{1}{2}(\int (z-\mu)^2 q(z)dz + \int \mu ^2q(z)dz + 2\int (z-\mu)(\mu) dz) -\frac{1}{2} $ $ = (log \frac{1}{\sigma})+ \frac{\sigma^2 + \mu^2}{2} - \frac{1}{2} $ 这里值得一提的是,由于网络设计的缘故,模型输出范围为正负无穷大,故其输出为$log(\sigma^2)$,那么模型的kl损失函数的形式为 令 v = log $\sigma^2​$ 原式$=-v/2 + \mu^2 /2 + e^v/2 -1/2$ ### [VAE Architecture](https://blog.csdn.net/ustbfym/article/details/78870990) x----$q_{\theta}(z|x)$------> ( $\mu$, $\sigma$) $N(0,1)$ 采样-----$p_{\phi}(x|z)$-----> $\mu_{x}, \sigma_{x}$ 模型的优化就是去优化$\theta, \phi$ 采样技巧:重参数化 -- 假设z的后验分布满足高斯分布,使用N(0,1)来采样$zz$,对$q_{\theta}(z|x)$ 预测的( $\mu$, $\sigma$) 进行重参数化便于反传训练,即$z_{sample} = \mu+zz*\sigma$