【机器学习】VAE变分自编码器学习笔记

序言
  • VAE学习笔记,综合网上的一些文章加之自己的理解
1. VAE概述
  • VAE = Variational Auto Encoder,变分自编码器。是一种常见的生成模型,属于无监督学习的范畴。它能够学习一个函数/模型,使得输出数据的分布尽可能的逼近原始数据分布,其基本思路是:把一堆真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个VAE模型
  • VAE的设计思路很巧妙,它结合了泛函/变分推断/概率统计/深度学习等诸多理论,最后落地到一个具体的模型中,道路曲折但前途光明,下面我们就来仔细研究一下
2. VAE的直观理解
  • Variational:变分是指求泛函的极值,泛函简单理解就是函数的函数,那么变分就是找到一个最能描述原始数据分布的分布;相比AE,VAE不再把分布映射到固定值/变量上,而是映射到一个分布上,网络模型中的bottle neck被分解成了两个向量:均值向量+方差向量。VAE的变分是基于KL散度性质推导的,我们将在VAE公式推导部分进行介绍。VAE模型编解码示意图
  • VAE的Encoder用来计算均值和方差,均值和方差是用来描述正态分布的数字特征 x ∼ N ( μ , σ 2 ) x\sim N(\mu ,\sigma ^{2} ) xN(μ,σ2),不同的 μ μ μ σ σ σ取值对应不同位置、不同形状的正态分布。这里的均值和方差并不是确定的统计量而是两个函数,是由神经网络训练得到的,这个也会在VAE公式推导部分进行介绍。VAE的框架图如下
  • 其中后验分布 q ( z ∣ x ) q(z|x) q(zx)是先验分布 p ( z ) p(z) p(z)的近似; ε ε ε是服从标准多元高斯分布 N ( 0 , I ) N(0, I) N(0,I)的标准化随机变量, z z z是服从高斯分布的随机变量,称为潜在变量或隐变量; p ( x ∣ z ) p(x|z) p(xz)是似然分布,即知道变量 z z z的分布后根据 z z z来估计 x ′ x^{'} x的分布
3. VAE的设计思路-VAE是如何产生的
  • 普通AE以确定性方式(单值)编码输入的潜在属性,而VAE以概率方式(分布)编码,如下图:我们将照片中"Smile"的潜在属性进行编码,普通AE为潜在属性提供一个值、而VAE则表达为属性的概率分布
  • 从实际情况来看,将潜在属性编码为可能值的范围也是更合理的方式,例如,如果将蒙娜丽莎的微笑特征设置为特定单值显然不如将微笑特征设定为某个取值范围更合适。VAE就是用取值的”概率分布”代替普通AE的单值来描述对特征的观察。通过这种方式,我们将输入的每个潜在属性都表示为概率分布,如下图对各种特征的概率表达
  • 当解码时,我们将从每个潜在分布中随机采样,生成一个向量作为解码器模型的输入。由于有了每个属性的概率分布,我们可以简单地从分布中抽取任何值来生成一个新的输出,而且自带过渡效果

另一个能够表达VAE设计思想的例子:

  • 如图,有两张训练图片一张全月图一张半月图,经过训练AE已经能无损地还原出两张图片,当我们在code空间两个图片编码点中间取一个点给解码器,预期能得到一张介于全月和半月之间的图片,但却得到了模糊无法辨认的乱码图,因为是单值编码,AE模型并没有找到code空间点与点之间迁移时的规律
  • 重构输入的过程是否有噪声,是VAE和普通AE的区别之一。当我们引入噪声,如图:给两张图片编码的时候加上噪声,使得每张图片的编码点出现在绿色箭头所示范围内,模型训练时,绿色范围内的点都可能被采样到,解码器在训练时就能将绿色范围内的点尽可能还原成和原图相似的图片。从code中间取的介于全月和半月编码空间的点,就能得到两种图的过渡结果如3/4全月图
  • 编码器加了噪声之后可以有效覆盖失真区域,但仍然不充分,如上图中黄色点仍未被覆盖,当把噪声无限拉长,对每一个样本来说,它的编码会覆盖整个编码空间,同时要保证在原编码附近编码的概率最高,离原编码点越远编码概率越低,如下图
  • 这其实就是一个从离散到连续的过程,高斯分布能够描述这种编码特征,当然也可以用其他的分布类型来描述
4. VAE的原理及公式推导
4.1 原理
  • VAE是一种无监督的生成模型,其理论基础是建立在GMM高斯混合模型之上。GMM认为任何一个数据的分布,都可以看作是若干高斯分布的叠加。如下图,如果 P ( x ) P(x) P(x)是一种分布的话,存在一种拆分方法能让它表示成图中若干浅蓝色曲线对应的高斯分布的叠加
样本x分布的混合模型:左边-离散变量m,右边-连续变量z
  • 上图是样本 x x x的分布的离散和连续表达,我们关注能够完整覆盖编码范围的连续分布。如右图, z z z是由一个标准正态分布所产生的向量, z z z的每一维度都代表了一种属性,且 z z z的每一个属性的分布都服从高维高斯分布,通过 z z z每一个属性的高维高斯分布来拟合输入样本的真实分布,这部分对应到"Smile"照片的各种属性理解。对于每个采样 x ∣ z x|z xz,会有两个函数 u ( z ) u(z) u(z) σ ( z ) \sigma(z) σ(z),分别对应到高斯分布的均值和方差,然后在积分域上所有的高斯分布的累加就得到原始分布 p ( x ) p(x) p(x)的近似,即 p ( x ) = ∫ z p ( z ) p ( x ∣ z ) d z p(x)=\int\limits_{z}^{} p(z)p(x|z)dz p(x)=zp(z)p(xz)dz ,整个网络就是把样本 x x x经过降维表达成 z z z,再由 z z z根据低维特征重构原始输入,对应了一个完整的Encoder-Decoder过程
VAE为每个样本构造专属的正态分布,然后再由z进行采样重构
  • 如上介绍,我们的目的就是求解 x x x的分布 p ( x ) p(x) p(x)。由于 p ( z ) p(z) p(z)是已知的, p ( x ∣ z ) p(x|z) p(xz)未知而 x ∣ z ∼ N ( μ ( z ) , σ ( z ) ) x|z\sim N(\mu(z),\sigma(z)) xzN(μ(z),σ(z)),于是我们真正要求解的是 μ ( z ) μ(z) μ(z) σ ( z ) σ(z) σ(z)两个函数的表达式。 p ( x ) p(x) p(x)通常非常复杂,导致 μ ( z ) μ(z) μ(z) σ ( z ) σ(z) σ(z)难以计算,因此引入两个神经网络进行求解:
    • 第一个神经网络是Decoder,用于求解 μ ( z ) μ(z) μ(z) σ ( z ) σ(z) σ(z)两个函数,等价于求解 p ( x ∣ z ) p(x|z) p(xz)
      对应 z z z的每个属性,对应于GMM中每个浅蓝色的子分布
    • 第二个神经网络是Encoder,用于求解 q ( z ∣ x ) q(z|x) q(zx) q ( z ∣ x ) q(z|x) q(zx)可以表示任何的分布
      对应数据 x x x的分布,对应于GMM中黑色的总体分布
  • 引入Encoder神经网络的目的是为了辅助Decoder神经网络的求解,这里用到了变分推断的方法,简单解释变分推断:对难处理的概率密度函数进行估计的方法,假设一个分布 q ( z ; λ ) q(z; λ) q(z;λ)-当参数是 λ λ λ z z z的分布,该分布是易表达和求解的,通过改变分布的参数 λ λ λ,使 q ( z ; λ ) q(z; λ) q(z;λ)靠近 p ( z ∣ x ) p(z|x) p(zx),这种策略将计算 p ( z ∣ x ) p(z|x) p(zx)的问题转化成了缩小距离的优化问题 λ ∗ = a r g min ⁡ λ d i v e r g e n c e ( p ( z ∣ x ) , q ( z ; λ ) ) \lambda ^{*} =arg\min_{\lambda } divergence(p(z|x),q(z;\lambda )) λ=argminλdivergence(p(zx),q(z;λ)),收敛后就可以用 q ( z ; λ ) q(z; λ) q(z;λ)来代替 p ( z ∣ x ) p(z|x) p(zx)了。 p p p q q q之间的距离用KL散度来衡量,也可以选择其他可衡量两个概率分布差异性的指标。KL散度是两个分布之间差异的度量,计算公式
    K L ( p ( x ) ∣ ∣ q ( x ) ) = ∫ p ( x ) l n p ( x ) q ( x ) d x KL(p(x)||q(x))=\int p(x)ln\frac{p(x)}{q(x)}dx KL(p(x)∣∣q(x))=p(x)lnq(x)p(x)dx
    KL散度满足非负性但不满足对称性,即 K L ( p ∣ ∣ q ) ≥ 0 , K L ( p ∣ ∣ q ) ≠ K L ( q ∣ ∣ p ) KL(p||q)\ge 0, KL(p||q) \ne KL(q||p) KL(p∣∣q)0,KL(p∣∣q)=KL(q∣∣p). KL散度其实就是一个泛函,要对泛函求极值就需要用到变分法,VAE的变分下界就是基于KL散度得到的。通过最小化KL散度,使两个分布尽可能地相似
4.2 公式推导
  • 我们的目的:最大化观测 x x x的可能性,即最大化 ∑ x log ⁡ p ( x ) \sum_{x}^{} \log_{}{p(x)} xlogp(x),同时要减小 q ( z ∣ x ) q(z|x) q(zx) p ( z ∣ x ) p(z|x) p(zx)的距离
  • 为了求解 p ( x ) p(x) p(x),我们进行如下变换

log ⁡ p ( x ) = ∫ z q ( z ∣ x ) log ⁡ p ( x ) d z = ∫ z q ( z ∣ x ) log ⁡ p ( z , x ) p ( z ∣ x ) d z = ∫ z q ( z ∣ x ) log ⁡ p ( z , x ) q ( z ∣ x ) q ( z ∣ x ) p ( z ∣ x ) d z = ∫ z q ( z ∣ x ) log ⁡ p ( z , x ) q ( z ∣ x ) d z + ∫ z q ( z ∣ x ) log ⁡ q ( z ∣ x ) p ( z ∣ x ) d z = ∫ z q ( z ∣ x ) log ⁡ p ( z , x ) q ( z ∣ x ) d z + K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) \begin{aligned} \log_{}{p(x)} &= \int\limits_{z}^{} q(z|x)\log_{}{p(x)}dz\\ &= \int\limits_{z}^{} q(z|x)\log_{}{\frac{p(z,x)}{p(z|x)}}dz\\ &=\int\limits_{z}^{} q(z|x)\log_{}{\frac{p(z,x)q(z|x)}{q(z|x)p(z|x)} } dz\\ &=\int\limits_{z}^{} q(z|x)\log_{}{\frac{p(z,x)}{q(z|x)} } dz + \int\limits_{z}^{} q(z|x)\log_{}{\frac{q(z|x)}{p(z|x)} } dz\\ &=\int\limits_{z}^{} q(z|x)\log_{}{\frac{p(z,x)}{q(z|x)} } dz + KL(q(z|x)||p(z|x)) \end{aligned} logp(x)=zq(zx)logp(x)dz=zq(zx)logp(zx)p(z,x)dz=zq(zx)logq(zx)p(zx)p(z,x)q(zx)dz=zq(zx)logq(zx)p(z,x)dz+zq(zx)logp(zx)q(zx)dz=zq(zx)logq(zx)p(z,x)dz+KL(q(zx)∣∣p(zx))

  • 这里我们把 q ( z ; l a m b d a ) q(z; lambda) q(z;lambda)换成了 q ( z ∣ x ) q(z|x) q(zx),即 l a m b d a lambda lambda就是 x x x,用 q ( z ∣ x ) q(z|x) q(zx)来近似 p ( z ∣ x ) p(z|x) p(zx);上面式子右边一项为 q ( z ∣ x ) q(z|x) q(zx) p ( z ∣ x ) p(z|x) p(zx)两个分布的KL散度,根据KL散度的非负性,我们得到 log ⁡ p ( x ) \log_{}{p(x)} logp(x)的一个下界:
    log ⁡ p ( x ) ≥ ∫ z q ( z ∣ x ) log ⁡ ( p ( x ∣ z ) p ( z ) q ( z ∣ x ) ) d z \log_{}{p(x)} \ge \int\limits_{z}^{} q(z|x)\log_{}{(\frac{p(x|z)p(z)}{q(z|x)} )} dz logp(x)zq(zx)log(q(zx)p(xz)p(z))dz

  • 我们将这个下界定义为 ELBO = evidence lower bound,记为 L b = ∫ z q ( z ∣ x ) log ⁡ ( p ( x ∣ z ) p ( z ) q ( z ∣ x ) ) d z L_{b}=\int\limits_{z}^{} q(z|x)\log_{}{(\frac{p(x|z)p(z)}{q(z|x)} )} dz Lb=zq(zx)log(q(zx)p(xz)p(z))dz,代入原式可以得到
    log ⁡ p ( x ) = L b + K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) \log_{}{p(x)} = L_{b} + KL(q(z|x)||p(z|x)) logp(x)=Lb+KL(q(zx)∣∣p(zx))

  • 由于 log ⁡ p ( x ) \log_{}{p(x)} logp(x)不包含 z z z,当通过 q ( z ∣ x ) q(z|x) q(zx)来最大化ELBO时, log ⁡ p ( x ) \log_{}{p(x)} logp(x)为常量, K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) KL(q(z|x)||p(z|x)) KL(q(zx)∣∣p(zx))的值逐渐变小,最终趋于0,此时 q ( z ∣ x ) q(z|x) q(zx) p ( z ∣ x ) p(z|x) p(zx)的分布会十分接近。通过找 p ( x ∣ z ) p(x|z) p(xz) q ( z ∣ x ) q(z|x) q(zx)来使ELBO达到最大值,从而使 log ⁡ p ( x ) \log_{}{p(x)} logp(x)也达到最大值。此间关系变化对应下图

  • 即给定数据集后,变分推断的目标变成了最大化证据下界ELBO,ELBO最大化过程结束时,所获得的 q ( z ∣ x ) q(z|x) q(zx)就是我们要的输出

  • 那么如何使ELBO的值达到最大呢,从上面 L b L_{b} Lb的推导公式可以看出,求解 max ⁡ log ⁡ p ( x ) \max_{}\log_{}{p(x)} maxlogp(x),等价于求解 max ⁡ L b \max_{} L_{b} maxLb

  • 下面继续求解
    log ⁡ p ( x ) ≥ E L B O = L b = ∫ z q ( z ∣ x ) log ⁡ p ( z , x ) p ( z ∣ x ) d z = ∫ z q ( z ∣ x ) log ⁡ p ( x ∣ z ) p ( z ) q ( z ∣ x ) d z = ∫ z q ( z ∣ x ) log ⁡ p ( z ) q ( z ∣ x ) d z + ∫ z q ( z ∣ x ) log ⁡ p ( x ∣ z ) d z = − K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) + ∫ z q ( z ∣ x ) log ⁡ p ( x ∣ z ) d z \begin{aligned} \log_{}{p(x)} \ge ELBO &= L_{b} \\ &= \int\limits_{z}^{} q(z|x)\log_{}{\frac{p(z,x)}{p(z|x)}}dz\\ &=\int\limits_{z}^{} q(z|x)\log_{}{\frac{p(x|z)p(z)}{q(z|x)} } dz\\ &=\int\limits_{z}^{} q(z|x)\log_{}{\frac{p(z)}{q(z|x)} } dz + \int\limits_{z}^{} q(z|x)\log_{}{p(x|z)} dz\\ &=-KL(q(z|x)||p(z)) + \int\limits_{z}^{} q(z|x)\log_{}{p(x|z)} dz\\ \end{aligned} logp(x)ELBO=Lb=zq(zx)logp(zx)p(z,x)dz=zq(zx)logq(zx)p(xz)p(z)dz=zq(zx)logq(zx)p(z)dz+zq(zx)logp(xz)dz=KL(q(zx)∣∣p(z))+zq(zx)logp(xz)dz

  • 式子中, p ( z ) p(z) p(z) z z z的先验分布,要最大化 E L B O ELBO ELBO,即找到 q ( z ∣ x ) q(z|x) q(zx) p ( x ∣ z ) p(x|z) p(xz),让 K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) KL(q(z|x)||p(z)) KL(q(zx)∣∣p(z))最小,让 ∫ z q ( z ∣ x ) log ⁡ p ( x ∣ z ) d z \int\limits_{z}^{} q(z|x)\log_{}{p(x|z)} dz zq(zx)logp(xz)dz最大

  • ( 1 ) (1) (1) 最小化 K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) KL(q(z|x)||p(z)) KL(q(zx)∣∣p(z))
    最小化 K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) KL(q(z|x)||p(z)) KL(q(zx)∣∣p(z)),即让 q ( z ∣ x ) q(z|x) q(zx) p ( z ) p(z) p(z)的分布尽量接近,难点在于两者分布的选择。VAE选择 q ( z ∣ x ) q(z|x) q(zx) p ( z ) p(z) p(z)为各分量独立的正态分布,其中 p ( z ) p(z) p(z)为标准正态分布,即 p ( z ) ∼ N ( 0 , I ) p(z)\sim N(0, I) p(z)N(0,I) q ( z ∣ x ) ∼ N ( μ , σ 2 ) q(z|x)\sim N(\mu , \sigma ^{2} ) q(zx)N(μ,σ2),由KL散度的非负性且仅当 q ( z ∣ x ) = p ( z ) q(z|x) = p(z) q(zx)=p(z)时,等式成立,故可直接把 K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) ≥ 0 KL(q(z|x)||p(z)) \ge 0 KL(q(zx)∣∣p(z))0当作 L o s s Loss Loss来训练,此为VAE的损失函数第一项

    我们考虑的是各分量独立的多元正态分布,只需推导各分量独立的多元正态分布即可,如下
    ∫ z q ( z ∣ x ) log ⁡ ( q ( z ∣ x ) p ( z ) ) = K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) = K L ( N ( μ , σ 2 ) ∣ ∣ N ( 0 , I ) ) = ∫ 1 2 π σ e − ( x − μ ) 2 2 σ 2 log ⁡ { 1 σ 2 e { 1 2 [ x 2 − ( x − μ σ ) 2 ] } } d x = 1 2 ∫ 1 2 π σ e − ( x − μ ) 2 2 σ 2 [ − log ⁡ σ 2 + x 2 − ( x − μ σ ) 2 ] d x \begin{aligned} \int\limits_{z}^{}q(z|x)\log_{}{(\frac{q(z|x)}{p(z)} )} &= KL(q(z|x)||p(z)) = KL(N(\mu ,\sigma ^{2} )||N(0, I))\\ &=\int \frac{1}{\sqrt{2\pi }\sigma } e^{\frac{-(x-\mu )^{2} }{2\sigma ^{2} } } \log_{}{\left \{ \frac{1}{\sqrt{\sigma ^{2} } }e^{\left \{ \frac{1}{2}\left [ x^{2}-(\frac{x-\mu }{\sigma } )^{2} \right ] \right \} } \right \} } dx\\ &=\frac{1}{2} \int \frac{1}{\sqrt{2\pi }\sigma } e^{\frac{-(x-\mu )^{2} }{2\sigma ^{2} } }\left [-\log_{}{\sigma ^{2} }+x^{2}-(\frac{x-\mu }{\sigma } )^{2} \right ] dx \end{aligned} zq(zx)log(p(z)q(zx))=KL(q(zx)∣∣p(z))=KL(N(μ,σ2)∣∣N(0,I))=2π σ1e2σ2(xμ)2log{σ2 1e{21[x2(σxμ)2]}}dx=212π σ1e2σ2(xμ)2[logσ2+x2(σxμ)2]dx
    第一项: ∫ 1 2 π σ e − ( x − μ ) 2 2 σ 2 ( − log ⁡ σ 2 ) d x \int \frac{1}{\sqrt{2\pi }\sigma } e^{\frac{-(x-\mu )^{2} }{2\sigma ^{2} } }\left (-\log_{}{\sigma ^{2} } \right ) dx 2π σ1e2σ2(xμ)2(logσ2)dx,即 ( − log ⁡ σ 2 ) \left (-\log_{}{\sigma ^{2} } \right ) (logσ2)乘以概率密度的积分1,结果是 ( − log ⁡ σ 2 ) \left (-\log_{}{\sigma ^{2} } \right ) (logσ2)
    第二项: ∫ 1 2 π σ e − ( x − μ ) 2 2 σ 2 x 2 d x \int \frac{1}{\sqrt{2\pi }\sigma } e^{\frac{-(x-\mu )^{2} }{2\sigma ^{2} } }x^{2} dx 2π σ1e2σ2(xμ)2x2dx正态分布的二阶矩,结果为 μ 2 + σ 2 \mu ^{2} +\sigma ^{2} μ2+σ2
    第三项: ∫ 1 2 π σ e − ( x − μ ) 2 2 σ 2 [ − ( x − μ σ ) 2 ] d x \int \frac{1}{\sqrt{2\pi }\sigma } e^{\frac{-(x-\mu )^{2} }{2\sigma ^{2} } }\left [- (\frac{x-\mu }{\sigma } )^{2} \right ] dx 2π σ1e2σ2(xμ)2[(σxμ)2]dx,即 x − μ σ ∼ N ( 0 , 1 ) \frac{x-\mu }{\sigma }\sim N(0, 1) σxμN(0,1)的二阶矩,结果为-1
    K L L o s s KL Loss KLLoss为:
    K L ( N ( μ , σ 2 ) ∣ ∣ N ( 0 , 1 ) ) = 1 2 ( − log ⁡ σ 2 + μ 2 + σ 2 − 1 ) KL(N(\mu ,\sigma ^{2} )||N(0, 1))=\frac{1}{2} \left ( -\log_{}{\sigma ^{2}+\mu^{2} +\sigma ^{2} -1 } \right ) KL(N(μ,σ2)∣∣N(0,1))=21(logσ2+μ2+σ21)

  • ( 2 ) (2) (2) 最大化 ∫ z q ( z ∣ x ) log ⁡ p ( x ∣ z ) d z \int\limits_{z}^{} q(z|x)\log_{}{p(x|z)} dz zq(zx)logp(xz)dz
    我们可以将该项表达为
    max ⁡ ∫ z q ( z ∣ x ) log ⁡ p ( x ∣ z ) d z = max ⁡ E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] \max_{} \int\limits_{z}^{} q(z|x)\log_{}{p(x|z)} dz = \max_{} E_{q(z|x)} \left [ \log_{}{p(x|z)} \right ] maxzq(zx)logp(xz)dz=maxEq(zx)[logp(xz)]
    VAE构造了Encoder来模拟 q ( z ∣ x ) q(z|x) q(zx)的过程,即通过Encoder来生成 z z z的分布;构造了Decoder来模拟 p ( x ∣ z ) p(x|z) p(xz)的过程,即通过Decoder生成x的分布,如果不考虑方差,即通过Decoder的均值输出 μ \mu μ同原始 x x x的值尽可能地近,从而使 p ( x ∣ z ) p(x|z) p(xz)的观测概率更大。该期望的含义可理解为:在给定Encoder的输出 q ( z ∣ x ) q(z|x) q(zx)的情况下Decoder输出 p ( x ∣ z ) p(x|z) p(xz)的值要尽可能高。此为VAE损失函数的第二项

最后是实现模型的重参数化技巧 r e p a r a m e t e r i z a t i o n reparameterization reparameterization t r i c k trick trick

  • p ( z ∣ x ) p(z|x) p(zx)是正态分布,从中采样得到z,模型训练时需要对均值和方差求导,我们对 z z z进行标准化 z = μ + ε × σ z=\mu +\varepsilon \times \sigma z=μ+ε×σ,对 μ \mu μ采样操作是离散的不可导,而采样结果服从正态分布是可导的,重参数化就是通过标准化步骤把从 N ( μ , σ 2 ) N(\mu ,\sigma ^{2} ) N(μ,σ2)采样变成了从 N ( 0 , I ) N(0 ,I) N(0,I)中采样,然后通过参数变换得到从 N ( μ , σ 2 ) N(\mu ,\sigma ^{2} ) N(μ,σ2)中采样的结果。这样一来,采样这个操作就不用参与梯度下降了,改为采样的结果参与,使得整个模型可训练了
5. 对VAE模型的理解
5.1 如何理解变分
  • 当我们有了观测样本 x后,需要利用贝叶斯公式对z进行推断
    p ( z ∣ x ) = p ( z , x ) p ( x ) = p ( z ) p ( x ∣ z ) ∫ z p ( z ) p ( x ∣ z ) d z p(z|x)=\frac{p(z,x)}{p(x)} =\frac{p(z)p(x|z)}{\int\limits_{z}^{}p(z)p(x|z)dz } p(zx)=p(x)p(z,x)=zp(z)p(xz)dzp(z)p(xz)
  • 然而该后验概率的计算极为复杂,p(x)是一个混合分布,这个积分计算起来非常困难,且计算复杂性随x的增加而指数上升,所以使用了变分推断,借助q(z|x)来近似p(z|x),对应着最大化ELBO的过程。这里利用了KL散度,KL散度本身是个泛函,对泛函求极值就是变分。直观理解:分对应着分布,变分就是求泛函的极值,VAE的变分就是找到一个最能描述数据分布的分布
5.2 如何理解自编码
  • 自编码器是试图让输出和输入一样的神经网,先将输入压缩成潜在空间表征,再通过这种表征来重构输出;
  • 对auto的理解:自己训练自己。从损失函数来看,这里的自编码其实重点是对抗的过程,最终的目的就是得到一个既能保证对原始分布的拟合能力又能保证Decoder生成能力的网络
5.3 如何理解损失函数的两个项及其关系
  • 从上面的分析我们知道,为了最大化 log ⁡ p ( x ) \log_{}{p(x)} logp(x),需要最大化 E L B O ELBO ELBO,所以VAE的损失函数:
    L ( x i , θ , ϕ ) = E z ∼ q ϕ ( z ∣ x i ) [ log ⁡ p θ ( x i ∣ z ) ] − D K L [ q ϕ ( z ∣ x i ) ∣ ∣ p θ ( z ) ] L(x^{i} ,\theta ,\phi)=E_{z\sim q_{\phi }(z|x^{i} )} \left [\log_{}{p_{\theta }(x^{i}|z ) } \right ]-D_{KL} \left [ q_{\phi }(z|x^{i} ) ||p_{\theta }(z) \right ] L(xi,θ,ϕ)=Ezqϕ(zxi)[logpθ(xiz)]DKL[qϕ(zxi)∣∣pθ(z)]
  • 注意KL散度关注p(z)
  • 目标函数的第一项是重建误差 c o n s t r u c t i o n construction construction e r r o r error error,表示的是输出数据分布和原始数据的接近程度,通过将 Decoder 的均值输出 μ ( x ) \mu (x) μ(x)同原始 x x x的值尽可能的近,从而使 p ( x ∣ z ) p(x|z) p(xz)的观测概率更大
  • 目标函数的第二项是正则项KL散度,是后验概率 q ( z ∣ x ) q(z|x) q(zx)和先验概率 p ( z ) p(z) p(z)的接近程度
  • 为什么要同时使用重建损失和KL散度
    如果只关注重建损失,我们能得到一个很好描述输入的分布,但这个分布可能是一个方差非常小的分布,接近AE的单值表示,这样的话丧失了对噪声的鲁棒性;
    如果只关注KL散度,我们会将输入的每个属性都描述成单位正态分布,而不能描述原始数据,通过使用两者的组合,我们将获得一个平衡,即拥有一个接近先验分布但仍能描述输入的某些特征的潜在表示,因此需要同时关注重建损失和KL散度
  • 说白了,重构的过程是希望没有噪声的,而KL loss则希望有高斯噪声,两者是对立的。VAE跟GAN一样,内部其实包含了一个对抗的过程,只不过损失函数的两者是混合起来共同进化的
5.4 对噪声作用的理解
  • 当Decoder还没有训练好时,重构误差比较大,就会适当降低噪声,此时KL loss增加,以使得拟合起来容易一些(重构误差开始下降);反之,如果Decoder训练得还不错时重构误差比较小,这时候噪声就会增加,此时KL loss减小,会使得拟合更加困难(重构误差又开始增加),这时候Decoder就要想办法提高它的生成能力。
5.5 如何理解用正态分布近似原始数据而不是其他分布
  • 从KL散度的公式来理解 K L ( p ( x ) ∣ ∣ q ( x ) ) = ∫ p ( x ) l n p ( x ) q ( x ) d x KL(p(x)||q(x))=\int p(x)ln\frac{p(x)}{q(x)}dx KL(p(x)∣∣q(x))=p(x)lnq(x)p(x)dx=,如果在某个区域内 p ( x ) ≠ 0 p(x)\ne 0 p(x)=0 q ( x ) = 0 q(x)=0 q(x)=0,那么KL散度就会无穷大。比如对于均匀分布来说,只要两个分布不一致,在不同区间内就会存在 p ( x ) ≠ 0 p(x)\ne 0 p(x)=0 q ( x ) = 0 q(x)=0 q(x)=0,KL散度无穷大,损失函数包含了正则项KL loss,此时就会去降低KL loss,也就后验分布 p ( z ∣ x ) p(z|x) p(zx)会迅速趋于先验分布 p ( z ) p(z) p(z),噪声和重构就无法起到对抗作用, z z z的分布就没法很好描述 x x x
5.5 如何理解模型的Encoder和Decoder
  • Encoder是为了求解原始分布的近似分布 q ( z ∣ x ) q(z|x) q(zx) q ( z ) q(z) q(z),引入Encoder也是为了辅助Decoder求解 p ( x ∣ z ) p(x|z) p(xz),表现在 log ⁡ p ( x ) = L b + K L ( q ( z ∣ x ) ∣ ∣ p ( z ∣ x ) ) \log_{}{p(x)} = L_{b} + KL(q(z|x)||p(z|x)) logp(x)=Lb+KL(q(zx)∣∣p(zx))时的关系
  • 调节 p ( x ∣ z ) p(x|z) p(xz)就是在调节Decoder,调节 q ( z ∣ x ) q(z|x) q(zx)就是在调节Encoder。当Decoder能很好的生成 x x x,说明Encoder能够很好的描述 x x x,Decoder每前进一步,Encoder就调节成与其一致的样子,迫使Decoder下次训练的时候只能前进不能后退
5.6 如何理解模型的生成能力
  • 为了使模型具有生成能力,VAE模型要求每个 p ( z ∣ x ) p(z|x) p(zx)都向 N ( 0 , I ) N(0, I) N(0,I)看齐,这样能防止噪声为零同时保证生成能力

  • 如下,如果所有的 p ( z ∣ x ) p(z|x) p(zx)都很接近标准的正态分布 N ( 0 , I ) N(0, I) N(0,I)
    p ( z ) = ∑ x p ( z ∣ x ) p ( x ) = ∑ x N ( 0 , I ) p ( x ) = N ( 0 , I ) ∑ x p ( x ) = N ( 0 , I ) p(z)=\sum_{x}^{} p(z|x)p(x)=\sum_{x}^{}N(0, I)p(x)=N(0, I)\sum_{x}^{}p(x)=N(0, I) p(z)=xp(zx)p(x)=xN(0,I)p(x)=N(0,I)xp(x)=N(0,I)

  • 那么我们就能达到先验假设: p ( z ) p(z) p(z)是标准正态分布,然后就可能放心地从标准正态分布 N ( 0 , I ) N(0, I) N(0,I)中采样来生成样本了,对应到4.章节中高斯混合模型的原理

5.7 如何理解 p ( z ∣ x ) p(z|x) p(zx) p ( z ) p(z) p(z)的关系
  • 每个p(z|x)是不可能完全精确等于标准正态分布,否则p(z|x)就相当于跟x无关了,重构效果将会极差。最终的结果会是:p(z|x)保留了一定的x信息,重构效果也还可以,并且5.6中的式子近似成立,所以同时保留着生成能力
6. VAE模型的pytorch实现

参考文章:
VAE的数学推导
VAE的数学推导
对VAE的理解1
对VAE的理解2
VAE和AE及GAN的区别
VAE的通俗理解
VAE背后的数学原理

created by shuaixio, 2022.06.30

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值