在图像、音频、视频等多媒体领域,“有损压缩”是一个非常常见的问题。不同于无损压缩(如 PNG、ZIP 等),有损压缩允许在重构时损失一些信息,从而换取更高的压缩比。变分自编码器(Variational Autoencoder, VAE)作为生成模型的一种,往往可以和“有损压缩”非常自然地联系起来。
在本文中,我们将从 VAE 的基本公式出发,逐步推导出在有损压缩场景下常用的率失真损失(Rate-Distortion Loss),并说明为什么要“忽略熵折扣”,以及为什么在有损压缩中使用确定性编码器是可行且常见的做法。
一、VAE 的简要回顾
-
由潜变量模型开始
VAE 建立在潜变量模型(Latent Variable Model)之上:我们认为观测数据 x x x 的生成背后有一个隐藏的潜变量 z z z,并假设它们满足:
p θ ( x , z ) = p θ ( z ) p θ ( x ∣ z ) . p_\theta(x, z) = p_\theta(z)p_\theta(x|z). pθ(x,z)=pθ(z)pθ(x∣z).
其中, p θ ( z ) p_\theta(z) pθ(z) 是潜变量的先验分布(Prior); p θ ( x ∣ z ) p_\theta(x|z) pθ(x∣z) 是在给定潜变量 z z z 的条件下生成数据 x x x 的似然分布(Likelihood)。 -
优化对数似然的困难
在最大似然学习中,我们希望最大化:
log p θ ( x ) = log ∫ p θ ( z ) p θ ( x ∣ z ) d z . \log p_\theta(x) = \log \int p_\theta(z)p_\theta(x|z)dz. logpθ(x)=log∫pθ(z)pθ(x∣z)dz.
然而,由于积分难以解析,无法直接对 log p θ ( x ) \log p_\theta(x) logpθ(x) 进行优化。 -
变分下界(ELBO)
为了解决上述难题,VAE 引入了一个可学习的分布 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x)(编码器),并利用变分下界(也称 ELBO)来近似对数似然:
− log p θ ( x ) ≤ E q ϕ ( z ∣ x ) [ − log p θ ( x ∣ z ) ] + KL [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] . -\log p_\theta(x) \leq \mathbb{E}_{q_\phi(z|x)}[-\log p_\theta(x|z)] + \text{KL}[q_\phi(z|x) \| p_\theta(z)]. −logpθ(x)≤Eqϕ(z∣x)[−logpθ(x∣z)]+KL[qϕ(z∣x)∥pθ(z)].
第一项 E q ϕ ( z ∣ x ) [ − log p θ ( x ∣ z ) ] \mathbb{E}_{q_\phi(z|x)}[-\log p_\theta(x|z)] Eqϕ(z∣x)[−logpθ(x∣z)]:可视为重构误差(模型在给定
𝑧时对 𝑥的匹配程度,如果我们假设 x ^ ∼ p θ ( x ∣ z ) \hat{x} \sim p_\theta(x|z) x^∼pθ(x∣z) 是一个高斯分布,且方差固定为 σ 2 \sigma^2 σ2,那么 − log p θ ( x ∣ z ) -\log p_\theta(x|z) −logpθ(x∣z) 只差一个常数项就和 ∥ x − x ^ ∥ 2 \|x - \hat{x}\|^2 ∥x−x^∥2 相对应,依然可以被视为测量 x ^ \hat{x} x^ 和 x x x 之间差异的指标。);
第二项 KL [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] \text{KL}[q_\phi(z|x) \| p_\theta(z)] KL[qϕ(z∣x)∥pθ(z)]:约束潜变量分布不要与先验差异太大。
这就是 VAE 训练时的损失函数:最小化上式右侧,即同时关注重构质量和编码器分布的复杂度。
推导:
我们想要最大化的目标是
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x),其表达式为:
log
p
θ
(
x
)
=
log
∫
p
θ
(
x
,
z
)
d
z
=
log
∫
p
θ
(
z
)
p
θ
(
x
∣
z
)
d
z
.
\log p_\theta(x) = \log \int p_\theta(x, z) \, dz = \log \int p_\theta(z) \, p_\theta(x \mid z) \, dz.
logpθ(x)=log∫pθ(x,z)dz=log∫pθ(z)pθ(x∣z)dz.
由于引入了潜变量
z
z
z,该积分通常难以解析,因此无法直接对
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x) 进行优化。
为了解决这一问题,我们引入一个辅助分布 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(z∣x),用它来近似真实的后验分布 p θ ( z ∣ x ) p_\theta(z \mid x) pθ(z∣x)。这个分布被称为“变分分布”,其参数 ϕ \phi ϕ 可通过优化学习得到。引入 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(z∣x) 的目的在于绕过 log p θ ( x ) \log p_\theta(x) logpθ(x) 中对 z z z 的直接积分。
接下来,我们在
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x) 中引入
q
ϕ
(
z
∣
x
)
q_\phi(z \mid x)
qϕ(z∣x):
先往
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x) 中插入一个巧妙的“1”,即:
log
p
θ
(
x
)
=
log
∫
p
θ
(
z
,
x
)
d
z
=
log
∫
p
θ
(
x
,
z
)
q
ϕ
(
z
∣
x
)
q
ϕ
(
z
∣
x
)
d
z
.
\log p_\theta(x) =\log \int p_\theta(z, x) \, dz= \log \int p_\theta(x, z) \frac{q_\phi(z \mid x)}{q_\phi(z \mid x)} \, dz.
logpθ(x)=log∫pθ(z,x)dz=log∫pθ(x,z)qϕ(z∣x)qϕ(z∣x)dz.
这样做的目的,是为了在被积函数中出现
q
ϕ
(
z
∣
x
)
q_\phi(z \mid x)
qϕ(z∣x),从而可以把对
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x) 的求解转换成对这个引入分布的期望。
若我们有一个概率分布
p
(
z
)
p(z)
p(z),那么对任何可测函数
f
(
z
)
f(z)
f(z),
∫
p
(
z
)
f
(
z
)
d
z
=
E
z
∼
p
(
z
)
[
f
(
z
)
]
.
\int p(z) f(z) \, dz = \mathbb{E}_{z \sim p(z)}[f(z)].
∫p(z)f(z)dz=Ez∼p(z)[f(z)].
这是**“积分 = 期望”**的基本定义:在分布
p
(
z
)
p(z)
p(z) 下,对函数
f
(
z
)
f(z)
f(z) 做积分,相当于对
f
(
z
)
f(z)
f(z) 的期望值。
进一步使用 Jensen 不等式,由于
log
\log
log 函数是凹函数,得到:
log
p
θ
(
x
)
=
log
E
z
∼
q
ϕ
(
z
∣
x
)
[
p
θ
(
z
,
x
)
q
ϕ
(
z
∣
x
)
]
≥
E
z
∼
q
ϕ
(
z
∣
x
)
[
log
p
θ
(
z
,
x
)
q
ϕ
(
z
∣
x
)
]
.
\log p_\theta(x) = \log \mathbb{E}_{z \sim q_\phi(z \mid x)} \left[\frac{p_\theta(z, x)}{q_\phi(z \mid x)}\right] \geq \mathbb{E}_{z \sim q_\phi(z \mid x)} \left[\log \frac{p_\theta(z, x)}{q_\phi(z \mid x)}\right].
logpθ(x)=logEz∼qϕ(z∣x)[qϕ(z∣x)pθ(z,x)]≥Ez∼qϕ(z∣x)[logqϕ(z∣x)pθ(z,x)].
因此,我们得到了
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x) 的下界:
log
p
θ
(
x
)
≥
E
z
∼
q
ϕ
(
z
∣
x
)
[
log
p
θ
(
z
,
x
)
−
log
q
ϕ
(
z
∣
x
)
]
.
\log p_\theta(x) \geq \mathbb{E}_{z \sim q_\phi(z \mid x)} \left[\log p_\theta(z, x) - \log q_\phi(z \mid x)\right].
logpθ(x)≥Ez∼qϕ(z∣x)[logpθ(z,x)−logqϕ(z∣x)].
通过将联合分布
p
θ
(
z
,
x
)
p_\theta(z, x)
pθ(z,x) 分解为
p
θ
(
x
∣
z
)
p
θ
(
z
)
p_\theta(x \mid z) p_\theta(z)
pθ(x∣z)pθ(z),下界可以进一步写为:
log
p
θ
(
x
)
≥
E
q
ϕ
(
z
∣
x
)
[
log
p
θ
(
x
∣
z
)
]
−
K
L
[
q
ϕ
(
z
∣
x
)
∥
p
θ
(
z
)
]
.
\log p_\theta(x) \geq \mathbb{E}_{q_\phi(z \mid x)} \left[\log p_\theta(x \mid z)\right] - \mathrm{KL}\left[q_\phi(z \mid x) \| p_\theta(z)\right].
logpθ(x)≥Eqϕ(z∣x)[logpθ(x∣z)]−KL[qϕ(z∣x)∥pθ(z)].
在上式中:
- 第一项 E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] \mathbb{E}_{q_\phi(z \mid x)} \left[\log p_\theta(x \mid z)\right] Eqϕ(z∣x)[logpθ(x∣z)] 称为重构项,衡量在 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(z∣x) 分布下,模型能否很好地重构 x x x;
- 第二项 K L [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] \mathrm{KL}\left[q_\phi(z \mid x) \| p_\theta(z)\right] KL[qϕ(z∣x)∥pθ(z)] 称为正则化项,限制变分分布 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(z∣x) 与先验分布 p θ ( z ) p_\theta(z) pθ(z) 的差异。
最终,我们得到经典的变分下界(ELBO):
log p θ ( x ) ≥ E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] − K L [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] . \log p_\theta(x) \geq \mathbb{E}_{q_\phi(z \mid x)} \left[\log p_\theta(x \mid z)\right] -\mathrm{KL}\left[q_\phi(z \mid x) \| p_\theta(z)\right]. logpθ(x)≥Eqϕ(z∣x)[logpθ(x∣z)]−KL[qϕ(z∣x)∥pθ(z)].
优化时,通常最小化 ELBO 的负值,称为负 ELBO(negative ELBO):
−
log
p
θ
(
x
)
≤
−
E
q
ϕ
(
z
∣
x
)
[
log
p
θ
(
x
∣
z
)
]
−
K
L
[
q
ϕ
(
z
∣
x
)
∥
p
θ
(
z
)
]
.
-\log p_\theta(x) \leq - \mathbb{E}_{q_\phi(z \mid x)} \left[\log p_\theta(x \mid z)\right] - \mathrm{KL}\left[q_\phi(z \mid x) \| p_\theta(z)\right].
−logpθ(x)≤−Eqϕ(z∣x)[logpθ(x∣z)]−KL[qϕ(z∣x)∥pθ(z)].
我们不直接优化
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x),而是优化这个下界,因为下界里出现了
q
ϕ
(
z
∣
x
)
q_\phi(z \mid x)
qϕ(z∣x) 和可分的
log
p
θ
(
x
∣
z
)
\log p_\theta(x \mid z)
logpθ(x∣z) 以及 KL 项,具有可微、可计算的结构。我们通过随机采样
z
z
z 并对神经网络做梯度下降即可。
回顾一下,
log
p
θ
(
x
)
\log p_\theta(x)
logpθ(x) 的表达式是:
log
p
θ
(
x
)
=
log
∫
p
θ
(
x
,
z
)
d
z
=
log
∫
p
θ
(
z
)
p
θ
(
x
∣
z
)
d
z
.
\log p_\theta(x)=\log \int p_\theta(x, z) \, dz =\log \int p_\theta(z) \, p_\theta(x \mid z) \, dz.
logpθ(x)=log∫pθ(x,z)dz=log∫pθ(z)pθ(x∣z)dz.
对于许多带有潜变量(
z
z
z)的模型而言,这个积分往往没有解析解,也无法通过数值方法在高维情形下直接准确地估计或求梯度。换句话说,
∇
θ
log
p
θ
(
x
)
\nabla_\theta \log p_\theta(x)
∇θlogpθ(x) 往往难以在闭式或可微的形式下表达出来。
- 变分下界(ELBO)是一个可计算、可微的替代目标
变分推断(Variational Inference)通过在 log p θ ( x ) \log p_\theta(x) logpθ(x) 的积分里,插入辅助分布 q ϕ ( z ∣ x ) q_\phi(z \mid x) qϕ(z∣x) 并利用 Jensen 不等式,构建了一个可微、易于估计的下界(ELBO):
log p θ ( x ) ≥ E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] − K L [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] . \log p_\theta(x) \geq \mathbb{E}_{q_\phi(z \mid x)} [\log p_\theta(x \mid z)]- \mathrm{KL}[q_\phi(z \mid x) \| p_\theta(z)]. logpθ(x)≥Eqϕ(z∣x)[logpθ(x∣z)]−KL[qϕ(z∣x)∥pθ(z)].
E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] \mathbb{E}_{q_\phi(z \mid x)}[\log p_\theta(x \mid z)] Eqϕ(z∣x)[logpθ(x∣z)] 这一项通过随机采样 z z z 来近似即可;
K L [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] \mathrm{KL}[q_\phi(z \mid x) \| p_\theta(z)] KL[qϕ(z∣x)∥pθ(z)] 也可以根据分布的形式或再进一步用近似抽样的方法来计算和求梯度。
由于这两部分在许多情况下都能通过可微的神经网络来表示(尤其在 VAE 框架下),于是我们就能对该下界进行梯度下降。换言之,ELBO 本身是“可训练、可微”的目标。
- 通过采样
z
z
z 来估计梯度
在实践中,针对 ELBO 的两项:
重构项:
E
q
ϕ
(
z
∣
x
)
[
log
p
θ
(
x
∣
z
)
]
\mathbb{E}_{q_\phi(z \mid x)}[\log p_\theta(x \mid z)]
Eqϕ(z∣x)[logpθ(x∣z)]
我们对
z
z
z 进行抽样,即
z
∼
q
ϕ
(
z
∣
x
)
z \sim q_\phi(z \mid x)
z∼qϕ(z∣x),再用神经网络算出
log
p
θ
(
x
∣
z
)
\log p_\theta(x \mid z)
logpθ(x∣z)。
KL 项:
K
L
[
q
ϕ
(
z
∣
x
)
∥
p
θ
(
z
)
]
\mathrm{KL}[q_\phi(z \mid x) \| p_\theta(z)]
KL[qϕ(z∣x)∥pθ(z)]
如果是一些常见分布(如高斯分布),有闭式表达式;即使没有,也可继续用随机近似或其他方法进行估计。
通过这种方式,我们就可以对“ELBO = 重构项 + KL 散度”的目标函数执行随机梯度下降(SGD / Adam 等),并对 θ \theta θ 和 ϕ \phi ϕ 同时做更新。
二、从 VAE 到有损压缩
-
“失真”和“率”的概念
失真(Distortion):衡量数据是否被“扭曲”或“变形”,例如 − log p θ ( x ∣ z ) -\log p_\theta(x|z) −logpθ(x∣z) 衡量给定 z z z 时重构 x x x 的误差。
率(Rate):指编码或传输所需的比特数,分布越简单,所需比特越少。 -
在 VAE 公式中加入权衡系数 β \beta β
为了在“失真”和“率”之间进行灵活调整, β \beta β-VAE 在 KL 散度项前加入一个系数 β \beta β:
− log p θ ( x ) ≤ E q ϕ ( z ∣ x ) [ − log p θ ( x ∣ z ) ] + β KL [ q ϕ ( z ∣ x ) ∥ p θ ( z ) ] . -\log p_\theta(x) \leq \mathbb{E}_{q_\phi(z|x)}[-\log p_\theta(x|z)] + \beta \text{KL}[q_\phi(z|x) \| p_\theta(z)]. −logpθ(x)≤Eqϕ(z∣x)[−logpθ(x∣z)]+βKL[qϕ(z∣x)∥pθ(z)].
- 当 β > 1 \beta > 1 β>1:更注重减少潜变量分布的复杂度,倾向于更高压缩比,但可能增大失真;
- 当 β < 1 \beta < 1 β<1:更注重降低重构失真,可能对应更高的码率。
-
KL 散度与交叉熵的关系
KL 散度可以表示为交叉熵与熵的差:
KL [ q ∥ p ] = CE [ q ∥ p ] − H [ q ] , \text{KL}[q \| p] = \text{CE}[q \| p] - H[q], KL[q∥p]=CE[q∥p]−H[q],
其中:
CE [ q ∥ p ] = E q ( z ) [ − log p ( z ) ] , H [ q ] = E q ( z ) [ − log q ( z ) ] . \text{CE}[q \| p] = \mathbb{E}_{q(z)}[-\log p(z)], \quad H[q] = \mathbb{E}_{q(z)}[-\log q(z)]. CE[q∥p]=Eq(z)[−logp(z)],H[q]=Eq(z)[−logq(z)]. -
“忽略”或“无法利用”熵项
在有损压缩中,编码器的随机性无法被转化为“免费比特”。因此,熵项 H [ q ] H[q] H[q] 通常被忽略,从而得到简化后的损失函数:
L ( x ) = E q ( z ∣ x ) [ − log p ( x ∣ z ) − β log p ( z ) ] , L(x) = \mathbb{E}_{q(z|x)}[-\log p(x|z) - \beta \log p(z)], L(x)=Eq(z∣x)[−logp(x∣z)−βlogp(z)],
其中:
- − log p ( x ∣ z ) -\log p(x|z) −logp(x∣z) 衡量重构误差(失真);
- − log p ( z ) -\log p(z) −logp(z) 衡量编码潜变量所需的比特数(率)。
三、为何引入“确定性编码器”
-
确定性编码器定义
给定 x x x,输出唯一的 z z z,相当于 q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x) 是 δ \delta δ 分布。 -
熵项归零
确定性编码器中, q ϕ ( z ∣ x ) q_\phi(z|x) qϕ(z∣x) 的熵 H [ q ] = 0 H[q] = 0 H[q]=0,简化优化目标。 -
不降低表达能力
只要先验 p ( z ) p(z) p(z) 和似然 p ( x ∣ z ) p(x|z) p(x∣z) 足够灵活,确定性编码器依然可以实现最优潜变量表示。