详解变分自编码器——VAE

本文将介绍另一生成模型——变分自编码器VAE。

详解变分自编码器——VAE

VAE全称(Variational Auto-Encoder)即变分自编码器。是一个生成模型。

了解VAE之间,我们先简单了解一下自编码器,也就是常说的Auto-Encoder

Auto-Encoder包括一个编码器(Encoder)和一个解码器(Decoder)。其结构如下:

Auto-Encoder

中间的这层code也称embedding。

VAE的目标

先假设一个隐变量Z的分布,构建一个从Z到目标数据X的模型,即构建 X = g ( Z ) X=g(Z) X=g(Z),使得学出来的目标数据与真实数据的概率分布相近。与GAN基本一致,GAN学的也是概率分布。

模型结构

VAE的结构图(图源自苏老师的博客,侵删)如下:

VAE结构

VAE对每一个样本 X k X_k Xk匹配一个高斯分布,隐变量Z就是从高斯分布中采样得到的。对K个样本来说,每个样本的高斯分布假设为 N ( μ k , σ k 2 ) \mathcal N(\mu_k,\sigma_k^2) N(μk,σk2),问题就在于如何拟合这些分布。

VAE构建两个神经网络来进行拟合均值与方差。即 μ k = f 1 ( X k ) , l o g σ k 2 = f 2 ( X k ) \mu_k=f_1(X_k),log\sigma_k^2=f_2(X_k) μk=f1(Xk),logσk2=f2(Xk),拟合 l o g σ k 2 log\sigma_k^2 logσk2的原因是这样无需加激活函数。

此外,VAE让每个高斯分布尽可能地趋于标准高斯分布 N ( 0 , 1 ) \mathcal N(0,1) N(0,1)。这拟合过程中的误差损失则是采用KL散度作为计算。

下面做详细推导。

原理推导

其实,VAE与同为生成模型的GMM(高斯混合模型)也有很相似,实际上VAE可看成是GMM的一个distributed representation的版本。我们知道,GMM是有限个高斯分布的隐变量 z z z 的混合,而VAE可看成是无穷个隐变量 z z z 的混合,注意,VAE中的 z z z 可以是高斯也可以是非高斯的。只不过一般用的比较多的是高斯的。

原始样本数据 x x x 的概率分布:
P ( x ) = ∫ Z P ( x ) P ( x ∣ z ) d z P(x)=\int_Z P(x)P(x|z)dz P(x)=ZP(x)P(xz)dz
我们假设 z z z 服从标准高斯分布,先验分布 P ( x ∣ z ) P(x|z) P(xz) 是高斯的,即 x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z \sim N(\mu(z),\sigma(z)) xzN(μ(z),σ(z)) μ ( z ) 、 σ ( z ) \mu(z)、\sigma(z) μ(z)σ(z)是两个函数, 分别是 z z z对应的高斯分布的均值和方差(如下图),则 P ( x ) P(x) P(x) 就是在积分域上所有高斯分布的累加。

在这里插入图片描述

由于 P ( z ) P(z) P(z) 是已知的, P ( x ∣ z ) P(x|z) P(xz) 未知,所以求解问题实际上就是求 μ , σ \mu,\sigma μ,σ这两个函数。我们最开始的目标是求解 P ( x ) P(x) P(x),且我们希望 P ( x ) P(x) P(x)越大越好,这等价于求解关于 x x x 最大对数似然:
L = ∑ x l o g P ( x ) L=\sum_x logP(x) L=xlogP(x)

l o g P ( x ) logP(x) logP(x) 可变换为:
l o g P ( x ) = ∫ z q ( z ∣ x ) l o g P ( x ) d z = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) q ( z ∣ x ) q ( z ∣ x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) l o g ( P ( z , x ) q ( z ∣ x ) ) d z + ∫ z q ( z ∣ x ) l o g ( q ( z ∣ x ) P ( z ∣ x ) ) d z = ∫ z q ( z ∣ x ) l o g ( P ( x ∣ z ) P ( z ) q ( z ∣ x ) ) d z + ∫ z q ( z ∣ x ) l o g ( q ( z ∣ x ) P ( z ∣ x ) ) d z \begin{aligned} logP(x)&=\int_z q(z|x)logP(x)dz \\ &=\int_z q(z|x)log(\dfrac{P(z,x)}{P(z|x)})dz \\ &=\int_z q(z|x)log(\dfrac{P(z,x)}{q(z|x)}\dfrac{q(z|x)}{P(z|x)})dz\\ &=\int_z q(z|x)log(\dfrac{P(z,x)}{q(z|x)})dz+ \int_z q(z|x)log(\dfrac{q(z|x)}{P(z|x)})dz\\ &=\int_z q(z|x)log(\dfrac{P(x|z)P(z)}{q(z|x)})dz + \int_z q(z|x)log(\dfrac{q(z|x)}{P(z|x)})dz \end{aligned} logP(x)=

  • 9
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值