1. 数学基础
1.1 似然函数
首先考虑一个条件概率p(x∣θ),这里的x表示观测结果,θ表示分布参数
如果固定θ=θ0,得到
x∼p(x∣θ0)
这是关于x的概率分布,在连续条件下满足∫p(x∣θ0)dx=1
如果已经观测到x=x0,将同一个表达式看作参数θ的函数,定义似然函数
L(θ;x0):=p(x0∣θ)
可以理解为固定已经观测到的x0,比较不同分布参数θ对这个观测数据的解释程度,它只是关于θ的普通函数,不要求∫L(θ;x)dθ等于1
因此
L(θ;x)=p(x∣θ)
二者在数值表达式上完全相同,只是所研究的变量不同
- θ固定,研究x ⇒ 概率分布
- x固定,研究θ ⇒ 似然函数
这里解释一下;和∣的区别
- ;是区分变量和参数,如L(θ;x)便是在强调这是关于θ的函数
- ∣表示条件,如p(x0∣θ)便是强调当分布为θ时,x0发生的概率
1.2 贝叶斯公式
针对分布参数θ和观测数据x,贝叶斯公式写成
p(θ∣x)=p(x)p(x∣θ)p(θ)=∫p(x∣θ′)p(θ′)dθ′p(x∣θ)p(θ)
这四部分分别是
先验p(θ)似然p(x∣θ)证据/边缘似然p(x)后验p(θ∣x)
可以把它理解成
后验∝似然×先验
这个过程可以理解为
我原来通过先验p(θ)对参数θ有一个认识;现在观察到了数据x后,似然p(x∣θ)衡量不同θ对当前数据的解释程度;将二者结合并归一化后,得到新的参数分布p(θ∣x)
先验p(θ)
它表示在看到数据x之前,我认为参数θ取不同值的概率是多少。
比如有一枚硬币,θ表示正面概率。在抛硬币之前,你可能根据经验认为这枚硬币大概率比较公平,所以认为概率密度p(θ)在0.5附近较大,而在0.01附近很小。注意这是关于θ的概率分布,所以满足
∫p(θ)dθ=1
所以先验分布应该是在0.5处非常大,在别的地方非常小
似然性p(x∣θ)
它表示参数取θ时,数据x取不同值的概率是多少。即θ对当前观测数据的解释程度,也可以写为L(θ;x)
比如对于抛硬币来说,定义θ表示正面概率,x为抛硬币是正面的次数。抛了10次,那么有p(x∣θ)=C10xθx(1−θ)10−x
似然性是关于x的概率分布,所以满足
∫p(x∣θ)dx=1
后验p(θ∣x)
它表示看到数据x之后,我现在认为参数θ取不同值的概率是多少。
证据p(x)
它的作用主要是归一化,让后验满足
∫p(θ∣x)dθ=1.
似然与后验的区别
似然只负责这个参数能不能很好解释数据,它没有考虑这个参数本身有多可能,也就是缺少了先验的部分。
只有把二者结合起来才是数据出现后参数为θ的可能性大小,即后验
1.3 最大似然估计(Maximum Likelihood Estimation, MLE)
最大似然估计的思想在于,对于给定的观测数据x,我们希望能从所有的参数θ1,θ2,⋯,θn中找出能最大概率生成观测数据的参数θ∗作为估计结果。前面提及对于已经观测到的数据x,似然函数为
L(θ;x)=pθ(x)
因此最大似然估计定义为
θ∗=argθmaxL(θ;x)=argθmaxpθ(x)
1.3.1 有限样本下的MLE
假设给定数据集
D={x1,x2,⋯,xn}
并假设所有样本独立同分布
xi∼pdata(x)
由于样本之间相互独立,整个数据集的联合概率为
pθ(D)=i=1∏npθ(xi)
因此似然函数为
L(θ;D)=i=1∏npθ(xi)
由于连乘形式不方便求解,同时大量小概率相乘容易产生数值下溢,因此通常对似然取对数,得到对数似然(log-likelihood)
ℓ(θ;D)=logL(θ;D)
即
ℓ(θ;D)=i=1∑nlogpθ(xi)
由于对数函数是单调递增函数,因此最大化似然和最大化对数似然具有相同的最优解
1.3.2 MLE 的总体期望目标(理论极限)
这是假设样本无穷多时的极限,是理论总体版本。根据有限样本对数似然,计算平均对数似然
n1ℓ(θ)=n1i=1∑nlogpθ(xi)
当样本数n足够大时,根据大数定律,x1,⋯,xn 独立同分布,只要期望存在,有
n1i=1∑ng(xi)n→∞Ex∼pdata[g(x)]
令g(x)=logpθ(x)便有
n→∞limn1i=1∑nlogpθ(xi)=Ex∼pdata[logpθ(x)]
因此,可以定义 MLE 对应的总体期望目标
J(θ)=Ex∼pdata[logpθ(x)]
对于连续随机变量,根据期望的定义有
J(θ)=∫pdata(x)logpθ(x)dx
这里的pdata(x)表示真实数据分布,而pθ(x)表示模型学习到的分布
1.4 KL散度
为了衡量两个分布qϕ(x)和pθ(x)之间的差异,通常使用 KL 散度
DKL(qϕ(x)∥pθ(x))
其定义为
DKL(q∥p)=∫q(x)logp(x)q(x)dx
KL 散度满足
DKL(q∥p)≥0
并且当且仅当q(x)=p(x)几乎处处成立时取零。
2. 变分自编码器(Variational Autoencoder, VAE)
变分自编码器中有两个网络
- 推断模型/Encoderqϕ(z∣x),做的是x→z
- 生成模型/Decoderpθ(x∣z),做的是z→x
训练过程
现在假设训练集里拿出一张图片x
第一步:把真实图片送进 Encoder,输入x,经过编码器,输出μϕ(x),σϕ(x),也就是构造qϕ(z∣x),完成x→qϕ(z∣x)
第二步:通过重参数化技巧从qϕ(z∣x)中得到潜变量z
第三步:把z输入生成模型,经过解码器,输出μθ(z),σθ(z),也就是构造pθ(x∣z),完成z→pθ(x∣z)
第四步:将 Decoder 输出的均值记为x^=μθ(z)
第五步:计算Lrec=∥x−x^∥2和LKL=DKL(qϕ(z∣x)∥p(z))
第六步:反向更新参数ϕ和θ
为什么需要两个方向
生成模型实现的是z→x,但是训练数据给我们的是x,于是出现矛盾:Decoder需要z,可是训练集只有x。所以我们增加一个 Encoder实现x→z
生成阶段
生成阶段不需要使用编码器qϕ(z∣x),直接从先验分布p(z)中采样z。然后传入到解码器中得到新图片。
这里的“先验分布”是我们在建模时人为指定的,由于训练时计算损失时包含DKL(qϕ(z∣x)∥p(z)),因此我们从先验分布中采样的z会落在训练覆盖的区域中
2.1 为何引入潜变量
生成模型要想生成新数据,本质上就需要学数据分布。如果我们真的得到pθ(x)≈pdata(x),那我们理论上可以做x∼pθ(x)。即从学到的数据分布里直接采样一个新样本,这就是“生成”的本质。
传统的最大似然估计默认模型能够直接描述观测变量x的概率分布pθ(x),并通过最大似然估计学习模型参数
θmaxlogpθ(x)
但是对于图像、视频等高维复杂数据,直接对pθ(x)建模通常比较困难。一种常见思路是:
假设观测数据x背后存在一个无法直接观测到的隐变量z,观测数据x是由隐变量z进一步生成的。
如此通过引入潜变量z,将复杂的边缘分布pθ(x)表示为
pθ(x)=∫p(z)pθ(x∣z)dz
这个过程称为对隐变量z进行边缘化(marginalizatio)。因此pθ(x)称为观测数据x的边缘似然(marginal likelihood)或证据(evidence)(类似贝叶斯公式)。其中:
- p(z)称为隐变量的先验分布(prior)
- pθ(x∣z)称为生成模型(generative model)或似然模型
从这里开始,θ从具体的分布参数推广为模型参数。在深度学习中,概率分布的参数通常由神经网络输出,而神经网络由参数 θ决定,因此θ间接决定了分布参数。
2.2 为何要选用编码器实现x→z
x→z实际上在回答:给定当前观测x,什么样的潜变量z更可能产生它?
这对应隐变量的后验分布pθ(z∣x),根据贝叶斯公式有
pθ(z∣x)=∫p(z)pθ(x∣z)dzpθ(x∣z)p(z)
也可以利用联合概率写成
pθ(z∣x)=pθ(x)pθ(x,z)
其中分子
pθ(x∣z)p(z)
通常是可以计算的,真正困难的部分在于分母pθ(x)=∫p(z)pθ(x∣z)dz
因此,要计算一个给定x对应的后验分布pθ(z∣x)必须先计算这个积分
对于一些简单概率模型,如果选择了合适的分布族,积分可能存在解析解。例如在线性高斯模型中,p(z)和p(x∣z)都是高斯分布时,后验p(z∣x)仍然可以得到解析形式。
因此问题真正出现在复杂的非线性、高维潜变量模型中
在VAE等深度生成模型中,pθ(x∣z)通常由一个非线性的神经网络表示。此时边缘似然的积分通常不存在简单的解析解。特别是当z是高维变量时,计算一个高维积分的计算代价可能非常高
因此边缘似然pθ(x)难以精确计算,从而进一步导致后验也难以直接计算。这种情况通常称为后验分布是不可解析intractable的
既然真实后验pθ(z∣x)通常很难直接计算,一种自然的思路就是:构造一个容易计算的概率分布,去近似真实后验。
因此引入
qϕ(z∣x)≈pθ(z∣x)
其中:
- pθ(z∣x):真实后验;
- qϕ(z∣x):人为选取的近似后验;
- θ:生成模型参数
- ϕ:近似后验模型的参数。
在 VAE 中,qϕ(z∣x)通常由一个神经网络实现,也就是所谓的 encoder / inference model。
于是问题从直接计算pθ(z∣x)转换成寻找一个qϕ(z∣x),使其尽可能接近pθ(z∣x)
这个过程称为变分推断。
之所以叫变分,是因为变分推断的优化对象不再只是一个数,而是一个函数或分布。这种对函数空间中对象进行优化的问题通常称为变分问题。
2.3 为什么损失中计算Lrec=∥x−x^∥2和DKL(qϕ(z∣x)∥p(z))
首先需要明确一点,VAE 虽然引入了潜变量和神经网络,其根本目标仍然没有改变:希望模型分布尽可能逼近真实数据分布,即
θmaxlogpθ(x)
前面提及过,直接对pθ(x)建模比较困难,更不要说去优化它了,因此需要寻找一个可计算的目标去近似它,于是定义了证据下界(Evidence Lower Bound, ELBO),它是logpθ(x)的一个下界。
2.3.1 构造证据下界 ELBO
根据pθ(x)的定义pθ(x)=∫pθ(x,z)dz,在积分中乘除同一个近似后验qϕ(z∣x)得到
pθ(x)=∫qϕ(z∣x)qϕ(z∣x)pθ(x,z)dz
根据期望定义
pθ(x)=Ez∼qϕ(z∣x)[qϕ(z∣x)pθ(x,z)]
因此
logpθ(x)=logEqϕ(z∣x)[qϕ(z∣x)pθ(x,z)]
由于对数函数是凹函数,根据 Jensen 不等式有
logE[Y]≥E[logY]
因此
logpθ(x)≥Eqϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]
定义右侧为
LELBO(x;θ,ϕ)=Eqϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]
因此
logpθ(x)≥LELBO
所以它被称为证据下界(Evidence Lower Bound)。这里的“证据”指的就是pθ(x),而 ELBO 是logpθ(x)的下界。
2.3.2 ELBO 与精确后验的关系
ELBO 不仅仅是通过 Jensen 不等式人为构造出的一个下界,它与近似后验和精确后验之间的差异还有非常直接的关系。
考虑
DKL(qϕ(z∣x)∥pθ(z∣x))
根据 KL 散度定义
DKL(qϕ(z∣x)∥pθ(z∣x))=Eqϕ(z∣x)[logpθ(z∣x)qϕ(z∣x)]
根据贝叶斯公式
pθ(z∣x)=pθ(x)pθ(x,z)
代入得到
DKL=Eqϕ[logqϕ(z∣x)−logpθ(x,z)+logpθ(x)]
由于logpθ(x)与潜变量无关,可以提出期望,因此
DKL=logpθ(x)−Eqϕ[logqϕ(z∣x)pθ(x,z)]
其中第二项恰好就是 ELBO,因此得到
真实对数边缘似然logpθ(x)=LELBO+后验似然误差DKL(qϕ(z∣x)∥pθ(z∣x))
由于 KL 散度始终满足DKL≥0,因此必然有LELBO≤logpθ(x)
当qϕ(z∣x)=pθ(z∣x)时,DKL=0
此时
LELBO=logpθ(x)
也就是说,当近似后验完全等于精确后验时,ELBO 就不再只是一个下界,而与真实对数边缘似然完全相等。
当固定参数θ时,由于logpθ(x)与θ无关,因此
ϕmaxLELBO⇔ϕminDKL(qϕ(z∣x)∥pθ(z∣x))
因此 ELBO 同时解决了两个问题:
- 可以作为难以计算的logpθ(x)的可优化下界,从而训练生成模型;
- 会推动近似后验qϕ(z∣x)接近精确后验pθ(z∣x)从而训练推断模型。
2.3.3 将 ELBO 化为 VAE 可计算的形式
根据概率乘法公式
pθ(x,z)=p(z)pθ(x∣z)
将其代入 ELBO:
LELBO=Eqϕ(z∣x)[logqϕ(z∣x)p(z)pθ(x∣z)]
进一步拆开:
LELBO=Eqϕ(z∣x)[logpθ(x∣z)]+Eqϕ(z∣x)[logp(z)−logqϕ(z∣x)]
等号右侧的第二项可以看成KL散度,最终得到 VAE 中最常见的 ELBO:
LELBO=数据拟合项Eqϕ(z∣x)[logpθ(x∣z)]−潜变量分布约束DKL(qϕ(z∣x)∥p(z))
注意,VAE 中出现DKL(qϕ(z∣x)∥p(z)),并不是因为我们人为把原来想比较的精确后验pθ(z∣x)替换成了先验p(z)而是因为将 ELBO 展开之后,这一 KL 项自然出现。
因此,下面两个 KL 散度承担的角色不同:
- DKL(qϕ(z∣x)∥pθ(z∣x))是优化ELBO达成的目标之一
- DKL(qϕ(z∣x)∥p(z))是ELBO的组成部分
第一项
Eqϕ(z∣x)[logpθ(x∣z)]
要求从近似后验得到的潜变量能够使生成模型对真实观测数据赋予较高概率。
也就是说,需要让pθ(x∣z)尽可能大。它对应生成模型对观测数据的拟合能力。
第二项
DKL(qϕ(z∣x)∥p(z))
则要求编码器产生的近似后验不要过度偏离事先规定的潜变量先验。
2.3.4 从最大化 ELBO 到实际训练 Loss
理论上 VAE 希望最大化 ELBO:
θ,ϕmaxLELBO
但是深度学习训练通常采用最小化损失函数的形式,因此定义
JVAE=−LELBO=Lrec−Eqϕ(z∣x)[logpθ(x∣z)]+LKLDKL(qϕ(z∣x)∥p(z))
式中的DKL(qϕ(z∣x)∥p(z))都是可以直接获取的,此项可以直接作为损失函数
VAE中将生成模型设定为采用固定方差的高斯分布,因此−Eqϕ(z∣x)[logpθ(x∣z)]在VAE中可以进一步简化
理论上的重构项为
−Eqϕ(z∣x)[logpθ(x∣z)]
按照定义,需要对qϕ(z∣x)下所有可能的潜变量求期望。
实际训练中通常通过 Monte Carlo 采样进行估计。首先从近似后验采样
z(k)∼qϕ(z∣x)
然后利用样本均值估计期望:
Eq[f(z)]≈K1k=1∑Kf(z(k))
VAE 实际训练中通常只需要少量样本,常见情况为K=1因此
−Eq[logpθ(x∣z)]≈−logpθ(x∣z(1))
VAE的生成模型采用固定方差的高斯分布:
pθ(x∣z)=N(x;μθ(z),σx2I)
因此Decoder仅输出该分布的均值μθ(z),此时高斯分布的负对数似然为
−logpθ(x∣z)=2σx21∥x−μθ(z)∥2+2dlog(2πσx2)
如果σx2被设为固定常数,那么第二项与待优化参数无关,而第一项前面的系数也只是常数。将μθ(z)记为x^,因此在优化意义上
−logpθ(x∣z)∝∥x−x^∥2
Lrec本质上是生成模型的负对数似然,并不天然等于∥x−x^∥2具体采用什么重构损失,取决于如何定义生成分布pθ(x∣z)
2.3.5 从最大似然到 VAE Loss 的完整逻辑
整个 VAE 的训练目标可以总结为:
首先,我们真正希望通过最大似然估计学习生成模型:
θmaxlogpθ(x)
但是
pθ(x)=∫p(z)pθ(x∣z)dz
通常难以计算。因此引入qϕ(z∣x)并构造logpθ(x)的下界:
LELBO≤logpθ(x)
于是改为最大化
θ,ϕmaxLELBO
同时有
logpθ(x)=LELBO+DKL(qϕ(z∣x)∥pθ(z∣x))
因此 ELBO 越紧,近似后验就越接近精确后验。再将 ELBO 展开:
LELBO=Eq[logpθ(x∣z)]−DKL(qϕ(z∣x)∥p(z))
实际神经网络训练最小化负 ELBO:
JVAE=−Eq[logpθ(x∣z)]+DKL(qϕ(z∣x)∥p(z))
在固定方差 Gaussian Decoder 下,进一步得到常见形式:
JVAE∝∥x−x^∥2+DKL(qϕ(z∣x)∥p(z))
2.4 为什么需要重参数化技巧
普通的随机采样操作并没有把z显式写成 Encoder 参数ϕ的可微函数,因此难以直接通过标准反向传播计算损失关于ϕ的梯度。
注意,这并不是说“随机变量本身不能求导”,而是说按照z∼qϕ(z∣x)这种写法,采样过程是一个参数依赖的随机操作,在普通计算图中没有明确的确定性函数关系可以让梯度继续传播。
因此需要对采样过程进行重新表示,这就是重参数化技巧(Reparameterization Trick)
2.4.1 重参数化的基本思想
原本的采样过程为
z∼N(μϕ(x),diag(σϕ2(x)))
其中随机性与 Encoder 输出的分布参数
μϕ(x),σϕ(x)
混合在一起。
重参数化的核心思想是:
将随机性从参数相关的分布 qϕ(z∣x) 中分离出来,放到一个与参数 ϕ 无关的固定噪声分布中。
首先从标准高斯分布采样
ϵ∼N(0,I)
然后令
z=μϕ(x)+σϕ(x)⊙ϵ
其中⊙表示逐元素乘法。由于
ϵ∼N(0,I)
因此
μϕ(x)+σϕ(x)⊙ϵ
仍然服从
N(μϕ(x),diag(σϕ2(x)))
所以重参数化并没有改变原来的概率分布,只是改变了产生这个随机变量的计算方式。
重参数化以后变成
ϵ∼N(0,I),z=μϕ(x)+σϕ(x)⊙ϵ
2.4.2 为什么重参数化以后可以反向传播
重参数化以后,随机性全部集中在ϵ中。
而ϵ的分布N(0,I)与 Encoder 参数ϕ没有关系。
在一次前向传播中,采样得到某个具体的ϵ之后,可以把它看作一个固定值。
于是
z=μϕ(x)+σϕ(x)⊙ϵ
就变成了关于μϕ(x)和σϕ(x)的普通可微函数。
例如
∂μϕ(x)∂z=I
以及
∂σϕ(x)∂z=ϵ
因此损失关于 Encoder 参数的梯度可以通过链式法则计算,这就是重参数化技巧最核心的作用。这使得 VAE 既可以保留潜变量的随机性,又能够利用标准反向传播算法同时训练 Encoder 和 Decoder。