VAE变分推导依赖数学公式

(1)贝叶斯公式:\(p(z|x) = \frac{p(x|z)p(z)}{p(x)}\)

(2)边缘概率公式:\(p(x) =\int{p(x,z)}dz\)

(3)KL 散度公式:\(D_{KL}(p||q)=\int{p(x)log\frac{p(x)}{q(x)}}dx\)

推导方式一

注:一般随机变量是用大写字母表示,随机变量的取值用小写字母表示,随机变量的概率密度函数是用小写字母,而随机变量的分布函数是用大写字母,此处忽略字母的大小区别统一用小写字母表示。

贝叶斯变分自编码器,参考【1】中描述,公式推导是用一个分布q(z|x)去近似p(z|x),即从\(D_{KL}(q(z|x)||p(z|x))\)出发推导

\(D_{KL}(q(z|x)||p(z|x))\) = \(\int{q(z|x)·log \frac{q(z|x)}{p(z|x)}}dz\) = \(\int{q(z|x)· log \frac{q(z|x)}{\frac{p(z,x)}{p(x)}}}dz\) = \(\int{q(z|x)·log \frac{q(z|x)}
{\frac{p(x|z)·p(z)}{p(x)}}}dz\) = \(\int {q(z|x)·log\frac{q(z|x)·p(x)}{p(x|z)·p(z)}}dz\)

=\(\int{q(z|x)·logq(z|x)}dz + \int{q(z|x)·logp(x)}dz - \int{q(z|x)·logp(x|z)}dz - \int{q(z|x)·logp(z)}dz\)

=\(logp(x) + \int{q(z|x)·logq(z|x)}dz - \int{q(z|x)·logp(z)}dz - \int{q(z|x)·logp(x|z)}dz\)

=\(logp(x) + \int{q(z|x) · log \frac{ q(z|x)}{p(z)}}dz - \int{q(z|x)·logp(x|z)}dz\)

=\(logp(x) + KL(q(z|x)||p(z)) - E_{z \sim q(z|x)} [logp(x|z)]\)

==>

\(logp(x) = D_{KL}(q(z|x)||p(z|x)) - KL(q(z|x)||p(z)) + E_{z \sim q(z|x)} [logp(x|z)]\)

令\(L(q)=- KL(q(z|x)||p(z)) + E_{z \sim q(z|x)} [logp(x|z)]\),对应给定的x, log(x)是一个常量,最小化$D_{KL}(q(z|x)||p(z|x)) $, 也就最大化L(q)。又由于KL散度 \(D_{KL}(q(z|x)||p(z|x))\) 是非负的,因此 \(logp(x) \geq L(q)\) ,把L(q)称之为变分下界 Evidence Lower Bound。

推导方式二

$logp(x) = logp(x) · \int q(z|x)dz = \int q(z|x)· logp(x) dz $

\(logp(x) = log \frac{p(x,z)}{p(z|x)} = log p(x,z) - log p(z|x) = log \frac{p(x,z)}{q(z|x)} - log \frac{p(z|x)}{q(z|x)}\)

同时对上述公式两侧乘以q(z|x)并取积分得:

\(log p(x) = \int q(z|x)·log \frac{p(x,z)}{q(z|x)} dz - \int q(z|x)·log \frac{p(z|x)}{q(z|x)}dz\)

= \(D_{KL}(q(z|x)||p(z|x)) + \int q(z|x) ·log \frac{p(x|z)p(z)}{q(z|x)}dz\)

=\(D_{KL}(q(z|x)||p(z|x)) + \int q(z|x)·log p(x|z)dz + \int q(z|x)·log \frac{p(z)}{q(z|x)} dz\)

=\(D_{KL}(q(z|x)||p(z|x)) + E_{z \sim q(z|x)} [logp(x|z)] - D_{KL}(q(z|x)||p(z))\)

这里就得到和上述推导一样的公式。令\(L(q)=- KL(q(z|x)||p(z)) + E_{z \sim q(z|x)} [logp(x|z)]\)

由于后验概率\(p(z|x)\)无法求解,于是希望找到一个\(q(z|x)\)近似\(p(z|x)\)

由于任意KL散度$ D_{KL}(q(z|x)||p(z|x)) $ 都是非负的,所以\(logp(x) \geq L(q)\),L(q)是关于分布函数q的泛函。从似然函数观点出发,最大化L(q)可以导出最大化logp(x)。

理解公式含义

上面介绍了公式推导,按照【1】中描述。

(1)Encoder-Decoder模型中中间的隐变量是具体的某个值,而VAE不是研究隐变量具体某个值,而是学习隐变量的某个分布,使得在这个分布上取样时,Decoder仍可以得到相似的输出。

(2)贝叶斯公式:\(p(z|x) = \frac{p(x|z)p(z)}{p(x)}\),其中p(z)可以假定服从某个分布如高斯分布,p(x|z) decoder可以是用神经网络来表示,但是要求后验概率还需要求解p(x),由于\(p(x)=\int p(x|z)p(z)dz\),z一般是维度很高的变量,求上述积分是很困难的,所以求后验概率是很困难。

(3)求上述积分大致有两种解法:蒙特卡罗和变分推断

变分推断:

既然p(z|x)求解很困难,那么尝试用一个方便求解的分布q(z|x)去近似p(z|x),于是就想到最小化二者的KL散度即\(min{KL(q(z|x)||p(z|x))}\),这也是上述推导,从\(D_{KL}(q(z|x)||p(z|x))\)开始的原因。通过公式推导变换,最小化\(D_{KL}(q(z|x)||p(z|x))\)等价于最大化L。

现在来看最大化L对应的含义:随机变量z, 其分布是q(z|x),\(E_{z \sim q(z|x)} [logp(x|z)]\)最大化表明,在这个分布上不断对随机变量z进行取样,使得重建出x的几率最大;对于 $- KL(q(z|x)||p(z)) $ 最大化即最小化 $ KL(q(z|x)||p(z)) $,使得求解的后验概率q(z|x)和先验分布p(z)尽量接近。

变分下界求导求解

依赖数学公式:

(1)期望定义:设离散随机变量X的分布列为\(p(x_i)=P(X=x_i),i=1,2,...,n,...\), 如果级数\(\sum_{i=1}^{+\infty}|x_i|p(x_i)\)收敛,则称

      \(E(X)=\sum_{i=1}^{+\infty}x_ip(x_i)\)

期望定义: 设连续随机变量X的密度函数为p(x),如果无穷积分\(\int_{-\infty}^{+\infty} |x|p(x)dx\) 存在,则称

      \(E(X)=\int_{-\infty}^{+\infty}xp(x)dx\)

(2)方差定义: 如随机变量\(X^2\)的数学期望\(E[X^2]\)存在,则称偏差平方\((X-E[X])^2\)的数学期望 \(E[(X-E[X])^2]\)为随机变量X的方差,记为

\(Var(X)=E[(X-E[X])^2]\)=\(\begin{cases}\sum_i{[x_i-E(x)]^2p(x_i)}, & \text{在离散场合} \\ \int_{-\infty}^{+\infty}[x-E(X)]^2p(x)dx, & \text{在连续场合} \end{cases}\)

(3)方差性质: \(Var(X)=E(X^2)-[E(X)]^2\)

(4)正态分布: 若随机变量X的密度函数为

       \(p(x)=\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2\sigma^2}(x-u)^2}, -\infty < x < + \infty\)

则称X服从正态分布,称X为正态变量,记作\(X \sim N(\mu, \sigma^2)\)

其期望:\(E[X] =\mu\),方差:$Var(X) = \sigma^2 $

现在就开始L(q)的求导

\(L(q)=- KL(q(z|x)||p(z)) + E_{z \sim q(z|x)} [logp(x|z)]\)

变分下界公式第一项记为\(L_{1st}(q)=-KL(q(z|x)||p(z))\),前期为了推导过程简洁,省去了概率密度函数涉及的参数\(\phi,\theta\),接下来推导中添加上这些。即

$L_{1st}(q)=-KL(q_\phi(z|x)||p_\theta(z))=-\int q_\phi(z|x)·log \frac{q_\phi(z|x)}{q_\theta(z)}dz = - \int q_\phi(z|x)·log q_\phi(z|x)dz + \int q_\phi(z|x)·log p_\theta(z)dz $

:上文为了简化推导过程,尤其方便手写推导过程,上述公式中的变量z是高维的,应该用黑体 \(\mathbf{z}\) 表示。后续推导过程仍延续小写字母,但是最终结论中要将变量z看做是高维的,或最后展示时采取黑体加粗表示。

为了后续求导解决方便做出如下几点假设:

(1)其变量\(\mathbf{z}\)各个分量/维度相互独立,此处仅将z是一维进行推导,高维的最终由于独立性可以拆分

(2)\(p_\theta(z)\)是一个正态分布的概率密度函数,即 \(p_\theta(z) = N(z; 0, 1)\)

(3)\(q_\phi(z|x)\)也是一个正态分布的概率密度函数,即 \(q_\phi(z|x) = N(z; u(x, \phi), \sigma^2(x, \phi))\)

由期望的定义得

$ \int q_\phi(z|x)·log p_\theta(z)dz $

$ = E_{z \sim q_\phi(z|x)}[logp_\theta(z)] $

$ = E_{z \sim q_\phi(z|x)}[log N(z; 0, 1)] $

$ = E_{z \sim q_\phi(z|x)}[log \frac{1}{\sqrt(2\pi)}e^{-\frac{1}{2} z^2 }] $

$ = E_{z \sim q_\phi(z|x)}[log \frac{1}{\sqrt(2\pi)} -\frac{1}{2}z^2] $

$ = log \frac{1}{\sqrt(2\pi)} -\frac{1}{2} E_{z \sim q_\phi(z|x)}[z^2] $

$ = -\frac{1}{2}log2\pi - \frac{1}{2} (\mu ^2 + \sigma ^2)$

注:最后一步推导可以由方差性质得到

同样地:

$ \int q_\phi(z|x)·log q_\phi(z|x)dz $

$ = E_{z \sim q_\phi(z|x)}[log N(z; u, \sigma^2)] $

$ = E_{z \sim q_\phi(z|x)} [log \frac{1}{\sqrt(2\pi \sigma^2 )}e^{-\frac{1}{2 \sigma^2} (z-\mu)^2 }] $

$ = E_{z \sim q_\phi(z|x)} [log \frac{1}{\sqrt(2\pi \sigma^2 )} -\frac{1}{2 \sigma^2} (z-\mu)^2 ]$

$ = log \frac{1}{\sqrt(2\pi \sigma^2 )} - \frac{1}{2 \sigma^2} E_{z \sim q_\phi(z|x)} [(z-\mu)^2]$

$ = -\frac{1}{2}log2\pi - log \sigma - \frac{1}{2 \sigma^2} Var(z) $

$ = -\frac{1}{2}log2\pi - log \sigma - \frac{1}{2 \sigma^2} \sigma^2 $

$ = -\frac{1}{2}log2\pi - log \sigma - \frac{1}{2} $

下面将变量z使用黑体\(\mathbf z\)表示来推导多维变量情况下公式,假设\(\mathbf z\)的维度是J,由于各个维度独立无关

$ \int q_\phi(\mathbf z|x)·log p_\theta(\mathbf z)d\mathbf z $

$= E_{\mathbf z \sim q_\phi(\mathbf z|x)}[logp_\theta(\mathbf z)] $

$= E_{\mathbf z \sim N(\mathbf z; \mathbf u, \Sigma)}[logN(\mathbf z; \mathbf 0, \mathbf I)] $

$= E_{z_1 \sim N(z_1;u_1,\sigma_1^2), z_2 \sim N(z_2;u_2,\sigma_2^2), ..., z_J \sim N(z_J;u_J,\sigma_J^2)}[logN(\mathbf z; \mathbf 0, \mathbf I)] $

简写为:

$= E_{z_1 \sim N(z_1), z_2 \sim N(z_2), ..., z_J \sim N(z_J)}[logN(\mathbf z; \mathbf 0, \mathbf I)] $

$= E_{z_1 \sim N(z_1)} · E_{z_2 \sim N(z_2)}, ..., · E_{z_J \sim N(z_J)}[logN(\mathbf z; \mathbf 0, \mathbf I)] $

$= E_{z_1 \sim N(z_1)} · E_{z_2 \sim N(z_2)}, ..., · E_{z_J \sim N(z_J)}[logN(z_J; 0, 1) + logN(z_{J-1}; 0, 1) + ... + logN(z_1; 0, 1)] $

$= E_{z_1 \sim N(z_1)} · E_{z_2 \sim N(z_2)}, ..., · E_{z_{J-1} \sim N(z_{J-1})} [E_{z_J \sim N(z_J)}[logN(z_J; 0, 1)] + logN(z_{J-1}; 0, 1) + ... + logN(z_1; 0, 1) ] $

\(E_{z_J \sim N(z_J)}[logN(z_J; 0, 1)]\) 对于其它变量求期望相当于是一个常量,可以移出到外面,于是有

$= E_{z_J \sim N(z_J)}[logN(z_J; 0, 1)] + E_{z_1 \sim N(z_1)} · E_{z_2 \sim N(z_2)}, ..., · E_{z_{J-1} \sim N(z_{J-1})} [ logN(z_{J-1}; 0, 1) + ... + logN(z_1; 0, 1) ] $

依次类推求得

\(= E_{z_J \sim N(z_J)}[logN(z_J; 0, 1)] + E_{z_{J-1} \sim N(z_{J-1})}[logN(z_{J-1}; 0, 1)] + ... + E_{z_1 \sim N(z_1)}[logN(z_1; 0, 1)]\)

$ = -\frac{J}{2}log2\pi - \frac{1}{2}\sum_{j=1}^J {(\mu_j ^2 + \sigma_j ^2)}$

即$ \int q_\phi(\mathbf z|x)·log p_\theta(\mathbf z)d\mathbf z $

$ = -\frac{J}{2}log2\pi - \frac{1}{2}\sum_{j=1}^J {(\mu_j ^2 + \sigma_j ^2)}$

同理可以得出

$ \int q_\phi(z|x)·log q_\phi(z|x)dz $

$ = -\frac{J}{2}log2\pi - \frac{1}{2}\sum_{j=1}^J {(1 + log\sigma_j ^2)}$

$L_{1st}(q)= \frac{1}{2}\sum_{j=1}^J {(1 + log\sigma_j ^2 - u_j^2 - \sigma_j^2)} $

【1】https://zhuanlan.zhihu.com/p/83865427

【2】https://www.cnblogs.com/hugh2006/p/9693891.html

【3】【机器学习】【白板推导系列】bilibili视频

【4】https://zhuanlan.zhihu.com/p/25429486

【5】https://blog.csdn.net/tsinghuahui/article/details/80530750

【6】Auto-Encoding Variational Variational Bayes | AISC Foundational

【7】An Introduction to Variational Autoencoders

VAE变分自编码器公式推导的更多相关文章

  1. VAE变分自编码器实现

    变分自编码器(VAE)组合了神经网络和贝叶斯推理这两种最好的方法,是最酷的神经网络,已经成为无监督学习的流行方法之一. 变分自编码器是一个扭曲的自编码器.同自编码器的传统编码器和解码器网络一起,具有附 ...

  2. VAE变分自编码器

    我在学习VAE的时候遇到了很多问题,很多博客写的不太好理解,因此将很多内容重新进行了整合. 我自己的学习路线是先学EM算法再看的变分推断,最后学VAE,自我感觉这个线路比较好理解. 一.首先我们来宏观 ...

  3. Variational Auto-encoder(VAE)变分自编码器-Pytorch

    import os import torch import torch.nn as nn import torch.nn.functional as F import torchvision from ...

  4. (转) 变分自编码器(Variational Autoencoder, VAE)通俗教程

    变分自编码器(Variational Autoencoder, VAE)通俗教程 转载自: http://www.dengfanxin.cn/?p=334&sukey=72885186ae5c ...

  5. 变分自编码器(Variational Autoencoder, VAE)通俗教程

    原文地址:http://www.dengfanxin.cn/?p=334 1. 神秘变量与数据集 现在有一个数据集DX(dataset, 也可以叫datapoints),每个数据也称为数据点.我们假定 ...

  6. 4.keras实现-->生成式深度学习之用变分自编码器VAE生成图像(mnist数据集和名人头像数据集)

    变分自编码器(VAE,variatinal autoencoder)   VS    生成式对抗网络(GAN,generative adversarial network) 两者不仅适用于图像,还可以 ...

  7. 变分自编码器(Variational auto-encoder,VAE)

    参考: https://www.cnblogs.com/huangshiyu13/p/6209016.html https://zhuanlan.zhihu.com/p/25401928 https: ...

  8. 基于变分自编码器(VAE)利用重建概率的异常检测

    本文为博主翻译自:Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability,如侵立 ...

  9. 变分推断到变分自编码器(VAE)

    EM算法 EM算法是含隐变量图模型的常用参数估计方法,通过迭代的方法来最大化边际似然. 带隐变量的贝叶斯网络 给定N 个训练样本D={x(n)},其对数似然函数为: 通过最大化整个训练集的对数边际似然 ...

  10. 基于图嵌入的高斯混合变分自编码器的深度聚类(Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedding, DGG)

    基于图嵌入的高斯混合变分自编码器的深度聚类 Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedd ...

随机推荐

  1. (python笔记)python使用JS定位css元素

    from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import da ...

  2. jar包下不下来

    1.maven中的settings.xml文件中的镜像资源配置 <mirror> <id>alimaven</id> <name>aliyun mave ...

  3. linux办公

    办公环境.生产环境: centos.redhat.big cloud 1.改PS1:生产主机的主机名太长了,每次显示占半行 [root@10.0.0.11 ~]$ echo $PS1 [\u@10.0 ...

  4. LCP 03.机器人大冒险

    def robot(command, obstacles, x, y): xx = 0 yy = 0 tmp = [] for c in command: if c == 'U': yy += 1 i ...

  5. 二分查找中mid值的计算方法

    在刷题的时候遇到许多二分查找的题目 发现很多大佬的题解中mid值得计算都是用的:mid = low + (high-low)/ 2; 为什么不用mid = (low+high)/ 2的计算方法呢? i ...

  6. kali修改root用户和密码,以及更新源,超详细教学。

    大家好! 又是你们那个傻傻的河东, 今天来讲修改root用户和更新源. 打开上期的kali虚拟机 开启虚拟机 使出吃奶的劲按"e"键:) 进入下面的界面 然后往下找到 Linux ...

  7. vue动态切换图片

    1.踩的一个坑是:直接获取对象,使用style改变其背景图地址或者对img标签改变src值 因为经过vue经过打包编译后,图片地址已经被处理了,这时更新地址是无效的,会找不到图片. 所以可以用多个标签 ...

  8. (0709) Linux-命令(scp,tar) zip

    (1) scp .bashrc root@192.168.1.6:vnc://cfy-hp-notebook-pc.local (2) tar -czvf a.tar.gz b            ...

  9. 工作频率运行在3.0 ~ 4.5 GHz的高效率GaAs HBT MMIC驱动放大器-CBG9326

    国内使用UWB高精度室内定位的行业应用产品,工作频段大部分都在3.5Ghz-6GHz低频段(Channel 2(特定场景如管隧矿)和Channel 5)范围,因此只能应用于煤矿.监狱等封闭的小众市场. ...

  10. matlab判断操作

    类型判断 1.查看变量类型时可用class,判断某变量的类型值:会生成0或1,1-匹配,0-不匹配 isa(Data,'double') isa(Data,'cell') 2.也可用如下. strcm ...