1 步推导出 VAE 变分自编码器(以及为何没必要时刻写出 KL 散度)

500 阅读1分钟
原文链接: zhuanlan.zhihu.com

很多地方的推导太长了。

首先:\mathop{\arg\min}_\theta \mathsf{KL}(p \parallel q_\theta) = \mathop{\arg\max}_\theta \int p(x) \log q_\theta(x)  \, dx =  \mathop{\arg\max}_\theta \mathbb{E}_{x \sim p(x)}\log q_\theta(x)

写成 MLE,比 KL 散度少一个常数,形式更简单。没必要时刻写出 KL 散度。


可以 1 步推导出 VAE。


这个是 MLE:

\mathop{\arg\max}_\theta \mathbb{E}_{(x,z) \sim p(x,z)}\log q_\theta(x,z)

显然等价于:

\mathop{\arg\max}_\theta \mathbb{E}_{x \sim p(x)} \Big[ \mathbb{E}_{z \sim p(z|x)} \Big[ \log q_\theta(x|z) + \log q_\theta(z) \Big]  \Big]


恭喜,推导出了 VAE。


加 10 秒钟,把它变成更常见的样子。

展开:

\mathop{\arg\max}_\theta \mathbb{E}_{x \sim p(x)} \Big[ \mathbb{E}_{z \sim p(z|x)}  \log q_\theta(x|z) + \mathbb{E}_{z \sim p(z|x)} \log q_\theta(z) \Big]

改变符号,显然等价于:

\mathop{\arg\min}_\theta \mathbb{E}_{x \sim p(x)} \Big[ \mathbb{E}_{z \sim p(z|x)} - \log q_\theta(x|z) + \mathsf{KL}\big( p(z|x) \parallel  \log q_\theta(z)\big) \Big]


再加上先验:

p(z|x) = N(\mu_x, \sigma_x^2)

q_\theta(z) = N(0, I)

还有假设 q_\theta(x|z) 是固定 stdev 的 Gaussian 以造出 MSE。


就和实际用的一模一样了。


我在另一篇文章,简单实验了 q_\theta(x|z) 有可变 stdev 的情况:

PENG Bo:DGN v2:生成器应该输出分布,清晰图像并不是 GAN 的特权zhuanlan.zhihu.com图标