问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

VAE详解:从直观理解到数学推导

创作时间:
作者:
@小白创作中心

VAE详解:从直观理解到数学推导

引用
CSDN
1.
https://m.blog.csdn.net/weixin_45651883/article/details/143809735

变分自编码器(VAE)是一种重要的生成式模型,在机器学习和深度学习领域有着广泛的应用。本文将从直观理解到数学推导,全面解析VAE的工作原理和实现细节。

一、直接认识(感性认识)

在此之前,首先在潜意识里形成一个概念范式,生成模型一般是由编码与解码两个部分构成。

VAE模型的基本结构如上图所示,可以看到它是由两个部分组成,分别为encoder编码器与decoder解码器,其中encoder编码器包括原图片X、编码器encoder以及隐变量Z ;decoder编码器包括隐变量Z、解码器decoder以及新生成图片Y。其中隐变量Z是对图像X的压缩,是生成图像X的关键信息、核心指标。

整个模型训练的工作流程是,先输入大量的训练数据,通过encoder编码器将数据编码为潜在空间上的分布(注意是一个连续分布,而非一单个点),而后通过从Z中采样,经过解码器生成新样本。

由于现实中,无法算出p(x)(关于p(x)可以理解为,假设x是一张图片,那么p(x)表示选这张图片输入到系统的概率,显然易见这个值无法得到),因此计划通过对p(x)进行降维,从而间接通过p(z)描述样本X。同时为便于后期采样解码,我们假设 Z 服从多维多元的标准正态分布(后面你会发现其实Z的每一维度表示一特征、一属性),也就是 p(Z)=N(0,I),这样一来,待模型训练完成后,想要生成新的内容时,只需要从正态分布中采样,后经decoder解码即可。

有了上面的假设,做进一步思考,假设现在要训练模型(默认大家都有神经网络的基础),那必然需要构建损失函数,函数中一定包含重构误差项(这个显而易见),也就是编解码出来的样本与原输入样本间的误差,为了降低此误差,如果直接从p(Z)=N(0,I)中采样,会发生模型无法调优,每次模型生成的新样本,跟当前输入样本毫无相关性,这样会导致重构误差一会大、一会小,导致模型无法收敛。

但如果给定一个真实样本 Xk,假设存在一个专属于 Xk 的分布 p(Z|Xk),并进一步假设这个分布是(独立的、多元的)正态分布(先透露一下,当然这个分布我们是无法求出,需要用神经网络去逼近),这样一来模型在训练中 选择生成样本时,就会有一定指向性、关联性。画一个图,进行解释,

通过上文可知,隐变量Z是多元多维高斯正态分布,上图黑色框内表示隐变量Z的某一维高斯图像全投影,同时也假设了每一个样本都有各自专属的多元多维高斯分布p(Z|Xk),上图蓝色、橙色、绿色各表示对应样本在该维度下的高斯分布95%置信区间投影 ,假设现在需要训练蓝色分布,可以看到,当选择蓝色的点时,对模型的学习是有效的,但当选择橙色、绿色点时,对模型来说这样的学习无意义。

其实vae论文原文中,作者也是直接将p(Z|Xk)定义为多元多维高斯标准正态分布,并未对p(Z)进行定义,因为一旦p(Z|Xk)确定了,p(Z)自然也就确定了。

有了上面的理解,现在回过头重新整理头绪,重新审视一下vae的工作过程,假设有一个输入图片X,通过Encoder编码器,想要实现样本X的分布p(Z|Xk)=N(0,I),因此将Encoder编码器设置为一个神经网络q(Z|X),网络有两个输出,分别为高斯分布的均值(张量)与方差(张量),这样一来就可以通过反向传播算法实现X对应的高斯分布向标准正态分布逼近(假如输入X是一张图片,则它向Encoder神经网络中输入的是每一点的像素值,网络的损失函数是新生成的图片与原图片之间的差异,这个损失函数一般称为重构误差)。

随后在均值与方差生成的多维高斯函数中随机取一值Z,再通过Decoder解码器生成图像,这里需要注意,vae中Decoder解码器并没有直接生成图片,而是输出一个多维多元高斯分布的均值和方差,近而通过均值、方差生成混合高斯分布,也就是生成了样本。同样,将Decoder解码器设置为一个神经网络P(X|Z),它有两个输出,分别为均值(张量)与方差(张量),在训练网络时,只对均值做限定,对对方差不做限定,也就是让均值尽可能接近原样本X。最终待模型完成学习后,只需要从p(Z)=N(0,I) 标准正态分布中随机采样,后经decoder解码即可产生新样本。

其实vae就是用无限的高斯分布去逼近、刻画原样本服从的分布p(x)

在学习vae时,一直未理解“将原数据编码为潜在空间上的分布”这句话的深层含义,随着学习的深入,有所感悟,具体就是同一点可能被X1样本所对应的p(Z|X1)高斯分布所涵盖,也可能被X2样本所对应的p(Z|X2)高斯分所布涵盖等等,这样一来,当选择该点进行生成图像时,才有可能产生新样本,因为原数据经过神经网络对应的潜空间分布是连续的、平滑的。比如下面月相图片,可能拥有的原始样本只有满月和半月两类图片,通过对满月图片学习,可以得到其对应的正态分布如图左侧橙色区域,通过对半月图片学习,可以得到其对应的正态分布如图右侧橙色区域。现在假设在生成样本时,选择了下图蓝点,也就是在标准正态分布中选择了蓝点,这个点经过编码器会生成一张3/4月图片,这是因为这点既学到了满月的信息,又学习到了半月的信息,在经过解码器神经网络时,将两类信息进行了融合,因此产生一个全新的样本。这也就是为什么vae可以生成原始样本以外样本的原因。

下面再举一个具体事例,再看看编码器Encoder部分,下图,现在有3个样本,分别为X1、X2、X3。样本X1经过神经网络后,假设生成一个3维高斯分布,第一维有他对应的均值、方差,第二维有他对应的均值、方差,第三维有他对应的均值、方差,在进行学习时,会让每一维度的均值、方差向标准正态分布N(0,1)逼近。同理,样本X2、X3也会生成自身唯一相对应的3维高斯分布。最终在模型学习完后,在生成新样本时,会在Z中取值,也就是标准正态分布,对应的这里的就是在一个3维标准正态分布中取值,这个值也一定是3维的,且每一维代表一特征 、一属性,比如要生成狗的图片,第一维可能代表毛色,第二维可能代表品种等等,这时就可以通过调节每一维度的值,对生成结果进行动态、指向调整。

当然这里的维度是一个超参数,需要人为设置。

二、数学证明(理性认识)

下面从两个角度进行数学推导:

一、极大似然

极大似然估计是一种通过结果反推模型参数的方法,也就是说,既然某类事件群能够发生,就一定是事件模型最契合参数的作用。极大似然估计中采样需满足一个重要的假设,就是所有的采样都是独立同分布的。

现在假设有n张图片,比如是狗的图片,记作:

狗的图片各个像素分布上一定满足某种关系,换言之一定是满足某种分布模型P(X),因此可以通过极大似然的方式算出模型的参数,最大似然函数记作f(x),其中模型参数记作θ,因此

现在单独看一下上式右边,需要将隐变量Z引入, 因此根据条件等式的定义可以得到

同时为上式引入一个分布qφ(z|x),其中φ为分布q的参数,为方便书写简写为q(z|x),这里的q(z|x)其实就是上文对encoder编码器设置的神经网络,而p(z|x)就是之前假设的多元多维标准正态分布。因此可得,上式得到

下面对式子进行进一步变形,

观察上式可以得出,上式与KL散度公式极度相似。

KL散度:

描述对于同一个随机变量x有两个单独的概率分布P(x)与Q(x),使用KL散度可以衡量这两个概率分布之间的差异

因此原式可以书写为,

顺着思路,通过最大似然对式子进行求解,可以得到

由于上式中p(z|x)无法算出,因为

可以看到,无法去遍历每一个z。同时我们知道,我们需要最小化q(z|x)与p(z|x)之间的差异,因此可以得到,

观察上式,左边为固定值,右边Min KL的值一定会大于等于零(kl其中一定理),因此只需要最大化右式子第一项即可,也就是

这个式子被称为ELBO,全称为 Evidence Lower Bound,即证据下界。也就是不断提高下界,即可以接近目标。

其实我们也可以通过高等数学中Jensen不等式 得到这个式子,

因为log函数是凹函数,故存在

可以看到,我们通过Jensen不等式,也可以得到下界。

关于ELBO的求解

因此最终求解的式子变为,

至此,得到最终结果,也就是目标函数,先看第一项,这个式子代表的意思是,先从q(z|x)中随机采样一z,而后再让log p(x|z)的概率最大,这个就是重构误差;第二项,最小化q(z|x)与p(z)的差距,不就是希望编码后的分布与p(z)尽可能的相同吗。

下面分别对上式进行求解,先看KL散度这一部分,要想使原式最大,KL(q(z|x)||p(z))必须最小,因此也就是要求,

由前面的知识可知, q(z|x)是神经网络,它刻画的是一个高斯分布,p(z)是多维标准正态分布,他们的维度相同,同时各个维度间相互独立,因此只求一个维度,其余的完全相同,现在假设某一维为zj,因此

设log 是以e为底,则

分别对上式进行化简,

假设高斯分布是M维,因此原式等于,

至此KL散度就算出来了,下面再求解第一项,

也就是,

这里由于无法实现对z的全部采样遍历,因此采用蒙特卡罗进行估算,假设从q(z|x)中采样n个样本,

这样一来就可以进行求解,同时,上文假设P(X|Z)为Decoder解码器的神经网络,它有两个输出,分别为均值(张量)与方差(张量),他也是一个多维高斯分布,同时在训练网络时,只对均值做限定,对方差不做训练。因此做进一步假设,

也就是,均值用f(z)去表示,方差用常数C和I相乘表示。

将上式用多维高斯分布进行表示,

因此最终得到目标函数,

其中第一项代表重构误差,也就是mse,第二项代表最小化KL散度,也就是正则相,防止模型过拟合。

关于重参数化技巧

由于上式求导过程中,因为z是采样得出的,无法进行方向传播,因此需要进行重参数化。

所谓的重参数化技巧,就是,假设

我们可以构造一个概率分布,这里构造一个标准高斯分布

然后从其中采样,之后再通过下面的公式,

就可以间接认为是从q(z|x)中采样的,这里简单证明一下,

可以看到先从标准正态分布采样后,在经过公式,与直接从q(z|x)采样一模一样。这样一来避免了从q(z|x)中直接采样,从而可以实现反向传播。

下面从另一个角度,推到公式,

二、KL散度

这种角度下,思路也很直接

可以看到,与前面的计算解过如出一辙。

最后重新总结一下整个vae训练过程,这里借用一下B站“吃花椒的麦”UP主视频里的图,

可以看到当编码器接受到新图片后 ,通过神经网络生成两个张量,一个是高斯分布的均值,一个是高斯分布方差的对数(因为神经网络生成出来的值有正有负,而方差必须为正值),而后通过重参数技巧,从标准高斯分布中随机取一值,经过简单的组合后,生成一个多维高斯分布,而后再从中随机取一值,经过解码器生成新样本。

三、两类误差的作用

上图中也很好的将vae模型中目标函数所包含的两个误差表示了出来,即重构误差与最小化KL散度。下面对两个误差做一下定性分析,

将手写数字的数据集送到vae中进行训练,将其隐空间进行可视化,

第一张图,是在模型目标函数中只有重构误差时,所对应的隐空间,可以看到隐空间分布不连续,存在当生成新样本时,随机选择一点,无法生成的情况,有点过拟合,隐空间类似于点分布,而非空间分布。

第二张图,是在模型目标函数中只有最小化KL散度时,所对应的隐空间,可以看到隐空间分布过于混乱,在后期生成新样本时,随机选择一点,无法对生成的新样本进行指向设定。(之前不明白为什么单纯的最小化KL散度,也能够训练出模型、生成新样本,其实可以简单理解为当在最小化KL散度时,因为P(x)的值是定值,而且基本等于KL散度+ELBO,也就是在最小化KL散度的情况下,ELBO在最大化,因此也可以训练出模型来)

第三张图,是在模型目标函数中重构误差与最小化KL散度共同作用下,所对应的隐空间,可以看到隐空间分布连续,且同类样本分布相对聚集,不同样本有明显的分界线。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号