VAE的一种推导

VAE是一种生成模型,通过在中间隐变量Z上施加标准高斯分布约束,使解码器能从该分布生成数据。训练过程中,使用重参数化技巧处理隐变量的采样问题,以便于反向传播。目标是最大数据集的似然,通过优化证据下界(ELBO)来实现,同时平衡重构项和先验匹配项。在实践中,网络学习Z的均值和方差,然后从标准高斯分布采样得到Z,用于解码器生成数据。
摘要由CSDN通过智能技术生成

VAE:变分自编码器

  • 有别于普通自编码器,VAE通过对中间隐变量(记为Z)加上服从标准高斯分布的限制,使得解码器具有从标准高斯分布进行生成的能力;
  • 此时解码器的输入Z为分布采样得到,已非普通(编码器输出的常量)输入,因此训练过程是一个变分求导过程;
  • 实际训练时,为了能顺利反向求导,对隐变量Z的分布采样过程 使用重参数化技巧进行巧妙避开;
  • 下图介绍了几种生成模型,包括VAE(图片来自B站 揣摩研习社 分享的PPT)

VAE的一种推导

VAE的目标是最大化数据集X的似然,记为\prod_{x}P(x),x指X中某一个样本;引入log函数可简化为\sum_{x}logP(x);以下以一条样本为例进行推导,即最大化 logP(x)

引入隐变量z及其后验分布q_\phi(z|x),有

​​​​​​                ​​​​​​​logp(x) \\ = logp(x)\int q_\phi (z|x)dz \\ = \int q_\phi(z|x)logp(x)dz \\ = E_{q_\phi(z|x)}logp(x) \\ = E_{q_\phi(z|x)}log\frac{p(x,z)q_\phi(z|x)}{p(z|x)q_\phi(z|x)} \\ = E_{q_\phi(z|x)}log\frac{p(x,z)}{q_\phi(z|x)} + E_{q_\phi(z|x)}log\frac{q_\phi(z|x)}{p(z|x)} \\ = E_{q_\phi(z|x)}log\frac{p(x,z)}{q_\phi(z|x)} + D_{KL}(q_\phi(z|x)||p(z|x)) \\ \ge E_{q_\phi(z|x)}log\frac{p(x,z)}{q_\phi(z|x)}=ELBO \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ (1)

将(1)式称为ELBO(Evidence Lower Bound),我们可以通过不断优化ELBO来间接优化logp(x)

优化ELBO,先分析ELBO,引入p_\theta(x|z)

\\ELBO \\ = E_{q_\phi(z|x)}log\frac{p(x,z)}{q_\phi(z|x)} \\ = E_{q_\phi(z|x)}log\frac{p_\theta(x|z)p(z)}{q_\phi(z|x)} \\ = E_{q_\phi(z|x)}logp_\theta(x|z) - E_{q_\phi(z|x)}log\frac{q_\phi(z|x)}{p(z)} \\ = E_{q_\phi(z|x)}logp_\theta(x|z) - D_{KL}(q_\phi(z|x)||p(z)) \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ (2)

将式(2)的两项 根据它们的作用 分别记为:

\\ reconstruction\_term = E_{q_\phi(z|x)}logp_\theta(x|z) \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ (3) \\ prior\_matching\_term = D_{KL}(q_\phi(z|x)||p(z)) \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ (4)

第一项形象的表示了VAE的结构,即引入隐变量空间,因此需要一个隐变量的encoder(即q_\phi(z|x)),自然而然还需要一个用于生成的decoder(即p_\theta(x|z));

第二项则是希望对隐变量空间有一定的约束,通常将p(z)设置为标准高斯分布,以简化计算;

由(2)式可知,优化ELBO就是增大 reconstruction term,减小prior_matching_term;

VAE的具体实现

根据prior_matching_term,隐变量z 被约束为 服从高斯分布;

直接生成一个服从高斯分布的z(并添加prior_matching_term约束)或者搞出一个高斯分布再从中采样z,都不利于代码实现;

实际实现时,会采用重参数化技巧,即令z\sim N(\mu, \delta^2 ),此时q_\phi(z|x)(用一个网络表示)学习的就是均值和方差(标准差);

为了添加prior_matching_term约束,可以从一个N(0, 1)标准高斯分布中采样一个值\epsilon,利用下式得到z:

z = \epsilon * \delta + \mu \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ \space\ (5)

(3)式等价于从z\sim N(\mu, \delta^2 )采样z;

利用上述重参数化技巧,计算(4)式就简单了;

同时,有了z之后,只需要将p_\theta(x|z)构建为接收z为输入的另一个网络,即可计算(3)式;

其他说明

参考实现代码:GitHub - bojone/vae: a simple vae and cvae from keras

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值