VAE 编码器不直接输出潜在向量 z。相反,它生成潜在空间中概率分布的参数,通常是高斯分布 q(z∣x) 的均值 μ 和对数方差 log(σ2)。为了获取一个实际的潜在向量 z (解码器需要它来重建输入),我们必须从这个分布中采样:z∼q(z∣x)。
这给训练带来了困难。采样操作是随机的。如果将 VAE 视为计算图,这个采样步骤引入了一个随机节点。标准反向传播是我们训练神经网络所依赖的算法,它要求计算图是确定性的才能计算梯度。梯度不能通过纯粹的随机采样过程反向流动,因为这与定义分布的参数 (μ 和 σ) 相关。如果样本 z 是随机获得的,编码器如何学习调整其权重以生成“更好”的 μ 和 σ 值呢?梯度下降的路径在采样阶段被有效阻断了。
这就是重参数化技巧发挥作用的地方。这是一种巧妙的方法,用于重构采样过程,从而将随机性分离出来,使得梯度能够流经我们需要训练的网络部分。
核心思想是将随机变量 z 表示为分布参数 (μ,σ) 的确定性函数,以及从固定标准分布 (通常是标准正态分布 N(0,I)) 中抽取的独立噪声变量 ϵ。
对于高斯潜在变量,重参数化表示为:
z=μ+σ⋅ϵ
其中:
- μ 是编码器对于给定输入 x 输出的均值向量。
- σ 是标准差向量。通常,编码器输出 log(σ2) (对数方差)。然后我们计算 σ=exp(0.5⋅log(σ2)) 以确保 σ 始终为正,并提高训练期间的数值稳定性。
- ϵ 是从标准正态分布 ϵ∼N(0,I) 中采样的噪声向量。此采样与输入 x 或编码器的参数无关。
这如何解决梯度问题?
通过重参数化 z,我们改变了随机性的来源。
- 编码器网络根据输入 x 确定性地计算 μ(x) 和 σ(x)。
- 从固定分布 N(0,I) 中抽取一个随机样本 ϵ。这个 ϵ 是外部输入,不是我们进行微分所需路径中任何已学习参数的结果。
- 然后使用确定性变换 z=μ(x)+σ(x)⋅ϵ 计算潜在向量 z。
现在,从 z 回到 μ(x) 和 σ(x) 的路径完全是确定性的。当我们计算 VAE 的总损失并需要求其相对于编码器权重的梯度时,这些梯度可以流动:
- 从损失函数流回 z。
- 通过确定性计算 z=μ+σ⋅ϵ 流回 μ 和 σ。
- 由于 μ 和 σ 是编码器的直接输出(或从其输出如 log(σ2) 确定性地推导而来),梯度可以继续流回编码器网络,从而使其权重能够通过标准反向传播进行更新。
下图说明了应用重参数化技巧前后计算图,显示了它如何实现梯度流动。
此图对比了重参数化之前的情况,其中随机采样器阻断了梯度流向编码器参数,以及重参数化之后的情况,其中确定性变换使得梯度可以从损失函数、经过潜在变量 z、回传至 μ 和 σ,并最终抵达编码器的权重。
关于对数方差的说明
如前所述,编码器通常会输出每个潜在维度 j 的方差对数 log(σj2),而不是直接输出 σj 或 σj2。这有以下几个原因:
- 范围: 对数方差可以取任意实数值,而 σj2 必须为正(σj 为非负)。这种无约束的输出范围可以使神经网络的学习变得更容易。
- 正性: 当我们计算 σj2=exp(log(σj2)) 时,方差 σj2 保证为正。
标准差 σj 然后计算为 σj=exp(log(σj2)),这简化为 σj=exp(0.5⋅log(σj2))。这即是方程 zj=μj+σj⋅ϵj 中使用的 σj。
从根本上说,重参数化技巧是一种数学上的重新表述,它将随机性与我们希望学习的参数分离。这使我们能够使用标准基于梯度的优化方法来端到端地训练 VAE,有效地使得编码器能够学习如何生成有用的潜在分布。如果没有这项技术,训练 VAE 将需要更复杂的方案,例如强化学习或针对随机网络的专用梯度估计器,这些方法通常方差更高,且样本效率较低。因此,重参数化技巧是变分自编码器实用和广泛应用的一个基本组成部分。