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. CentOS 7 yum安装MongoDB

    1.配置MongoDB的yum源 cd /etc/yum.repos.d vim mongodb-org-6.0.repo 2.添加下载配置文件(这里使用阿里云的源),保存退出 [mngodb-org ...

  2. 使用vault配置加密

    简介 在使用ansible的过程中,不可避免的会存储一些敏感信息,比如在变量文件中存储帐号密码信息等. ansible通过ansible-vault命令行工具来提供对敏感文件的加密和解密. ansib ...

  3. uniapp - 设置代理

    uniapp - 设置代理 HbuilderX 找到 manifest.json 文件,点击源码视图 "h5" : { "title" : "案件要素 ...

  4. ts 学习笔记

    var message:string = "Hello World" console.log(message) // ts 1基础类型 任意类型 any 声明为 any 的变量可以 ...

  5. C# 读取串口设备列表

    ManagementObjectSearcher 解析不到头文件,需要手动 Add Referance 需要添加引用:System.Management,然后引入命名空间:using System.M ...

  6. Qt 中文编译错误和运行显示乱码

    Qt 中文编译错误 Qt error: C2001: 常量中有换行符 解决方法:菜单 --> 编辑 --> 选择编码(select Encoding)--> 文本编码 --> ...

  7. clear

    BFC虽然可以达到外部背景由内部内容撑开的效果,但是存在副作用 所以由clear将affter受浮动效果解除,来解决以上问题

  8. 宝塔部署 vue + thinkphp

    部署https://blog.csdn.net/xinxinsky/article/details/105441164?spm=1001.2101.3001.6650.2&utm_medium ...

  9. RabbitMQ管理界面使用之手动送数据

    目录 1. 找到相应的队列, 点击进入详情 2. 找到Publish Message项,填写自定义数据 3. 发送数据 4. 发送成功 5. 接收 1. 找到相应的队列, 点击进入详情 2. 找到Pu ...

  10. 05 Java 数组

    Java 数组 一.什么是数组 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的顺序排列组合而成 其中每一个数据称为数组元素,每个数组元素可以通过下标来访问它们 二.数组的声 ...