变分自编码器 (Variational Autoencoders, VAEs)

Dimensionality reduction, PCA and autoencoders

Dimensionality reduction

  • 我们知道,数据降维其实就是减少数据的特征数量。如果把 encoder 看作是由高维原有特征生成低维新特征的过程,把 decoder 看作是将低维新特征还原为高维原有特征的过程,那么数据降维就可以被看作是一个数据压缩的过程,其中 encoder 负责将数据从 initial space 压缩到 latent space (i.e. encoded space) 中,decoder 负责将数据从 latent space 还原到 initial space 中
    在这里插入图片描述
  • 当然,encoder/decoder 代表的数据压缩/解压过程很可能是有损的 (lossy),因此数据降维的主要目的就是找到一个 encoder/decoder 对使得编码时能保留尽可能多的信息,解码时能保证尽可能小的重建误差,这一过程可以被表示为下式
    在这里插入图片描述其中, E E E D D D 分别为所有 encoder 和 decoder 的集合, ϵ ( x , d ( e ( x ) ) ) \epsilon(x,d(e(x))) ϵ(x,d(e(x))) 为重建误差

Principal components analysis (PCA)

  • PCA 是一种常用的数据降维方法,它的主要思想是找到 n e n_e ne 个线性无关的新特征,每个新特征都是 n d n_d nd 个旧特征的线性组合 ( n e < n d n_e<n_d ne<nd),其中数据在新特征张成的线性子空间上的投影与原始数据在欧氏距离上尽量相似。也就是说,PCA 是在寻找原始数据空间的一个最佳线性子空间,它使得数据投影在该子空间上后可以使得信息损耗尽量得小。可以证得,这 n e n_e ne 个特征即为样本矩阵的协方差矩阵最大的 n e n_e ne 个特征值对应的特征向量
    在这里插入图片描述
  • 在 PCA 中代入前面所述得 encoder / decoder 的思想,设 P = [ u 1 , . . . , u n e ] P=[u_1,...,u_{n_e}] P=[u1,...,une] n e n_e ne 个新特征组成的 n d × n e n_d\times n_e nd×ne 的向量,则 encoder P T P^T PTdecoder P P P
    在这里插入图片描述

Autoencoders

  • Autoencoders 也是一种数据降维的方法,它的基本思想是用神经网络实现 encoder 和 decoder,从而能够端到端地训练出一个最佳的 encoder / decoder 对
    在这里插入图片描述
  • 当 encoder 和 decoder 都只有一个线性层时,Autoencoders 和 PCA 就十分相似了,它们都是寻找一个最佳线性子空间使得投影数据时带来的信息损失最小,当然,Autoencoders 并没有像 PCA 一样施加了正交性约束
    在这里插入图片描述
  • 现在假如 Autoencoders 中的 encoder 和 decoder 都具有无限的拟合能力,那么理论上我们就可以无损地把任何高维数据都压缩至维度为 1,但这样真的好吗?在此需要明确以下两点:(1) 无损的数据压缩往往会使得 latent space 缺乏可解释性 (lack of regularity);(2) 在大多数情况下,数据压缩的最终目的不仅仅是为了降低数据维度,而是在降低数据维度的同时还能在 latent space 中保留数据的主要结构信息
    在这里插入图片描述

Variational Autoencoders

  • In a nutshell, a VAE is an autoencoder whose encodings distribution is regularised during the training in order to ensure that its latent space has good properties allowing us to generate some new data.
  • Moreover, the term “variational” comes from the close relation there is between the regularisation and the variational inference method in statistics.

Limitations of autoencoders for content generation

  • 如果想要将 Autoencoders 用于生成类任务,一个直观的想法就是随机从 latent space 中采样,然后利用 decoder 进行生成
    在这里插入图片描述
  • The problem of the autoencoders latent space regularity: 直接由 decoder 生成的样本质量取决于 latent space 的 regularity。然而正如前面所述,Autoencoders 由于缺乏必要的正则化,latent space 无法体现出数据的主要结构信息,缺乏可解释性,往往会陷入过拟合,因此直接由 decoder 生成的样本往往不具有实际意义。如下图所示,假设 encoder 和 decoder 都具有无限的拟合能力,当在 latent space 中采样的向量刚好是训练样本的 encoded vector 时,decoder 生成的样本就是有实际意义的样本,但当采样的向量不是训练样本的 encoded vector 时,就不能保证 decoder 生成的样本具有实际意义
    在这里插入图片描述

VAE 的直观理解

  • 为了能够将 decoder 用于生成,我们希望 latent space 具有如下性质:(1) continuity (latent space 中的两个相近点在解码后也应该具有相近的内容);(2) completeness (对于一个给定的概率分布 p ( z ) p(z) p(z),从 latent space 中采样得到的点在解码后应该得到有意义的输出)
    在这里插入图片描述
  • 为了使得 latent space 具有如上所述的良好性质,VAE 的 encoder 将输入数据 x x x 编码为 latent space 上的一个概率分布 p ( z ∣ x ) p(z|x) p(zx) 而非单一的点 z z z。在训练时,首先将输入 x x x 编码为 latent space 上的一个概率分布 p ( z ∣ x ) p(z|x) p(zx),然后按照该分布采样出一个隐变量 z ∼ p ( z ∣ x ) z\sim p(z|x) zp(zx),最后将其解码,计算并回传重构误差
    在这里插入图片描述在实际应用中,VAE 假设似然 p ( z ∣ x ) p(z|x) p(zx) 为一个正态分布,且协方差矩阵为对角矩阵,因此 encoder 仅需输出该正态分布的均值和方差向量。因此,这就假定了 VAE 生成的隐变量 z z z 的各维特征之间是解耦的,特征之间的相关性不强,因此在用作特征编码时相比普通 AE 更能提取有效信息
  • 然而,仅仅将输入编码为概率分布还不足以保证 continuity 和 completeness,这是因为将输入编码为概率分布会给 decoder 引入噪声从而加大重构误差,为了尽可能地减小重构误差,模型可能会使得 encoder 输出概率分布的方差特别小或不同输入对应分布的均值极不相近 (in both case variances of distributions become small relatively to distance between their means),这就使得输出概率分布与输出单一的点效果相似,VAE 会退化为传统自编码器
  • 为了解决上述问题,VAE 在训练时针对 encoder 输出的概率分布加入了正则项。具体而言,VAE 要求 encoder 输出的概率分布与标准正态分布尽量接近,也就是使得它们之间的 KL 散度尽量得小。在加入正则项后,我们就能使得不同输入编码得到的概率分布之间互相重合,进而保证 continuity 和 completeness (该正则项实际包括了对 latent space 的 local 和 global 正则化,local 正则化来自于对方差的控制,global 正则化来自于对均值的控制)
    在这里插入图片描述 p ( z ∣ x ) p(z|x) p(zx) 接近标准正态分布时,可以证得 latent vector z z z 的先验分布就是标准正态分布
    p ( z ) = ∫ X p ( z ∣ x ) p ( x ) d x = ∫ X N ( 0 , I ) p ( x ) d x = N ( 0 , I ) p(z)=\int_{\mathcal X} p(z|x)p(x)dx=\int_{\mathcal X} \mathcal{N}(0,I)p(x)dx=\mathcal{N}(0,I) p(z)=Xp(zx)p(x)dx=XN(0,I)p(x)dx=N(0,I)在加入正则项之后,VAE 的损失函数如下所示 (这也可以看作是一个对抗的过程,重构损失要求 encoder 输出的方差尽量小,而正则项要求 encoder 输出的方差接近 1):
    在这里插入图片描述其中,第 2 项 KL 散度仅为 μ x , σ x \mu_x,\sigma_x μx,σx 的函数,由于我们考虑的是各分量独立的多元正态分布,因此只需要推导一元正态分布的情形即可
    K L ( N ( μ , σ 2 ) ∥ N ( 0 , 1 ) ) = E x ∼ N ( μ , σ 2 ) [ log ⁡ e − ( x − μ ) 2 / 2 σ 2 / 2 π σ 2 e − x 2 / 2 / 2 π ] = E x ∼ N ( μ , σ 2 ) [ log ⁡ { 1 σ 2 exp ⁡ { 1 2 [ x 2 − ( x − μ ) 2 / σ 2 ] } } ] = 1 2 E x ∼ N ( μ , σ 2 ) [ − log ⁡ σ 2 + x 2 − ( x − μ ) 2 / σ 2 ] = 1 2 E x ∼ N ( μ , σ 2 ) [ − log ⁡ σ 2 + ( 1 − 1 / σ 2 ) x 2 + 2 μ x / σ 2 − μ 2 / σ 2 ] = 1 2 [ − log ⁡ σ 2 + ( 1 − 1 / σ 2 ) ( μ 2 + σ 2 ) + 2 μ 2 / σ 2 − μ 2 / σ 2 ] = 1 2 ( − log ⁡ σ 2 + μ 2 + σ 2 − 1 ) \begin{aligned}&KL\Big(N(\mu,\sigma^2)\Big\Vert N(0,1)\Big)\\ =&\mathbb E_{x\sim N(\mu,\sigma^2)}\left[\log \frac{e^{-(x-\mu)^2/2\sigma^2}/\sqrt{2\pi\sigma^2}}{e^{-x^2/2}/\sqrt{2\pi}}\right]\\ =&\mathbb E_{x\sim N(\mu,\sigma^2)}\left[ \log \left\{\frac{1}{\sqrt{\sigma^2}}\exp\left\{\frac{1}{2}\big[x^2-(x-\mu)^2/\sigma^2\big]\right\} \right\}\right]\\ =&\frac{1}{2}\mathbb E_{x\sim N(\mu,\sigma^2)} \Big[-\log \sigma^2+x^2-(x-\mu)^2/\sigma^2 \Big]\\ =&\frac{1}{2}\mathbb E_{x\sim N(\mu,\sigma^2)} \Big[-\log \sigma^2+(1-1/\sigma^2)x^2+2\mu x/\sigma^2-\mu^2/\sigma^2 \Big]\\ =&\frac{1}{2}\Big[-\log \sigma^2+(1-1/\sigma^2)(\mu^2+\sigma^2)+2\mu^2/\sigma^2-\mu^2/\sigma^2 \Big]\\ =&\frac{1}{2}\Big(-\log \sigma^2+\mu^2+\sigma^2-1\Big) \end{aligned} ======KL(N(μ,σ2)N(0,1))ExN(μ,σ2)[logex2/2/2π e(xμ)2/2σ2/2πσ2 ]ExN(μ,σ2)[log{σ2 1exp{21[x2(xμ)2/σ2]}}]21ExN(μ,σ2)[logσ2+x2(xμ)2/σ2]21ExN(μ,σ2)[logσ2+(11/σ2)x2+2μx/σ2μ2/σ2]21[logσ2+(11/σ2)(μ2+σ2)+2μ2/σ2μ2/σ2]21(logσ2+μ2+σ21)各分量独立的多元正态分布之间的 KL 散度即为
    K L ( N ( μ , diag ( σ 2 ) ) ∥ N ( 0 , I ) ) = 1 2 ∑ i = 1 d ( μ i 2 + σ i 2 − log ⁡ σ i 2 − 1 ) KL\Big(N(\mu,\text{diag}(\sigma^2))\Big\Vert N(0,I)\Big)=\frac{1}{2} \sum_{i=1}^d \Big(\mu_{i}^2 + \sigma_{i}^2 - \log \sigma_{i}^2 - 1\Big) KL(N(μ,diag(σ2))N(0,I))=21i=1d(μi2+σi2logσi21)其中, d d d 是隐变量 Z Z Z 的维度

从变分推理来理解 VAE

Probabilistic framework and assumptions

  • x x x 为我们想要生成的数据, z z z 为 latent space 中的隐变量,因此,encoder 即为后验概率 p ( z ∣ x ) p(z|x) p(zx)decoder 即为似然 p ( x ∣ z ) p(x|z) p(xz),同时隐变量 z z z 服从先验概率 p ( z ) p(z) p(z) (the regularisation of the latent space that we lacked in simple autoencoders naturally appears in z ∼ p ( z ) z\sim p(z) zp(z))。只要明确了 p ( z ∣ x ) p(z|x) p(zx) p ( x ∣ z ) p(x|z) p(xz),我们就能进行 VAE 的训练和推理任务
  • VAE 假设 p ( z ) p(z) p(z) 是一个标准正态分布, p ( x ∣ z ) p(x|z) p(xz) 是一个正态分布,它的均值为 f ( z ) f(z) f(z),协方差矩阵为 c I cI cI,其中 c c c 为一个大于 0 的常数 (decoder 的输出即为均值 f ( z ) f(z) f(z))
    在这里插入图片描述(这里假设似然 p ( x ∣ z ) p(x|z) p(xz) 为正态分布,推出来的重构损失为 MSE,但其实也可以假设似然 p ( x ∣ z ) p(x|z) p(xz) 为伯努利分布,推出来的重构损失为交叉熵损失,这一点在 “从联合分布的近似来理解 VAE” 一节中叙述) 由贝叶斯定理可以得到下式:
    在这里插入图片描述虽然理论上后验概率可以由先验概率和似然得到,但其归一化因子是一个积分项,通常难以计算。为此,VAE 使用变分推理来寻找该后验分布的一个近似分布,这也是其名字中 “Variarional” 的由来

Variational inference formulation

  • 变分推理是一种从给定的概率分布族中寻找复杂概率分布的最佳近似概率分布的方法,其中误差度量为 KL 散度,优化方法采用梯度下降。VAE 使用变分推理来得到后验概率 p ( z ∣ x ) p(z|x) p(zx) 的近似概率分布 q x ( z ) q_x(z) qx(z),其中概率分布族为协方差矩阵为对角矩阵的正态分布 (VAE 规定近似概率分布的协方差矩阵 h ( x ) h(x) h(x) 必为对角矩阵是为了便于模型训练,牺牲变分推理的近似精度来换取计算开销的降低。在此条件下,encoder 只需要输出 n n n 个标准差而不需要输出一个完整的协方差矩阵)
    在这里插入图片描述因此优化问题如下:
    在这里插入图片描述从倒数第二个等式可以看出,最佳近似概率分布可以使得基于观测数据的期望似然尽量大,且与先验概率间的 KL 散度尽量小,并且这里如果假设似然 p ( x ∣ z ) p(x|z) p(xz) 为正态分布,则期望似然尽量大即为 MSE 尽量小;如果假设似然 p ( x ∣ z ) p(x|z) p(xz) 为伯努利分布,则期望似然尽量大即为交叉熵损失尽量小
  • 在上述优化问题中, f f f 实际上也是未知的。假设对于给定的 f ∈ F f\in F fF,上述优化问题的解为 q x ∗ ( z ) q_x^*(z) qx(z),则最小化重构误差即为最大化期望似然 E z ∼ q x ∗ ( log ⁡ p ( x ∣ z ) ) = E z ∼ q x ∗ ( − ∣ ∣ x − f ( z ) ∣ ∣ 2 2 c ) \mathbb E_{z\sim q_x^*}(\log p(x|z))=\mathbb E_{z\sim q_x^*}\left(-\frac{||x-f(z)||^2}{2c}\right) Ezqx(logp(xz))=Ezqx(2cxf(z)2),也就是说,我们要寻找的最优 f ∗ f^* f
    在这里插入图片描述其中 q x ∗ q^*_x qx 依赖于 f f f。将上述两个最优化问题结合到一起,可以得到如下最优化问题
    在这里插入图片描述从上式中,可以看出 VAE 的两个损失项,第一项 E z ∼ q x ( ∣ ∣ x − f ( z ) ∣ ∣ 2 2 c ) \mathbb E_{z\sim q_x}\left(\frac{||x-f(z)||^2}{2c}\right) Ezqx(2cxf(z)2) 为输入 x x x 和输出 f ( z ) f(z) f(z) 之间的重构误差,这里的期望可以通过 1 次采样来近似,第二项 K L ( q x ( z ) , p ( z ) ) KL(q_x(z),p(z)) KL(qx(z),p(z)) 为 encoder 输出的概率分布与标准正态分布之间的 KL 散度。同时还可以注意到,常数项 c c c 用于控制两个损失项之间的平衡 c c c 越大,似然 p ( x ∣ z ) p(x|z) p(xz) 的方差就越大,VAE 就越偏向于优化正则项而非重构损失

Bringing neural networks into the model

  • 我们目前的概率模型含有 3 个未知函数 f , g , h f,g,h f,g,h。VAE 将 f , g , h f,g,h f,g,h 都实现为了神经网络
    • Encoder part of the VAE g , h g,h g,h 属于 encoder 部分,它们共享一部分参数:
      在这里插入图片描述其中, g g g 用于输出后验概率 p ( z ∣ x ) p(z|x) p(zx) 的均值向量, h h h 用于输出后验概率 p ( z ∣ x ) p(z|x) p(zx) 的协方差矩阵的对角线元素 (在实际使用时, h h h 拟合的是 log ⁡ σ x 2 \log \sigma_x^2 logσx2 而不是直接拟合 σ x \sigma_x σx,这是因为 σ x σ_x σx 总是非负的,需要加激活函数处理,而拟合 log ⁡ σ x 2 \log \sigma_x^2 logσx2 不需要加激活函数,因为它可正可负)
      在这里插入图片描述
    • Decoder part of the VAE f f f 用于输出似然 p ( x ∣ z ) p(x|z) p(xz) 的均值向量作为重构输入
      在这里插入图片描述
  • 这里还有一个小问题,就是 VAE 的训练过程中,encoder 部分需要按照后验概率分布进行采样,这一过程是不可导的。为了解决上述问题,VAE 使用了一种 reparametrisation trick
    在这里插入图片描述其中, g ( x ) g(x) g(x) 为 encoder 输出的正态分布的均值向量, H ( x ) = h ( x ) h T ( x ) H(x)=h(x)h^T(x) H(x)=h(x)hT(x) 为正态分布的协方差矩阵, h ( x ) h(x) h(x) 为 encoder 输出的正态分布的标准差向量
    在这里插入图片描述
  • VAE 要解决的是如下最优化问题:
    在这里插入图片描述将其中的期望似然使用蒙特卡洛法近似,同时令 C = 1 / ( 2 c ) C=1/(2c) C=1/(2c),就可以得到训练 VAE 所用的损失函数,包括重构损失、正则项和一个控制两项损失权重的常数项:
    在这里插入图片描述
  • 在使用 VAE 推理时,只需要按照标准正态分布 p ( z ) p(z) p(z) 进行采样,再通过 decoder 生成样本即可

QA

  • Q1: 为什么 encoder 输出的 z z z 不能是高维张量,比如 256 × 32 × 32 256\times32\times32 256×32×32
  • A1: 这是因为我们希望先验分布 p ( z ) p(z) p(z) 是一个多元的、独立的正态分布,那就意味着 encoder 出来的特征是解藕的,各分量相互独立,互不影响。如果 z z z 是一个矩阵甚至高维张量,看上去似乎没有什么问题,你可能还想 z z z 后面接个 CNN 来 decode,但是要注意,如果一旦使用 CNN(或 RNN),那么就相当于假设了 z z z 具有局部相关性(如果局部没有联系,那么使用 CNN 就没意义了),但是这就违反了 z z z 的各分量相互独立的假设了。也就是说,encoder 出来的结果不能是一个高维张量并且 decoder 的第一层就对这个高维张量用 CNN,一般情况下 z z z 必须是向量,然后对 z z z 进行处理后(上采样,或者简单接多个并行的全连接得到一个矩阵输出)才能接 CNN 进行 decode
  • Q2: 为什么隐变量的先验分布用高斯分布而不是均匀分布
  • A2: 这是因为 KL 散度有一个比较明显的问题,就是 q ( x ) q(x) q(x) 在某个区域等于 0,而 p ( x ) p(x) p(x) 在该区域不等于 0,那么 KL 散度就出现无穷大。这是 KL 散度的固有问题,我们只能想办法规避它,比如隐变量的先验分布我们用高斯分布而不是均匀分布。对于正态分布来说,所有点的概率密度都是非负的,因此不存在这个问题。但对于均匀分布来说,只要两个分布不一致,那么就必然存在 p ( x ) ≠ 0 p(x)≠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),而噪声和重构无法起到对抗作用,encoder 无法区分哪个 z z z 对应哪个 x x x 了。当然,非得要用均匀分布也不是不可能,就是算好两个均匀分布的 KL 散度,然后做好除零错误处理,加大重构 loss 的权重,等等~但这样就显得太丑陋了

从联合分布的近似来理解 VAE

  • 前面我们从变分推理近似后验分布 p ( z ∣ x ) p(z|x) p(zx) 的角度推得了 VAE 的数学形式,但其实从近似联合分布的角度我们也可以推出 VAE 的数学形式
  • 假设数据样本的分布为 p ( x ) p(x) p(x),我们希望借助隐变量 z z z 描述 p ( x ) p(x) p(x)
    q ( x ) = ∫ q ( x ∣ z ) q ( z ) d z , q ( x , z ) = q ( x ∣ z ) q ( z ) q(x)=\int q(x|z)q(z)dz,\quad q(x,z) = q(x|z)q(z) q(x)=q(xz)q(z)dz,q(x,z)=q(xz)q(z)其中, q ( z ) q(z) q(z) 为隐变量 z z z 的先验分布。我们希望 q ( x ) q(x) q(x) 能逼近 p ( x ) p(x) p(x),这样(理论上)我们既描述了 p ( x ) p(x) p(x),又得到了生成模型 q ( x ∣ z ) q(x|z) q(xz),一举两得
  • 接下来就是利用 KL 散度进行近似。具体来说,定义 p ( x , z ) = p ( x ) p ( z ∣ x ) p(x,z)=p(x)p(z|x) p(x,z)=p(x)p(zx),我们设想用一个联合概率分布 q ( x , z ) q(x,z) q(x,z) 来逼近 p ( x , z ) p(x,z) p(x,z),那么我们用 KL 散度来看它们的距离:
    K L ( p ( x , z ) ∥ q ( x , z ) ) = ∬ p ( x , z ) ln ⁡ p ( x , z ) q ( x , z ) d z d x = ∫ p ( x ) [ ∫ p ( z ∣ x ) ln ⁡ p ( x ) p ( z ∣ x ) q ( x , z ) d z ] d x = E x ∼ p ( x ) [ ∫ p ( z ∣ x ) ln ⁡ p ( x ) p ( z ∣ x ) q ( x , z ) d z ] \begin{aligned} KL\Big(p(x,z)\Big\Vert q(x,z)\Big) =&\iint p(x,z)\ln \frac{p(x,z)}{q(x,z)} dzdx\\ =& \int {p}(x) \left[\int p(z|x)\ln \frac{{p}(x)p(z|x)}{q(x,z)} dz\right]dx\\ =& \mathbb{E}_{x\sim {p}(x)} \left[\int p(z|x)\ln \frac{{p}(x)p(z|x)}{q(x,z)} dz\right] \end{aligned} KL(p(x,z)q(x,z))===p(x,z)lnq(x,z)p(x,z)dzdxp(x)[p(zx)lnq(x,z)p(x)p(zx)dz]dxExp(x)[p(zx)lnq(x,z)p(x)p(zx)dz]这个式子还可以进一步简化,因为 ln ⁡ p ( x ) p ( z ∣ x ) q ( x , z ) = ln ⁡ p ( x ) + ln ⁡ p ( z ∣ x ) q ( x , z ) \ln \frac{{p}(x)p(z|x)}{q(x,z)}=\ln {p}(x) + \ln \frac{p(z|x)}{q(x,z)} lnq(x,z)p(x)p(zx)=lnp(x)+lnq(x,z)p(zx),而
    E x ∼ p ( x ) [ ∫ p ( z ∣ x ) ln ⁡ p ( x ) d z ] = E x ∼ p ( x ) [ ln ⁡ p ( x ) ∫ p ( z ∣ x ) d z ] = E x ∼ p ( x ) [ ln ⁡ p ( x ) ] \begin{aligned}\mathbb{E}_{x\sim {p}(x)} \left[\int p(z|x)\ln {p}(x)dz\right] =& \mathbb{E}_{x\sim {p}(x)} \left[\ln {p}(x)\int p(z|x)dz\right]\\ =&\mathbb{E}_{x\sim {p}(x)} \big[\ln {p}(x)\big] \end{aligned} Exp(x)[p(zx)lnp(x)dz]==Exp(x)[lnp(x)p(zx)dz]Exp(x)[lnp(x)]是一个常数,所以可以写出
    L = K L ( p ( x , z ) ∥ q ( x , z ) ) − 常数 = E x ∼ p ( x ) [ ∫ p ( z ∣ x ) ln ⁡ p ( z ∣ x ) q ( x , z ) d z ] \mathcal{L}=KL\Big(p(x,z)\Big\Vert q(x,z)\Big) - \text{常数}= \mathbb{E}_{x\sim {p}(x)} \left[\int p(z|x)\ln \frac{p(z|x)}{q(x,z)} dz\right] L=KL(p(x,z)q(x,z))常数=Exp(x)[p(zx)lnq(x,z)p(zx)dz]注意减去的常数为 E x ∼ p ( x ) [ ln ⁡ p ( x ) ] \mathbb{E}_{x\sim {p}(x)} \big[\ln {p}(x)\big] Exp(x)[lnp(x)],所以 L \mathcal L L 拥有下界 − E x ∼ p ( x ) [ ln ⁡ p ( x ) ] −\mathbb{E}_{x\sim {p}(x)} \big[\ln {p}(x)\big] Exp(x)[lnp(x)]. 注意到 p ( x ) p(x) p(x) 不一定是概率,在连续情形时 p ( x ) p(x) p(x) 是概率密度,它可以大于 1 也可以小于 1,所以 − E x ∼ p ( x ) [ ln ⁡ p ( x ) ] −\mathbb{E}_{x\sim {p}(x)} \big[\ln {p}(x)\big] Exp(x)[lnp(x)] 不一定是非负,即 loss 可能是负数
  • 为了得到生成模型,所以我们把 q ( x , z ) q(x,z) q(x,z) 写成 q ( x ∣ z ) q ( z ) q(x|z)q(z) q(xz)q(z),于是就有
    L = E x ∼ p ( x ) [ ∫ p ( z ∣ x ) ln ⁡ p ( z ∣ x ) q ( x ∣ z ) q ( z ) d z ] = E x ∼ p ( x ) [ − ∫ p ( z ∣ x ) ln ⁡ q ( x ∣ z ) d z + ∫ p ( z ∣ x ) ln ⁡ p ( z ∣ x ) q ( z ) d z ] = E x ∼ p ( x ) [ E z ∼ p ( z ∣ x ) [ − ln ⁡ q ( x ∣ z ) ] + E z ∼ p ( z ∣ x ) [ ln ⁡ p ( z ∣ x ) q ( z ) ] ] = E x ∼ p ( x ) [ E z ∼ p ( z ∣ x ) [ − ln ⁡ q ( x ∣ z ) ] + K L ( p ( z ∣ x ) ∥ q ( z ) ) ] \begin{aligned}\mathcal{L} =& \mathbb{E}_{x\sim {p}(x)} \left[\int p(z|x)\ln \frac{p(z|x)}{q(x|z)q(z)} dz\right]\\ =&\mathbb{E}_{x\sim {p}(x)} \left[-\int p(z|x)\ln q(x|z)dz+\int p(z|x)\ln \frac{p(z|x)}{q(z)}dz\right]\\ = &\mathbb{E}_{x\sim {p}(x)} \left[\mathbb{E}_{z\sim p(z|x)}\big[-\ln q(x|z)\big]+\mathbb{E}_{z\sim p(z|x)}\Big[\ln \frac{p(z|x)}{q(z)}\Big]\right]\\ = &\mathbb{E}_{x\sim {p}(x)} \Bigg[\mathbb{E}_{z\sim p(z|x)}\big[-\ln q(x|z)\big]+KL\Big(p(z|x)\Big\Vert q(z)\Big)\Bigg]\end{aligned} L====Exp(x)[p(zx)lnq(xz)q(z)p(zx)dz]Exp(x)[p(zx)lnq(xz)dz+p(zx)lnq(z)p(zx)dz]Exp(x)[Ezp(zx)[lnq(xz)]+Ezp(zx)[lnq(z)p(zx)]]Exp(x)[Ezp(zx)[lnq(xz)]+KL(p(zx)q(z))]这样我们也推得了 VAE 的损失函数,即重构损失 + KL 散度的形式,下面只需要确定后验概率 p ( z ∣ x ) p(z|x) p(zx)近似似然 q ( x ∣ z ) q(x|z) q(xz)近似先验概率 q ( z ) q(z) q(z) 即可。为了便于采样,可以假设 q ( z ) q(z) q(z) 为标准正态分布。下面就只需要确定 p ( z ∣ x ) p(z|x) p(zx) q ( x ∣ z ) q(x|z) q(xz)
  • 后验分布近似:本来如果已知 q ( x ∣ z ) q(x|z) q(xz) q ( z ) q(z) q(z),那么 p ( z ∣ x ) p(z|x) p(zx) 可以利用贝叶斯公式进行估计,但其归一项的积分难以计算,因此对后验分布的近似还是采用神经网络。具体而言,我们假设 p ( z ∣ x ) p(z|x) p(zx) 也是(各分量独立的)正态分布,其均值和方差由输入为 x x x、输出分别为均值和方差的神经网络决定,也就是用(各分量独立的)正态分布 q ( z ∣ x ) q(z|x) q(zx) 去近似 p ( z ∣ x ) p(z|x) p(zx),此时损失函数为
    L = E x ∼ p ( x ) [ E z ∼ p ( z ∣ x ) [ − ln ⁡ q ( x ∣ z ) ] + K L ( q ( z ∣ x ) ∥ q ( z ) ) ] = E x ∼ p ( x ) [ E z ∼ p ( z ∣ x ) [ − ln ⁡ q ( x ∣ z ) ] + K L ( N ( z ; μ x , diag ( σ x 2 ) ) ∥ q ( z ) ) ] \begin{aligned}\mathcal{L} =& \mathbb{E}_{x\sim {p}(x)} \Bigg[\mathbb{E}_{z\sim p(z|x)}\big[-\ln q(x|z)\big]+KL\Big(q(z|x)\Big\Vert q(z)\Big)\Bigg]\\ =& \mathbb{E}_{x\sim {p}(x)} \Bigg[\mathbb{E}_{z\sim p(z|x)}\big[-\ln q(x|z)\big]+KL\Big(N(z;\mu_x,\text{diag}(\sigma_x^2))\Big\Vert q(z)\Big)\Bigg]\end{aligned} L==Exp(x)[Ezp(zx)[lnq(xz)]+KL(q(zx)q(z))]Exp(x)[Ezp(zx)[lnq(xz)]+KL(N(z;μx,diag(σx2))q(z))]
  • 生成模型近似:现在只剩生成模型部分 q ( x ∣ z ) q(x|z) q(xz) 了,该选什么分布呢?论文《Auto-Encoding Variational Bayes》给出了两种候选方案:伯努利分布或正态分布
    • 伯努利分布模型:伯努利分布其实就是一个二元分布:
      p ( ξ ) = { ρ ,   ξ = 1 ; 1 − ρ ,   ξ = 0 p(\xi)=\left\{\begin{aligned}&\rho,\, \xi = 1;\\ &1-\rho,\, \xi = 0\end{aligned}\right. p(ξ)={ρ,ξ=1;1ρ,ξ=0所以伯努利分布只适用于 x x x 是一个多元的二值向量的情况,比如 x x x 是二值图像时。这种情况下,我们用神经网络 ρ ( z ) ρ(z) ρ(z) 来算参数 ρ ρ ρ (需要使用 sigmoid 激活函数来保证 ρ \rho ρ 在 0 到 1 之间),从而得到
      q ( x ∣ z ) = ∏ k = 1 D ( ρ k ( z ) ) x k ( 1 − ρ k ( z ) ) 1 − x k q(x|z)=\prod_{k=1}^D \Big(\rho_{k}(z)\Big)^{x_{k}} \Big(1 - \rho_{k}(z)\Big)^{1 - x_{k}} q(xz)=k=1D(ρk(z))xk(1ρk(z))1xk其中, D D D 为样本 x x x 的维数 (当然,这一分布假设 x x x 的各维特征独立,算是真实分布的一个简化)。这时候可以算出
      − ln ⁡ q ( x ∣ z ) = ∑ k = 1 D [ − x k ln ⁡ ρ k ( z ) − ( 1 − x k ) ln ⁡ ( 1 − ρ k ( z ) ) ] -\ln q(x|z) = \sum_{k=1}^D \Big[- x_{k} \ln \rho_{k}(z) - (1-x_{k}) \ln \Big(1 -\rho_{k}(z)\Big)\Big] lnq(xz)=k=1D[xklnρk(z)(1xk)ln(1ρk(z))]可以看出,此时的重构损失就是二分类交叉熵损失,并且重构损失和 KL 损失的权重均为 1
    • 正态分布模型:与 “Variational inference formulation” 中的推导一致,当 q ( x ∣ z ) q(x|z) q(xz) 为正态分布时,重构损失就是均方误差,并且重构损失和 KL 损失的权重由 q ( x ∣ z ) q(x|z) q(xz) 的方差决定
    • 所以现在就清楚了,对于二值数据,我们可以对 decoder 用 sigmoid 函数激活,然后用交叉熵作为损失函数,这对应于 q ( x ∣ z ) q(x|z) q(xz) 为伯努利分布;而对于一般数据,我们用 MSE 作为损失函数,这对应于 q ( x ∣ z ) q(x|z) q(xz) 为固定方差的正态分布

从最大似然来理解 VAE

  • 从最大似然的角度也可以得到 VAE 的损失函数:
    E x ∼ p ( x ) [ log ⁡ q ( x ) ] = E x ∼ p ( x ) [ E z ∼ q ( z ∣ x ) [ log ⁡ q ( x ) ] ( q ( x )  Does not depend on  z ) ] = E x ∼ p ( x ) [ E z ∼ q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) p ( z ) p ( z ∣ x ) ] ]  (Bayes’ Rule)  ≈ E x ∼ p ( x ) [ E z ∼ q ( z ∣ x ) [ log ⁡ q ( x ∣ z ) p ( z ) p ( z ∣ x ) ] ]  (Approximate  p ( x ∣ z )  with  q ( x ∣ z ) )  = E x ∼ p ( x ) [ E z ∼ q ( z ∣ x ) [ log ⁡ q ( x ∣ z ) p ( z ) p ( z ∣ x ) q ( z ∣ x ) q ( z ∣ x ) ] ]  (Multiply by constant)  = E x ∼ p ( x ) [ E z ∼ q ( z ∣ x ) [ log ⁡ q ( x ∣ z ) ] − E z ∼ q ( z ∣ x ) [ log ⁡ q ( z ∣ x ) p ( z ) ] + E z ∼ q ( z ∣ x ) [ log ⁡ q ( z ∣ x ) p ( z ∣ x ) ] ] ( Logarithms ⁡ ) = E x ∼ p ( x ) [ E z ∼ q ( z ∣ x ) [ log ⁡ q ( x ∣ z ) ] − K L ( q ( z ∣ x ) ∥ p ( z ) ) + K L ( q ( z ∣ x ) ∥ p ( z ∣ x ) ) ] \begin{aligned} \mathbb{E}_{x\sim p(x)}\left[\log q\left(x\right)\right] &=\mathbb{E}_{x\sim p(x)}\left[\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log q\left(x\right)\right] \quad\left(q\left(x\right) \text { Does not depend on } z\right)\right] \\ &=\mathbb{E}_{x\sim p(x)}\left[\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log \frac{p\left(x \mid z\right) p(z)}{p\left(z \mid x\right)}\right]\right] \quad \text { (Bayes' Rule) } \\ &\approx\mathbb{E}_{x\sim p(x)}\left[\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log \frac{q\left(x \mid z\right) p(z)}{p\left(z \mid x\right)}\right]\right] \quad \text { (Approximate $p(x\mid z)$ with $q(x\mid z)$) } \\ &=\mathbb{E}_{x\sim p(x)}\left[\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log \frac{q\left(x \mid z\right) p(z)}{p\left(z \mid x\right)} \frac{q\left(z \mid x\right)}{q\left(z \mid x\right)}\right]\right] \quad \text { (Multiply by constant) } \\ &=\mathbb{E}_{x\sim p(x)}\left[\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log q\left(x \mid z\right)\right]-\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log \frac{q\left(z \mid x\right)}{p(z)}\right]+\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log \frac{q\left(z \mid x\right)}{p\left(z \mid x\right)}\right]\right] \quad(\operatorname{Logarithms}) \\ &=\mathbb{E}_{x\sim p(x)}\left[\mathbb{E}_{z \sim q\left(z \mid x\right)}\left[\log q\left(x \mid z\right)\right]-{K L}\left(q\left(z \mid x\right) \| p(z)\right)+{K L}\left(q\left(z \mid x\right) \| p\left(z \mid x\right)\right)\right] \end{aligned} Exp(x)[logq(x)]=Exp(x)[Ezq(zx)[logq(x)](q(x) Does not depend on z)]=Exp(x)[Ezq(zx)[logp(zx)p(xz)p(z)]] (Bayes’ Rule) Exp(x)[Ezq(zx)[logp(zx)q(xz)p(z)]] (Approximate p(xz) with q(xz)=Exp(x)[Ezq(zx)[logp(zx)q(xz)p(z)q(zx)q(zx)]] (Multiply by constant) =Exp(x)[Ezq(zx)[logq(xz)]Ezq(zx)[logp(z)q(zx)]+Ezq(zx)[logp(zx)q(zx)]](Logarithms)=Exp(x)[Ezq(zx)[logq(xz)]KL(q(zx)p(z))+KL(q(zx)p(zx))]可以看到,前两项即为 VAE 的优化目标,后一项一定大于等于 0,因此 VAE 的优化目标为对数似然的一个下界

Conditional VAE (cVAE)

  • 下面考虑一种最简单的条件 VAE 结构,它通过调整先验概率 p ( z ) p(z) p(z) 来引入标签的条件信息。具体而言,我们希望同一个类的样本都有一个专属的均值 μ Y μ_Y μY (方差不变,还是单位方差),这个 μ Y μ_Y μY 让模型自己训练出来。这样的话,有多少个类就有多少个正态分布,而在生成的时候,我们就可以通过控制均值来控制生成图像的类别。上述 cVAE 只需通过修改 KL loss 实现:
    L μ , σ 2 = 1 2 ∑ i = 1 d [ ( μ i − μ i Y ) 2 + σ i 2 − log ⁡ σ i 2 − 1 ] \mathcal{L}_{\mu,\sigma^2}=\frac{1}{2} \sum_{i=1}^d\Big[\big(\mu_{i}-\mu^Y_{i}\big)^2 + \sigma_{i}^2 - \log \sigma_{i}^2 - 1\Big] Lμ,σ2=21i=1d[(μiμiY)2+σi2logσi21]

References

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值