Variational AutoEncoders

Variational AutoEncoders

VAE作为前几年兴起的一个技术,在数据生成方面有极为广阔的应用,并且已经证实了在生成复杂数据方面非常有效。

1. Latent Variables

Latent Variable (潜在变量)是一个我个人认为很神奇的东西,它支撑起了很多以概率角度建立的模型。Latent Variable是一个我们看不见的隐藏的随机变量,往往代表着事物背后的本质。比如一个手写的数字,在计算机看来,你将一个手写的数字的图片传给它,它只能看到一个个的像素点,那现在你叫它分辨一张图片到底是数字几或者生成一张手写数字的图片,它怎么做到呢?这时就需要Latent Variable:

我们将图片传给神经网络的时候,神经网络自己对这张图片进行特征提取,这是神经网络自己内部的行为,我们并不知道它能提取到什么样的特征,我们只能告诉它你以目前这种方式提取的特征所获得的分类/生成图片结果,是正确/错误的,并告诉它有多正确/多错误。它根据我们的指示所提取到的特征,是以神经网络自己内部的形式对图片进行编码(encode)的结果,而编出的码,就是神经网络对Latent Variable进行的模拟。Latent Variable代表的是图片背后的信息,比如数字几,笔画粗细,数字的角度等等。但是需要注意的一点是,以上仅仅为举例,现实中人类往往并不能直接通过这些编码获得有用的信息,只有神经网络自己才看得懂这是啥。

在进行了一定程度上的学习之后,我们希望训练出的神经网络能够自己生成一张图片。这个时候神经网络会对之前训练出的对于latent variable的分布的模拟进行取样,根据取样,来生成一张图片。更具体一点,理想一点,假设latent variable代表的是数字0-9,神经网络会首先在0-9之间根据概率分布取出一个数字,根据这个数字,神经网络会根据之前训练的结果,每个数字大概能长成什么样,来生成相对应的图片。这个过程,被称作解码(decode)。

2. Generative Models

需要明确的一点是VAE(Variational AutoEncoders)是Generative Model(生成模型)。在classification(分类)问题中,Generative Model 是对联合概率密度 P ( X , Y ) P(\mathbf{X},Y) P(X,Y)进行模拟,其中 X \mathbf{X} X是数据点, Y是label,二者都被看作是随机的,前者是随机向量,后者是一个随机变量。

而在VAE的问题中,Generative Model主要应对的是对 P ( X ) P(\mathbf{X}) P(X)进行模拟:
P ( X ) = ∫ P ( X ∣ z ; θ ) P ( z ) d z P(\mathbf{X}) = \int P(\mathbf{X}|z;\theta)P(z)dz P(X)=P(Xz;θ)P(z)dz
上式中的 z z z是latent variable,是我们通过训练所模拟的一个分布; θ \theta θ是随机变量 X ∣ z X|z Xz的概率分布的参数

这个问题的目标是建立一个模型,然后不断的优化 θ \theta θ, 使得在这个模型下,已知数据集 X \mathbf{X} X发生的可能性最大,这就是Maximum Likelihood(最大似然)。如果我们训练的模型能够使得训练集中的数据的可能性最大,那么就有理由相信,它能生成和我们数据集的数据相似的数据,这里的相似指的是服从同一概率分布。

如果 P ( X ∣ z ) P(\mathbf{X}|z) P(Xz)是任意概率分布,那么对它进行训练显然是不现实的,所以在VAE中,假设 P ( X ∣ z ) P(\mathbf{X}|z) P(Xz)是一个正态分布 N ( f ( z ; θ ) , σ 2 I ) \mathcal{N}(f(z;\theta),\sigma^2 I ) N(f(z;θ),σ2I),其中 f ( z ; θ ) f(z;\theta) f(z;θ)是一个关于latent variable的函数,通常由1层或多层神经网络构成。

3. Variational AutoEncoders

3.1 Latent Variables in AutoEncoders

首先需要解决的问题是,我们如何选择Latent Variable需要模拟的分布使得它能够捕捉到数据的特性呢?这里我们假设我们的latent variable是服从标准正态分布 N ( 0 , I ) \mathcal{N}(0, I ) N(0,I)的,但这样的确失去了普遍性,凭什么你说是标准正态分布,就是标准正态分布了,这也太局限了吧?但其实这没有关系,因为任何一个分布d维的概率分布函数,都可以通过将d个1维标准正态分布传入一个足够复杂的函数来得到(https://informs-sim.org/wsc86papers/1986_0039.pdf) 也就是说,就算我们模拟的latent variable不是真正的能够捕捉到输入数据的特性的latent variable,我们依然可以通过后面添加神经网络来将其映射到真正的latent variable,因为神经网络是 universal function approximator, 意即任何函数都可以通过一个具有有限节点个数、至少一个hidden layer(隐藏层)的神经网络进行逼近。所以理论上,利用假设latent variable是标准正态分布变量配合神经网络,是可行的。

3.2 An Intuitive Way

解决完latent variable的问题之后,剩下的就是想办法设计一个Objective Function(目标函数)来最大化 P ( X ) P(\mathbf{X}) P(X)。如果我们能够做到通过一个可行的数学表达式的方法计算 P ( X ) P(\mathbf{X}) P(X),那么就可以通过Stochastic Gradient Descent来进行优化。

那么一个比较简单的方法是通过计算平均值来估计期望。

我们需要注意到实际上这个式子:
P ( X ) = ∫ P ( X ∣ z ; θ ) P ( z ) d z P(\mathbf{X}) = \int P(\mathbf{X}|z;\theta)P(z)dz P(X)=P(Xz;θ)P(z)dz
其实是
E z ∼ P ( z ) ( X ∣ z ) \mathbb{E}_{z \sim P(z)}(X|z) EzP(z)(Xz)
那么通过对 z z z进行取样: { z 1 , z 2 . . . z n } \{z_1,z_2...z_n\} { z1,z2...zn},然后计算:
P ( X ) ≈ 1 n ∑ i P ( X ∣ z i ) P(X)\approx \frac{1}{n}\sum_i P(X|z_i) P(X)n1iP(Xzi)
但其实这个方法不太行,因为它需要非常多的数据点来进行逼近,这样计算的代价就太高了。具体为什么需要很多数据点,有兴趣请移步:arXiv:1606.05908 (2016)

所以我们需要另辟蹊径。

3.3 Setting Up the Objective Function

上面这个方法之所以不行,是因为需要取样太多的点了,在标准正态分布下取样到的点,大多数其实 P ( X ∣ z ) P(X|z) P(Xz)都是非常接近0的,导致取样到了对最终的 P ( X ) P(\mathbf{X}) P(X)也没有什么影响,可以说我们取样的效率是极低的。所以我们自然而然的就想到了,要在现有的概率分布下,得到一个条件分布 Q ( z ∣ X ) Q(z|X) Q(zX),使得在已知输入的 X X X的条件下,得到一个能够进行高效率取样的分布。这样就能够更加有效地通过取样来计算 E z [ P ( X ∣ z ) ] \mathbb{E}_{z}[P(X|z)] Ez[P(Xz)]

那么怎么得到这个 Q ( z ∣ X ) Q(z|X) Q(zX)呢?
我们希望能够让训练得到的 Q ( z ∣ X ) Q(z|X) Q(zX)可以尽可能地逼近真正的 P ( z ∣ X ) P(z|X) P(zX)。在信息论中常用的一种方法是KL-Divergence,它能够度量两个概率分布之间的差距(注意,不是距离,KL-Divergence不具有距离的特性)。

KL-Divergence的定义式:
D [ Q ( z ∣ X ) ∣ ∣ P ( z ∣ X ) ] = E z ∼ Q [ l o g ( Q ( z ∣ X ) ) − l o g ( P ( z ∣ X ) ] \mathcal{D}[Q(z|X)||P(z|X)] = \mathbb{E}_{z\sim Q}[log(Q(z|X))-log(P(z|X)] D[Q(zX)P(zX)]=EzQ[log(Q(zX))log(P(zX)]
但是这里面并没有我们关心的变量,我们关心的是关于 X X X的概率,但现在它都被作为条件,那么需要通过贝叶斯定理把它换到前面来:
D [ Q ( z ∣ X ) ∣ ∣ P ( z ∣ X ) ] = E z ∼ Q [ l o g ( Q ( z ∣ X ) ) ] − E z ∼ Q [ l o g ( P ( z ∣ X ) ] = E z ∼ Q [ l o g ( Q ( z ∣ X ) ) ] − E z ∼ Q [ l o g ( P ( X ∣ z ) P ( z ) P ( X ) ) ] = E z ∼ Q [ l o g ( Q ( z ∣ X ) ) ] − E z ∼ Q [ l o g ( P ( X ∣ z ) ) + l o g ( P ( z ) ) ] + l o g ( P ( X ) ) \begin{aligned} \mathcal{D}[Q(z|X)||P(z|X)] &= \mathbb{E}_{z\sim Q}[log(Q(z|X))]-\mathbb{E}_{z\sim Q}[log(P(z|X)]\\ &=\mathbb{E}_{z\sim Q}[log(Q(z|X))]-\mathbb{E}_{z\sim Q}[log(\frac{P(X|z)P(z)}{P(X)})]\\ &=\mathbb{E}_{z\sim Q}[log(Q(z|X))]-\mathbb{

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值