首页 > 其他分享 >【GAN优化外篇】详解生成模型VAE的数学原理

【GAN优化外篇】详解生成模型VAE的数学原理

时间:2022-10-12 17:05:14浏览次数:66  
标签:似然 编码器 变量 VAE GAN 解码器 数学原理 高斯分布


最近在学习生成模型的相关知识,这篇文章将介绍一下变分自编码器(Variational Auto-encoder),本文只介绍一些粗浅内容,不会涉及比较深刻的问题。

作者&编辑 | 小米粥

1. 自编码器

自编码器(autoencoder)在深度学习中占有重要地位,它最开始的目的是用于降维或特征学习。一般的自编码器由编码器(encoder)和解码器(decoder)两个神经网络构成,如下图所示:

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型

样本x经过编码器得到它的某种编码表示z,而且z的维度小于x,再将z送入解码器则可得到样本x的重构x'。如果重构的效果比较好,则认为编码器成功地学到了样本的抽象特征,也可以理解为实现了降维。

当编码器学习到数据的抽象特征z后,我们不仅可以用于重构样本,还可以把提取到的抽象特征用于分类问题,只需要在编码器后接一个分类器即可,如下图所示:

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_02

到了VAE,则期望构建一个生成模型,它将z视为生成样本的隐变量(隐变量,顾名思义是指不可观测到的变量,但其对模型中可观察变量的输出存在影响),并对编码器和解码器进行了一些修改,最终实现了一个性能卓越的生成模型。

2.VAE的思想

与FVBN和GAN等生成模型不同,我们希望通过定义一个由隐变量“控制”的生成模型:

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_03

这个生成模型生成样本的方式将十分简洁优雅:先从隐变量的分布Pθ(z)中采样得到z,然后在条件分布Pθ(x|z)中采样即可得到生成样本,但是这个生成模型无法搭建出来!因为训练生成模型通常需要将对数似然函数极大化来求解模型参数θ,即对训练样本{x(1),x(2),...,x(n)},要求

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_04

这里必然要计算Pθ(x),分析Pθ(x)的计算式,积分号内部的计算没有问题,对于隐变量的先验分布Pθ(z)可以将其设计为简单的高斯分布,对Pθ(x|z)可使用一个神经网络来学习,无法解决的地方是遍历所有的隐变量z求积分!而且,隐变量z的后验分布

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_05

也是难以求解的(因为其分母无法计算)。

一般的训练生成模型必须先求解对数似然函数(也就是说以似然函数作为损失函数),然后使其最大,VAE的想法是:虽然无法求解准确的对数似然函数,但可以设法得到对数似然函数的下界,然后令下界极大即可,这就相当于近似地令对数似然函数达到极大了。

具体做法是这样的:刚才说到隐变量z的后验分布Pθ(z|x)是难以计算的,VAE引入了一个新的概率分布qφ(z|x)来逼近Pθ(z|x),这时的对数似然函数为

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_06

最终的式子由三项组成,前两项是可以计算的,处理细节下面再说,第三项无法计算,但是根据KL散度的性质可知第三项必定大于等于0(这个性质涉及到泛函中的变分,变分自编码器的变分即来源于此),也就是说

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_07

我们将上述不等式右侧称为一个变分下界(ELBO),记为L(x(i);θ,φ),这时只需要最大化变分下界即可,即将变分下界作为模型的损失函数:

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型_08

VAE的最核心的想法已实现,接下来将描述一些细节,如何将数学模型转换到神经网络上?如何计算变分下界EBLO。

3. 编码器

首先关注EBLO的第二项 ,它是计算隐变量的后验分布的近似分布qφ(z|x(i))和隐变量的先验分布Pθ(z)的KL散度。在基于实际中的经验,作出两个假设:1.隐变量的先验分布Pθ(z)为D维标准高斯分布N(0,I),注意这时的Pθ(z)将不包含任何参数,重新记为P(z);2.隐变量的后验分布的近似分布qφ(z|x(i))为各分量彼此独立的高斯分布N(μ,Σ;x(i)),也就是说对每一个样本x(i),均对应一个高斯分布N(μ,Σ;x(i))。现在需要只要再知道μ(x(i)),Σ(x(i))就可以计算KL散度了,我们用两个神经网络(即编码器,参数为φ)来求解均值、方差的对数(因为方差的对数的值域为全体实数,而方差的值域为全体正实数,使用神经网络拟合方差的对数不需要精确设计激活函数的值域,相对方便)。由于D维的隐变量z的每个维度彼此独立,则均值为D维向量,而方差为D维对角矩阵,即

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_09

方差其实也只有D个需要学习参数,而不是DxD个。这里所谓的编码器的输入为样本x(i),第一个编码器输出D维向量为

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_10

第二输编码器出也为D维向量,即:

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型_11

即有

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型_12

由于两个高斯分布每个维度彼此独立,KL散度可分开计算,其中第d维的KL散度值为:

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_13

上述计算过程比较简单,在此不展开。由于每个分量彼此独立,易知总KL散度为:

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型_14

在计算上,通过让编码器学习隐变量后验分布的近似分布的均值和方差,得到了隐变量后验分布的近似分布的表达式,从而可以计算KL散度,本质上,VAE训练编码器是希望KL散度值达到最小,即令后验近似分布趋近于标准正态分布,就是说对每个样本 , qφ(z|x(i)) 都向标准高斯分布靠拢。

4. 解码器

现在关注ELBO的第一项 ,为了计算这一项,需要使用一个经验上的近似

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_15

意思是说计算这项时并不需要采样所有不同z再计算log P(x(i)|z)求均值,而只需要从中采样一次即可。这样的做法看似是不合理,但实际效果证明约等于的关系是成立的,联想到普通自编码器中是一一映射的,一个样本x对应一个隐变量z,可想象qφ(z|x(i))是一个非常锐利的单峰分布,故多次采样计算均值和一次采样效果相差不大。

接下来,为了计算log P(x(i)|z),我们再次作出假设,假设Pθ(x|z)是伯努利分布或高斯分布。当假设为伯努利分布时,对应x为二值 、Q个维度彼此独立的向量,而伯努利分布的Q个参数交给神经网络学习,这个神经网络即解码器,它由θ来参数化,输入为隐变量z,输出为:

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型_16

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_17

现在可以计算样本的似然为:

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_18

相应的对数似然为:

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_19

所以只需要把编码器的最后一层激活函数设计为sigmoid函数,并使用二分类交叉熵作为解码器的损失函数即可。

若假设Pθ(x|z)为高斯分布,对应x为实值、Q个维度彼此独立的向量,而高斯分布每个维度的方差固定为某个常数σx σ,Q个均值参数交给神经网络学习,这个神经网络即解码器,它由θ来参数化,输入为隐变量 ,输出为

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_10

解码器即

【GAN优化外篇】详解生成模型VAE的数学原理_生成模型_21

现在可以计算样本的似然函数为:

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_22

相应的对数似然为:

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_23

所以需要把编码器的最后一层激活函数设计值域为全体实值的激活函数,并使MSE作为损失函数即可。

在计算上,基于经验知识使用了一次采样的近似操作,并依靠编码器学习Pθ(x|z)的参数,最后计算了条件概率下样本的似然。VAE希望将解码器部分对应的损失函数最大,本质上是希望样本的重构误差最小,这在伯努利分布中非常明显,在高斯分布中,MSE损失希望将编码器的输出(高斯分布的均值)与样本接近。

5.重参数

回顾上面的过程,正向推断过程是这样的:将样本x(i)送入编码器可计算得到隐变量后验近似分布的各项参数(即高斯分布的均值和方差),这时需要从分布中采样一个隐变量z,然后将z送入编码器,最后计算损失函数,反向传播更新参数。

其实这里一个小问题,从分布中采样的过程是不可导的,即编码器计算的均值和方差参数在采样得到隐变量后就被“淹没”了,解码器面对的只是一个孤立的不知从哪个高斯分布采样得到的z。需要把μ和Σ告诉编码器,否则反向传播时,梯度传到采样得到的z就会断掉。

重参数技巧(Reparameterization Trick)做了一个简单的处理,采样隐变量时,直接在标准正太分布N(0,I)中采样得到  ,然后考虑编码器学得的均值和方差参数,令

【GAN优化外篇】详解生成模型VAE的数学原理_编码器_24

这样,反向传播的环节被打通。为了便于直观理解,整个VAE的正向流程如下图所示:

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_25

训练完成后,推断时,直接从标准高斯分布p(z)中采样得到隐变量z,然后送入解码器,在伯努利分布中解码器输出概率值;在高斯分布中解码器输出均值,即生成的样本。

6. 小评

VAE与GAN不同,GAN属于隐式概率生成模型,在GAN中没有显式出现过似然函数,而VAE属于显式概率生成模型,它也力求最大化似然函数,但是不像FVBN模型中存在精确的似然函数以供最大化,VAE得到了似然函数的下界,近似地实现了极大似然。

在图像生成问题上,VAE的优点是多样性好,而一个比较明显的缺点是,生成图像模糊,这可能是使用极大似然的模型的共同问题,因为极大似然的本质是最小化

【GAN优化外篇】详解生成模型VAE的数学原理_似然函数_26

再深入一些,这个问题的解释设计到KL散度的性质,在此便不再展开。

[1]Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013).

总结

这篇文章讲了一下原始的自编码器,然后讲了VAE的基本思想,以及如何构造编码器和解码器,最后简要对VAE的一个缺点进行了评价。


标签:似然,编码器,变量,VAE,GAN,解码器,数学原理,高斯分布
From: https://blog.51cto.com/u_14122493/5751157

相关文章

  • 【GAN优化】解决模式崩溃的两条思路:改进优化和网络架构
    今天讲述的内容仍然是GAN中的模式崩溃问题,首先将说明模式崩溃问题的本质,并介绍两种解决模式崩溃问题的思路,然后将介绍一种简单而有效的解决方案MAD-GAN,最后一部分将给出MAD-......
  • 【GAN优化】详解GAN中的一致优化问题
    GAN的训练是一个很难解决的问题,上期其实只介绍了一些基本的动力学概念以及与GAN的结合,并没有进行过多的深入。动力学是一门比较成熟的学科,有很多非常有用的结论,我们将尝试将......
  • 【GAN优化】从动力学视角看GAN是一种什么感觉?
    今天讲述的内容是GAN与动力学,这是一个非常好玩、非常新鲜的视角。考虑到很多人微积分和线性代数等知识的涉猎不多,我将会对涉及的内容都做出基本说明,也并不会涉及过深入的东......
  • 【GAN优化】如何选好正则项让你的GAN收敛
    今天讲述的内容还是GAN的训练,也是最后一期,做几个简单的小实验,告诉大家怎么给GAN加正则项,使得你的GAN尽可能收敛。其实今天的内容本来还是与动力学结合很紧密,但是考虑到复杂......
  • 【GAN优化】GAN优化专栏栏主小米粥自述,脚踏实地,莫问前程
    作者|小米粥编辑|言有三随走随行其实我一直非常佩服那些有规划又努力的人,因为我是一个对自己没太多规划的人。本科选择了物理专业,上学期间也算得上比较努力吧,但是物理是......
  • 【GAN优化】详解对偶与WGAN
    越学习越发现自己知之甚少,道阻且长,还是认真看下这篇文章,好好琢磨琢磨GAN吧。今天将和大家一起学习在GAN界占有重要位置的WGAN,它提出了一种新的距离度量,较之前的f散度,它的数......
  • 【GAN优化】一览IPM框架下的各种GAN
    今天的这篇小文将是GAN模型理论介绍的最后一篇。有一些内容,所用数学技巧和方法非常高大上,理论结果也非常漂亮,但是完全搞明白其中的门门道道需要相当大精力和知识铺垫,况且实......
  • 【GAN优化】GAN训练的小技巧
    头一阵子放假了,专栏都没有怎么更新了,今天开始继续更新(想问问小伙伴们都放了多久的假期?我们只有两周感觉时间好短呀~)作者&编辑|小米粥上一期中,我们说明了GAN训练中的几个问......
  • 【GAN的应用】基于对抗学习的图像美学增强方法
    好久不见~甚是想念由于年底了要处理的事情变得特别多,突然间醒悟好久没更新啦于是深夜给大家带来一篇生成对抗网络在图片美学增强上的应用。首先来个小问题,你能猜出下图的(b)(c)......
  • 【每周CV论文推荐】StyleGAN人脸属性编辑有哪些经典论文需要阅读
    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。当前人脸图像领域的研究和落地......