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. wpa_supplicant 交叉编译

    交叉编译 wpa_supplicant 指定交叉编译环境: CC=arm-linux-xxxxx-gcc 运行错误 :  wlan0: Unsupported driver 'nl80211' 在.c ...

  2. poi 5.2 导出

    如果能给你带来帮助,不胜荣幸,如果有错误也请批评指正. 1:maven 依赖,现在好多都是用的poi 3.6 和 poi3.9 的jar,项目升级了,现在得用5.x的了,所以就用5.x的给大家简单的演 ...

  3. ChatGPT回答的关于maxscript + python

  4. CentOS Linux release 7.6 zabbix5.0 安装

    # zabbix 安装关方文档 https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_vers ...

  5. PYTHON中的CONCURRENT.FUTURES模块

    一 : 概述 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor: 进程池,提供异 ...

  6. apollo兼容mysql的时候报错Table 'apolloportaldb.hibernate_sequence' doesn't exist

    解决方案: 配置文件里加: spring.jpa.properties.hibernate.hbm2ddl.auto=update

  7. WPF图片的缩放节省内存

    一.前言 正好项目用到要加载大量图片,虽然说可以使用WPF提供的自带的UI虚拟化功能,但是直接加载大量的图片到内存还是会 消耗很多的内存,而且WPF支持UI虚拟化的ListBox等容器的布局是Virt ...

  8. 对SQL CTE的一点个人理解

    /*执行顺序: 首先,执行按一.二,此时二输出的结果,可以理解为临时n 然后,按三.二.三.二循环执行 注意:,步骤三的where为递归终止条件,由于用的是substr函数.在最后一次递归的时候,如果 ...

  9. ios打开第三方地图app

    https://www.jianshu.com/p/691dd39cb28c [ios调起 地图app]分三步: 1.配置相对于地图app的LSApplicationQueriesSchemes白名单 ...

  10. 排查前端接受后端的map产生的字段错误

    报错内容 [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingExce ...