EM算法的缺陷
EM算法通过迭代的方式解决了引入隐变量之后导致的没办法直接计算MLE的问题,但是在EM算法中,我们要求算隐变量的后验分布,但是在实际情况下,我们面临着很多情况
有可能我们知道隐变量形式,但是无法计算后验分布
有可能我们完全不知道隐变量的形式
在图像生成领域,我们通常确实没有“真实隐变量”的分布模型;隐变量是我们人为引入的建模工具,而不是数据背后已知存在的物理量。
VAE引入
而VAE就是解决第二种情况的其中一种方法,它的处理方式也非常的简单粗暴:
他的流程就变成了:
正态分布 ->(采样)->隐变量z -> 神经网络 -> x
回顾EM算法中的推导,极大似然函数可以写成下面的形式:
logpθ(x)=z∑q(z)logq(z)pθ(x,z)+DKL(q(z)∣∣pθ(z∣x)) 前半部分就是ELBO,后半部分是一个KL散度,其中q(z) 是EM引入的一个任意分布,在EM算法中他被不断的代成隐变量 z 的后验分布,在VAE中,他做了两个限定处理:1.将这个分布限定形式为高斯分布;2.用神经网络拟合p(z|x)。最后就变成神经网络输入x 输出的是一个μ,σ ,这就是那个编码器,它实际上就是一个后验分布的拟合器,输入的是数据,输出的却是一个分布,分布的模型被设定为高斯分布,分布参数由网络给出
这样,整个式子就变成了:
logpθ(x)=z∑qϕ(z)logqϕ(z)pθ(x,z)+DKL(qϕ(z)∣∣pθ(z∣x)) 从后面一项可以看出,当编码器的输出贴近后验分布时,ELBO将会达到最大值,所以说最大化ELBO实际上是在最大化
z∑qϕ(z∣x)logqϕ(z∣x)pθ(x,z) 这是相当合理的,实际上就相当于前面的计算EM算法的E步被替换成了神经网络直接输出;
那ELBO的评估也顺理成章的可以写成:
ELBO(x;θ,ϕ)=∫qϕ(z∣x)logqϕ(z∣x)pθ(x,z)dz=∫qϕ(z∣x)logqϕ(z∣x)pθ(x∣z)p(z)dz=∫qϕ(z∣x)logpθ(x∣z)dz+∫qϕ(z∣x)logqϕ(z∣x)p(z)dz=∫qϕ(z∣x)logpθ(x∣z)dz−∫qϕ(z∣x)logp(z)qϕ(z∣x)dz 第一项为期望,第二项为一个散度,可以写为:
ELBO(x;θ,ϕ)=Eqϕ(z∣x)[logpθ(x∣z)]−DKL(qϕ(z∣x)∥p(z)) 第一项定义为一个J1 他是一个期望,可以使用蒙特卡洛方法来计算,第二个定义为J2是一个KL散度(注意,这是ELBO拆出来的散度,不是上面的那个散度)
当然,在这里出现了logpθ(x∣z),这实际上是已知隐变量生成了数据,所以我们称之为解码器,在这使用蒙特卡洛方法来估算第一项,具体步骤为:
第一步:采样隐变量
[z(1),…,z(L)∼qϕ(z∣x)] 对于同一张真实图像 x,从编码器给出的分布中采样多个不同的 z
第二步:计算每个样本的对数似然
[ℓl=logpθ(x∣z(l))] 将每个 (z(l))输入解码器,计算真实图像(x)在解码器输出的概率分布下的对数概率密度。
第三步:求平均
[Lrec=L1l=1∑Lℓl] 用多个采样结果的平均值,近似原本难以直接计算的期望。
假设解码器输出的也是高斯分布[pθ(x∣z)=N(x;μθ(z),σx2I)],那么他的对数概率密度就是:
[logpθ(x∣z)=−2Dlog(2πσx2)−2σx2∥x−Gθ(z)∥22] 带入蒙特卡洛:
Lrec=−2Dlog(2πσx2)−2Lσx21l=1∑L∥x−Gθ(z(l))∥22 这里假设每个采样对应相同的固定方差。J1这一项实际表明的是采样的图像和生成的图像的相似性,所以我们把这一项叫做重构误差项,忽略掉不影响参数的常数项,并且将蒙特卡洛设置为单样本采样,实际上优化这一项可以整理为:
J1=−21Σd=1D(xd−x^d)2+const 实际上就变成了预测值和采样值的二范数...
对于第二项J2 两个高斯分布的KL散度是有闭式解的
p=N(μ1,Σ1),q=N(μ2,Σ2)DKL(p∥q)=21[logdetΣ1detΣ2−d+tr(Σ2−1Σ1)+(μ2−μ1)⊤Σ2−1(μ2−μ1)] 这一项实际上是在让编码器编码出来的后验分布逼近标准正态分布,最终VAE就把一个标准高斯做成了一个映射为数据分布的一个函数。我是这么理解的
所以VAE的训练实际上就是在同时训练解码器,编码器,训练的目的就是最大化ELBO。
前面的推导实际上是从EM算法逐步推导过来的,实际上,我们可以忽略掉EM过渡过来的过程,而是来直接思考VAE更抽象的过程:
从生成式模型的角度看,生成数据的核心是两个要素:一是一个易于采样的初始概率分布,二是从该分布到真实数据分布的生成映射。 VAE 通常将隐变量的先验设为标准高斯分布,并通过解码器学习从隐变量到数据的生成规律。其难点在于,训练时需要知道如何为每个真实样本找到合适的隐变量表示。为此,VAE 引入编码器,通过神经网络将真实数据映射为隐变量的近似后验分布,并利用重构项训练解码器,同时通过 KL 正则项约束近似后验与先验之间的差异,使编码得到的隐变量分布与生成时使用的先验相协调。因此,编码器主要服务于生成模型的训练,而解码器负责学习最终的生成过程;训练完成后,可以直接从先验分布采样,并通过解码器生成新数据。 需要注意的是,KL 正则化并不保证聚合后验严格等于标准高斯分布,而是在保留数据信息与匹配先验之间进行权衡。