VAE的损失函数的拆分

「Structured Disentangled Representations」这篇文章对VAE的损失函数提出了一个统一化的解释,根据这个解释可以很好的分析近几年来对VAE的各种变形。

什么是Disentangle

Disentangle 的意思是解纠缠,所谓解纠缠,也叫做解耦,就是将原始数据空间中纠缠着的数据变化,变换到一个好的表征空间中,在这个空间中,不同要素的变化是可以彼此分离的。
比如,人脸数据集经过编码器,在潜变量空间Z中,我们就会获得人脸是否微笑、头发颜色、方位角等信息的分离表示,我们把这些分离表示称为Factors。 解纠缠的变量通常包含可解释的语义信息,并且能够反映数据变化中的分离的因子。在生成模型中,我们就可以根据这些分布进行特定的操作,比如改变人脸宽度、添加眼镜等操作。(转自知乎用户:大象)

VAE 要做的就是要找到这些隐式的解纠缠变量,当然也有很多其他方法能做到这一点,比如狄利克雷过程。
这篇文章主要讲了自动编码机上的应用。

VAE损失函数的不同形式

  1. VAE的目标以往被定义成每个数据点ELBO(Evidence Lower Bound)的期望值在数据点X上的集合,或者被定义为一个用有限个数的数据点来接近实际分布的经验性的分布。个人理解就是如果你有这个要求的分布的很多点的话,就能拿来定义这个分布。
    即:
    L V A E ( θ , ϕ ) : = E q ( x ) [ E q ϕ ( z ∣ x ) [ l o g p θ ( x , z ) q ϕ ( z ∣ x ) ] ] L^{VAE}(\theta,\phi):=E_{q(x)}[E_{q\phi(z|x)}[log \frac{p_\theta(x,z)}{q_\phi(z|x)}]]LVAE(θ,ϕ):=Eq(x)[Eqϕ(zx)[logqϕ(zx)pθ(x,z)]]
    q ( x ) : = 1 N ∑ N n = 1 δ x ( ) x q(x) := \frac{1}{N} \sum_{N}^{n=1}\delta_x()xq(x):=N1Nn=1δx()x
    这里的分布q和分布p分别被ϕ \phiϕθ \thetaθ参数化。
  2. 把VAE的损失函数定义为KL散度。这个KL散度是生成模型(generative model)p θ ( z , x ) p_\theta(z,x)pθ(z,x)与推测模型(inference model)q ϕ ( z , x ) = q ( z ∣ x ) q ( x ) q_\phi(z,x)= q(z |x)q(x)qϕ(z,x)=q(zx)q(x)之间的。
    L ( θ , ϕ ) : = − K L ( q ϕ ( z , x ) ∣ ∣ p θ ( z , x ) ) L(\theta,\phi) := -KL(q_\phi(z,x) || p_\theta(z,x))L(θ,ϕ):=KL(qϕ(z,x)pθ(z,x))
    我们想要推断后验分布p ( z ∣ x ) p(z|x)p(zx),他的计算公式就是下面这个贝叶斯公式。但是当z的维度很高的时候,p ( x ) p(x)p(x)的计算是不可行的。这时候我们就设计一个q ( z ∣ x ) q(z|x)q(zx)去近似p ( z ∣ x ) p(z|x)p(zx)。这个度量就由KL散度给出,通过最小化KL散度,我们就能得到近似的p ( z ∣ x ) p(z|x)p(zx)
    L ( θ , ϕ ) : = E q ϕ ( z , x ) [ l o g p θ ( x , z ) q ϕ ( z ∣ x ) ] − E q ( x ) [ l o g q ( x ) ] L(\theta,\phi) := E_{q\phi(z,x)}[log \frac{p_\theta(x,z)}{q_\phi(z|x)}] - E_{q(x)}[logq(x)]L(θ,ϕ):=Eqϕ(z,x)[logqϕ(zx)pθ(x,z)]Eq(x)[logq(x)]
    跟第一个式子不同的是第二个式子多了一个常数项l o g N logNlogN, 这个常数项就是经验数据分布q ( x ) q(x)q(x)的熵。这样定义为KL散度的好处是对于θ \thetaθϕ \phiϕ来说需要优化的目标更明显。p θ ( z , x ) p_\theta(z,x)pθ(z,x)q ϕ ( z , x ) q_\phi(z,x)qϕ(z,x) 相等的时候KL散度是最低的。这时也说明边际分布p t h e t a ( x ) = q ( x ) p_theta(x) = q(x)ptheta(x)=q(x) 同时隐式变量$q_\phi(z) = p(z)也相等。

分解VAE的目标函数

为更准确的表示VAE目标函数中各个部分是怎么隐式的影响目标函数本身的。我们将VAE目标函数拆分为如下4部分:目标函数分解
项目3和4用来限制x和z的边际分布的一致性。最小化项目三中的KL散度就最大化了边际似然E q ( x ) [ l o g p θ ( x ) ] \mathop{\mathbb{E}}_{q(x)}[logp_\theta(x)]Eq(x)[logpθ(x)], 同时,最小化项目4会确保推理边际q ϕ ( z ) q_\phi(z)qϕ(z)接近先验p ( z ) p(z)p(z)
项目1和项目2确保条件分布之间的一致性。直观的来说,项目1最大化了z生成每个x的可辨认性,当我们从z ∼ q ϕ ( z ∣ x n ) z \sim q_\phi(z | x^n)zqϕ(zxn)中采样时,生成模型的似然p θ ( x n ∣ z ) p_\theta(x^n|z)pθ(xnz)应该高于边际似然p θ ( x n ) p_\theta(x^n)pθ(xn)。项目2适用最先话推理模型中的信息熵I ( z ; x ) I(z;x)I(z;x)来正则化项目1,这就相当于q ϕ ( z ∣ x n ) q_\phi(z|x^n)qϕ(zxn)把每个x n x^nxn映射到更少的确定的值。
需要说明的是项目1在实际中是不可微的,因为我们不能每个点的评价p θ ( x ) p_\theta(x)pθ(x). 但是我们能够将项目1和项目3合并起来来解决这个问题。合并起来的Likelihood 为:
argmax ⁡ θ , ϕ E q ϕ ( z , x ) [ l o g p θ ( x ∣ z ) p θ ( x ) + l o g p θ ( x ) q ( x ) ] \underset{\theta,\phi}{\operatorname{argmax}} \mathop{\mathbb{E}}_{q_\phi(z,x)}[log \frac{p_\theta(x|z)}{p_\theta(x)} + log\frac{p_\theta(x)}{q(x)}]θ,ϕargmaxEqϕ(z,x)[logpθ(x)pθ(xz)+logq(x)pθ(x)]
= argmax ⁡ θ , ϕ E q ϕ ( z , x ) [ l o g p θ ( x ∣ z ) ] = \underset{\theta,\phi}{\operatorname{argmax}} \mathop{\mathbb{E}}_{q_\phi(z,x)}[logp_\theta(x | z)]=θ,ϕargmaxEqϕ(z,x)[logpθ(xz)]
为了更加形象的显示每项的影响,下图显示了移除每项的意义。
每项意义的直观图
移除项目3或者项目4时, 我们可以看到p θ ( x ) p_\theta(x)pθ(x)是从q ( x ) q(x)q(x)中推演出来的,或者q ϕ ( z ) q_\phi(z)qϕ(z)是从p ( z ) p(z)p(z)中推演出来的。
当我们移除项目1时,我们就消除了p θ ( x n ∣ z ) p_\theta(x^n|z)pθ(xnz)应该在z ∼ q ϕ ( z ∣ x n ) z \sim q_\phi(z | x^n)zqϕ(zxn)时比在z ∼ p ( z ) z \sim p(z)zp(z)时更高的需求(此时似然在后验分布中应该比在先验分布中更高)。只提供一个解码模型已经可以比较充分得解释,这时我们就会学到一个忽略隐变量z zz的一个生成模型。这种不希望看到的行为在某种情况下确实会发生,就算在项目1被加到目标函数里时,特别时在使用自回归解码器架构的时候。
当我们移除项目2时,我们学习到一个最小化对于不同的数据点x n x^nxn在最大化项目1时的覆盖部分的分布q ϕ ( z ∣ x n ) q_\phi(z | x^n)qϕ(zxn)。它最大化了以LogN为上界的相互信息I ( x , z ) I(x,z)I(x,z)。在实际情况中, 就算被加到目标函数中,项目2会经常接近于LogN。 这说明最大化项目1会更有意义,至少在目前的解码编码结构中是这样。

目前一些的一些方法按照文本方法的拆分

目标函数分解


版权声明:本文为lee813原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。