Tutorial on Variational AutoEncoders

本文是《Tutorial on Variational AutoEncoders》一文部分翻译的内容。

1.介绍

generative model,学习高维数据的概率分布 P(X) P(X)。学习到不同维度之间的相互依赖关系,比如手写数字的生成模型如果生成了8的左边一半像素,那么剩下的像素也就能够随之确定。

latent variable,给予生成模型一些信息用来生成数据。比如一个生成手写数字的生成模型,隐变量z就可以是从[0,…,9]中随机采样的整型,确定了隐变量模型才能生成像素点。

但是隐变量又不可能那么简单,因为对于一个能够表达出数据集特性的生成模型,对于每个数据点,生成模型都要能够产生出一个隐变量来生成一个非常相似的东西。对手写数字数据集来说,同样的一个8,可能大一点或者小一点,往左歪一点或者往右歪一点,字迹是粗一点还是细一点。所以,生成模型中隐变量需要表达更多的信息,需要一个高维度的向量来表示隐变量 zRZ z∈RZ,隐变量要能够自动的学习到这些信息的表示,而且这些影响手写数字生成的信息之间的相互影响和依赖,即隐变量的latent structure,也应该自动的学习。

2.目标函数

VAE的过程是:从概率密度函数P(z)中采样隐变量z之后,从确定性函数 f(z;θ) f(z;θ)得到的值,这个值要大概率和数据集中的数据很相似。

所以我们的目标是对数据集中的所有数据x,最大化:

P(X)=P(X|z;θ)P(z)dz P(X)=∫P(X|z;θ)P(z)dz

其中的条件概率 P(X|z;θ) P(X|z;θ)等于 N(X|f(z;θ),σI) N(X|f(z;θ),σI),也就是在标准VAE中,如果输出是实数向量,通常输出的分布是均值为 f(z;θ) f(z;θ)方差为 σI σI的高斯分布。

VAE要最大化P(x),就要解决两个问题:

  • 隐变量z如何表示?

使用标准正态分布 N(0,I) N(0,I),因为只要有一个n维标准正态分布的z,再找到一个足够复杂的函数g,那么g(z)就可以表示任意一个n维分布。

对上面的公式而言, f(z;θ) f(z;θ)就是一个多层神经网络组成的函数逼近器。可以将将隐变量映射到最后的输出。

  • P(X) P(X)的积分如何计算?

现在我们得到了 P(z)=N(0,I) P(z)=N(0,I),可以直接计算 P(X) P(X)了吗?还是不行,假如采用抽样的方式抽样出很多z来计算 P(X) P(X)的话就会发现,对于绝大多数z来说, P(X|z) P(X|z)都接近于0(因为z是标准正态分布的采样),这种方式非常低效。

VAE的解决这个问题的核心思想就是,试图抽样出有更大可能性产生X的z。而做到这一点是通过另一个分布 Q(z|X) Q(z|X)来实现的,这个分布产生的Q能够以较大的可能产生X。

但是我们使用了Q分布后, P(X) P(X)积分公式就变成了 EzQP(X|z) Ez∼QP(X|z),我们要找到后者和 P(X) P(X)之间的关系。根据 P(z|X)Q(z|X) P(z|X)和Q(z|X)的KL散度的公式进行推导,可以推出:

其中左侧的部分就是目标函数,我们要最大化这个目标函数就是在最大化对数似然概率的同时,最小化我们预测的分布Q和真实分布P之间的差异。

3.目标函数优化

那么 Q(z|X) Q(z|X)是一个什么分布呢?通常的选择是,也是一个多元高斯分布 N(z|μ(X),σ(X)) N(z|μ(X),σ(X)),其中的 μσ μ和σ都是由神经网络学习到的映射。

所以目标函数等号右侧的最后一项就变成了两个多元高斯分布的KL散度,因为我们假定 P(z) P(z)是标准多元高斯分布。在得到了Q分布之后,这一项是能够计算出来的(当然也能够利用梯度下降来优化)。

而右侧的第一项,也就是 EzQ[logP(X|z)] Ez∼Q[logP(X|z)],通过当前时刻的Q分布,从中采样出若干个z,然后从这若干个z中计算出 P(X|z) P(X|z)作为期望的逼近值。

但是这样做的话,由于采样操作对 μ μ σ σ不可导,反向传播无法进行,因此,实际的VAE中使用了一个叫做reparameterization的改进,以从 N(0,I) N(0,I)中抽样出数值 ϵ ϵ后,用 ϵ ϵ乘以方差再加上均值的结果代替从 N(z|μ(X),σ(X)) N(z|μ(X),σ(X))中抽样,如下图。

所以最终,VAE的优化目标就是,让最终的输出 f(z) f(z)与目标 x x足够接近的同时,隐变量的分布 QN(μ,σ2) Q∼N(μ,σ2)接近真实先验分布 PN(0,I2) P∼N(0,I2)

4.条件变分自编码器

为了解决某种问题,比如说给定某个人的手迹,要求生成另一些与他的手迹很像的手迹。这时候需要制定输入计算输出 P(Y|X) P(Y|X),为了解决这类问题,从变分自编码器衍生出条件变分自编码器。

模型在Encoder和Decoder的输入中,增加了条件输入X,如上图。当然这张图只是一个简化版本,实际的CVAE有很多论文提出了很多不同的版本。

原文地址: http://cairohy.github.io/2017/11/17/deeplearning/Tutorial%20on%20Variational%20AutoEncoders/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值