在我们对变分自编码器的考察中,我们确认了ELBO,即 L E L B O L_{ELBO} L E L BO ,作为我们的目标函数。此目标包含对近似后验分布 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 的期望:
L E L B O = E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] − D K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) L_{ELBO} = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z)) L E L BO = E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z )] − D K L ( q ϕ ( z ∣ x ) ∣∣ p ( z ))
为了使用随机梯度下降 (gradient descent)(SGD)等基于梯度的方法来优化此目标,我们需要计算相对于编码器(ϕ \phi ϕ )和解码器(θ \theta θ )参数 (parameter)的梯度。KL散度项 D K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) D_{KL}(q_\phi(z|x) || p(z)) D K L ( q ϕ ( z ∣ x ) ∣∣ p ( z )) 通常可以进行解析计算(正如我们将看到的关于高斯分布的情况),并且可以求得其相对于 ϕ \phi ϕ 的梯度。
然而,重构项 E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z )] 带来了一个难题。具体而言,我们如何通过采样过程 z ∼ q ϕ ( z ∣ x ) z \sim q_\phi(z|x) z ∼ q ϕ ( z ∣ x ) 反向传播 (backpropagation)梯度以更新 ϕ \phi ϕ ?从 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 采样的行为是一种随机操作,简单地看,它在我们的计算图中制造了一个不可导点。这就是重参数化技巧发挥作用之处。
问题:采样中断梯度流
设想编码器网络输出分布 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 的参数 (parameter),例如,如果 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 是高斯分布,则输出均值 μ ϕ ( x ) \mu_\phi(x) μ ϕ ( x ) 和标准差 σ ϕ ( x ) \sigma_\phi(x) σ ϕ ( x ) 。接着,我们从这个分布中采样 z z z 。解码器接收这个 z z z 并尝试重构 x x x 。
如果我们尝试反向传播 (backpropagation)重构损失,梯度需要从解码器,通过 z z z ,然后到达编码器的参数 μ ϕ ( x ) \mu_\phi(x) μ ϕ ( x ) 和 σ ϕ ( x ) \sigma_\phi(x) σ ϕ ( x ) 。采样步骤 z ∼ q ϕ ( z ∣ x ) z \sim q_\phi(z|x) z ∼ q ϕ ( z ∣ x ) 本身存在问题,因为从分布中抽取随机样本的操作,相对于该分布的参数而言,不是直接可导的。梯度流的路径被实际阻断了。
考虑一个简化视图:
x → 编码器 ( ϕ ) → q ϕ ( z ∣ x ) 的参数 → 采样 z 解码器 ( θ ) → log p θ ( x ∣ z ) x \rightarrow \text{编码器}(\phi) \rightarrow q_\phi(z|x) \text{ 的参数} \xrightarrow{\text{采样 } z} \text{解码器}(\theta) \rightarrow \log p_\theta(x|z) x → 编码器 ( ϕ ) → q ϕ ( z ∣ x ) 的参数 采样 z 解码器 ( θ ) → log p θ ( x ∣ z ) 。
梯度 ∇ ϕ log p θ ( x ∣ z ) \nabla_\phi \log p_\theta(x|z) ∇ ϕ log p θ ( x ∣ z ) 是重构项所必需的,但采样步骤阻断了这一点。
解决办法:将随机性与参数 (parameter)分离
重参数化技巧通过重新构想采样过程,提供了一种巧妙的解决办法。我们不再直接从 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 采样 z z z ,而是引入一个辅助噪声变量 ϵ \epsilon ϵ ,该变量从一个简单的固定分布 p ( ϵ ) p(\epsilon) p ( ϵ ) 中采样(例如,标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) )。然后,我们将 z z z 表示为一个确定性函数 g ϕ ( x , ϵ ) g_\phi(x, \epsilon) g ϕ ( x , ϵ ) ,该函数使用编码器的参数来变换此噪声 ϵ \epsilon ϵ 。
因此,z = g ϕ ( x , ϵ ) z = g_\phi(x, \epsilon) z = g ϕ ( x , ϵ ) ,其中 ϵ ∼ p ( ϵ ) \epsilon \sim p(\epsilon) ϵ ∼ p ( ϵ ) 。
重点在于 g ϕ ( x , ϵ ) g_\phi(x, \epsilon) g ϕ ( x , ϵ ) 是一个确定性函数,其参数(源自 ϕ \phi ϕ )是该函数的一部分。现在,随机性被隔离到 ϵ \epsilon ϵ ,而 ϵ \epsilon ϵ 不依赖于 ϕ \phi ϕ 。
这使我们能够改写期望:
E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] = E p ( ϵ ) [ log p θ ( x ∣ g ϕ ( x , ϵ ) ) ] \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] = \mathbb{E}_{p(\epsilon)}[\log p_\theta(x|g_\phi(x, \epsilon))] E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z )] = E p ( ϵ ) [ log p θ ( x ∣ g ϕ ( x , ϵ ))]
当我们使用来自 p ( ϵ ) p(\epsilon) p ( ϵ ) 的单个样本 ϵ ( l ) \epsilon^{(l)} ϵ ( l ) 来进行蒙特卡洛估计时,该项变为 log p θ ( x ∣ g ϕ ( x , ϵ ( l ) ) ) \log p_\theta(x|g_\phi(x, \epsilon^{(l)})) log p θ ( x ∣ g ϕ ( x , ϵ ( l ) )) 。现在,我们可以计算梯度 ∇ ϕ log p θ ( x ∣ g ϕ ( x , ϵ ( l ) ) ) \nabla_\phi \log p_\theta(x|g_\phi(x, \epsilon^{(l)})) ∇ ϕ log p θ ( x ∣ g ϕ ( x , ϵ ( l ) )) ,因为在给定 x x x 和 ϵ ( l ) \epsilon^{(l)} ϵ ( l ) 的情况下,g ϕ ( x , ϵ ( l ) ) g_\phi(x, \epsilon^{(l)}) g ϕ ( x , ϵ ( l ) ) 是 ϕ \phi ϕ 的一个确定性函数。梯度可以通过函数 g g g 回流到参数 ϕ \phi ϕ 。
高斯潜在变量的重参数 (parameter)化
当 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 是一个多元高斯分布时,这种技巧最常被阐明和使用。我们假设一个对角协方差结构:
q ϕ ( z ∣ x ) = N ( z ∣ μ ϕ ( x ) , diag ( σ ϕ , 1 2 ( x ) , . . . , σ ϕ , J 2 ( x ) ) ) q_\phi(z|x) = \mathcal{N}(z | \mu_\phi(x), \text{diag}(\sigma^2_{\phi,1}(x), ..., \sigma^2_{\phi,J}(x))) q ϕ ( z ∣ x ) = N ( z ∣ μ ϕ ( x ) , diag ( σ ϕ , 1 2 ( x ) , ... , σ ϕ , J 2 ( x )))
在此,由 ϕ \phi ϕ 参数化的编码器网络,为每个输入 x x x 输出均值向量 (vector) μ ϕ ( x ) \mu_\phi(x) μ ϕ ( x ) 和方差向量(或标准差向量)σ ϕ 2 ( x ) \sigma^2_\phi(x) σ ϕ 2 ( x ) 。
为了进行重参数化,我们首先采样一个噪声向量 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ ∼ N ( 0 , I ) ,其中 I I I 是单位矩阵,并且 ϵ \epsilon ϵ 与 z z z 具有相同的维度。然后,我们可以生成 z z z 如下:
z = μ ϕ ( x ) + σ ϕ ( x ) ⊙ ϵ z = \mu_\phi(x) + \sigma_\phi(x) \odot \epsilon z = μ ϕ ( x ) + σ ϕ ( x ) ⊙ ϵ
其中 σ ϕ ( x ) \sigma_\phi(x) σ ϕ ( x ) 是标准差向量(方差的逐元素平方根),⊙ \odot ⊙ 表示逐元素乘积。
现在,z z z 仍然是根据 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 分布的随机变量,但它被表示为 μ ϕ ( x ) \mu_\phi(x) μ ϕ ( x ) 、σ ϕ ( x ) \sigma_\phi(x) σ ϕ ( x ) 和独立噪声 ϵ \epsilon ϵ 的确定性变换。损失相对于 μ ϕ ( x ) \mu_\phi(x) μ ϕ ( x ) 和 σ ϕ ( x ) \sigma_\phi(x) σ ϕ ( x ) (进而相对于 ϕ \phi ϕ )的梯度可以通过该变换的标准反向传播 (backpropagation)来计算。
在实践中,编码器通常输出 μ ϕ ( x ) \mu_\phi(x) μ ϕ ( x ) 和 log σ ϕ 2 ( x ) \log \sigma^2_\phi(x) log σ ϕ 2 ( x ) (对数方差)。这是为了数值稳定性,并确保方差 σ ϕ 2 ( x ) \sigma^2_\phi(x) σ ϕ 2 ( x ) 始终为正。如果网络输出 log σ ϕ 2 ( x ) \log \sigma^2_\phi(x) log σ ϕ 2 ( x ) ,那么 σ ϕ ( x ) = exp ( 0.5 ⋅ log σ ϕ 2 ( x ) ) \sigma_\phi(x) = \exp(0.5 \cdot \log \sigma^2_\phi(x)) σ ϕ ( x ) = exp ( 0.5 ⋅ log σ ϕ 2 ( x )) 。
梯度流图示
下面的图展示了重参数 (parameter)化技巧如何改变计算图以允许梯度流动。
该图展示了计算路径。在重参数化之前,z z z 的采样节点阻断了梯度流向编码器参数 ϕ \phi ϕ 。在重参数化之后,z z z 从编码器输出和一个独立噪声源 ϵ \epsilon ϵ 确定性地计算得到,使得梯度能够回流到 ϕ \phi ϕ 。
此法为何奏效:路径导数估计器
重参数 (parameter)化技巧是文献中被称为路径导数估计器的一个示例。主要思想是将微分算子移到期望内部。我们希望计算:
∇ ϕ E q ϕ ( z ∣ x ) [ f ( z ) ] \nabla_\phi \mathbb{E}_{q_\phi(z|x)}[f(z)] ∇ ϕ E q ϕ ( z ∣ x ) [ f ( z )]
其中 f ( z ) = log p θ ( x ∣ z ) f(z) = \log p_\theta(x|z) f ( z ) = log p θ ( x ∣ z ) 。如果 z = g ϕ ( x , ϵ ) z = g_\phi(x, \epsilon) z = g ϕ ( x , ϵ ) 且 ϵ ∼ p ( ϵ ) \epsilon \sim p(\epsilon) ϵ ∼ p ( ϵ ) ,那么期望变为:
∇ ϕ E p ( ϵ ) [ f ( g ϕ ( x , ϵ ) ) ] \nabla_\phi \mathbb{E}_{p(\epsilon)}[f(g_\phi(x, \epsilon))] ∇ ϕ E p ( ϵ ) [ f ( g ϕ ( x , ϵ ))]
由于 p ( ϵ ) p(\epsilon) p ( ϵ ) 不依赖于 ϕ \phi ϕ ,并且假设 f f f 和 g ϕ g_\phi g ϕ 表现良好(可微),我们可以交换梯度和期望算子:
E p ( ϵ ) [ ∇ ϕ f ( g ϕ ( x , ϵ ) ) ] \mathbb{E}_{p(\epsilon)}[\nabla_\phi f(g_\phi(x, \epsilon))] E p ( ϵ ) [ ∇ ϕ f ( g ϕ ( x , ϵ ))]
现在,梯度在期望内部。我们可以使用蒙特卡洛采样来近似此期望:从 p ( ϵ ) p(\epsilon) p ( ϵ ) 中抽取 L L L 个样本 ϵ ( 1 ) , . . . , ϵ ( L ) \epsilon^{(1)}, ..., \epsilon^{(L)} ϵ ( 1 ) , ... , ϵ ( L ) ,梯度估计如下:
1 L ∑ l = 1 L ∇ ϕ f ( g ϕ ( x , ϵ ( l ) ) ) \frac{1}{L} \sum_{l=1}^{L} \nabla_\phi f(g_\phi(x, \epsilon^{(l)})) L 1 l = 1 ∑ L ∇ ϕ f ( g ϕ ( x , ϵ ( l ) ))
在实践中,对于VAE训练,我们通常在每个小批量的每个数据点 x x x 使用单个 ϵ \epsilon ϵ 样本(即 L = 1 L=1 L = 1 )。项 ∇ ϕ f ( g ϕ ( x , ϵ ( l ) ) ) \nabla_\phi f(g_\phi(x, \epsilon^{(l)})) ∇ ϕ f ( g ϕ ( x , ϵ ( l ) )) 可以使用链式法则计算:
∇ ϕ f ( g ϕ ( x , ϵ ( l ) ) ) = ∂ f ∂ z ∣ z = g ϕ ( x , ϵ ( l ) ) ∂ g ϕ ( x , ϵ ( l ) ) ∂ ϕ \nabla_\phi f(g_\phi(x, \epsilon^{(l)})) = \frac{\partial f}{\partial z} \Big|_{z=g_\phi(x, \epsilon^{(l)})} \frac{\partial g_\phi(x, \epsilon^{(l)})}{\partial \phi} ∇ ϕ f ( g ϕ ( x , ϵ ( l ) )) = ∂ z ∂ f z = g ϕ ( x , ϵ ( l ) ) ∂ ϕ ∂ g ϕ ( x , ϵ ( l ) )
这正是自动微分库(如TensorFlow或PyTorch中的库)在反向传播 (backpropagation)期间所做的。
优点与适用性
重参数 (parameter)化技巧的主要优点在于它允许使用标准反向传播 (backpropagation)算法对变分自编码器进行端到端训练。与处理随机节点的其他方法(例如分数函数估计器,也称为REINFORCE或对数导数技巧,这与本路径导数情境不同)相比,它通常会产生方差低得多的梯度估计器。方差较低的梯度通常会带来更稳定、更快的训练。
只要我们将随机变量 z z z 表示为其参数和一个独立噪声源的确定性可微变换,重参数化技巧就适用。这对于许多连续分布很有效:
高斯分布 :z = μ + σ ϵ z = \mu + \sigma \epsilon z = μ + σ ϵ ,其中 ϵ ∼ N ( 0 , 1 ) \epsilon \sim \mathcal{N}(0,1) ϵ ∼ N ( 0 , 1 ) 。
均匀分布 :如果 z ∼ U ( a , b ) z \sim U(a, b) z ∼ U ( a , b ) ,则 z = a + ( b − a ) ϵ z = a + (b-a)\epsilon z = a + ( b − a ) ϵ ,其中 ϵ ∼ U ( 0 , 1 ) \epsilon \sim U(0,1) ϵ ∼ U ( 0 , 1 ) 。
指数分布 :如果 z ∼ Exp ( λ ) z \sim \text{Exp}(\lambda) z ∼ Exp ( λ ) ,则 z = − 1 λ log ϵ z = -\frac{1}{\lambda} \log \epsilon z = − λ 1 log ϵ ,其中 ϵ ∼ U ( 0 , 1 ) \epsilon \sim U(0,1) ϵ ∼ U ( 0 , 1 ) 。
拉普拉斯分布 :z = μ − b ⋅ sgn ( ϵ − 0.5 ) ⋅ log ( 1 − 2 ∣ ϵ − 0.5 ∣ ) z = \mu - b \cdot \text{sgn}(\epsilon-0.5) \cdot \log(1 - 2|\epsilon-0.5|) z = μ − b ⋅ sgn ( ϵ − 0.5 ) ⋅ log ( 1 − 2∣ ϵ − 0.5∣ ) ,其中 ϵ ∼ U ( 0 , 1 ) \epsilon \sim U(0,1) ϵ ∼ U ( 0 , 1 ) 。
许多其他分布,包括伽马分布、贝塔分布、柯西分布,也可以进行重参数化。
然而,它并非普遍适用。对于离散潜在变量,即 z z z 从离散集合中取值的情况,这种直接重参数化是不可能的,因为从连续的 ϵ \epsilon ϵ 到离散的 z z z 的映射会涉及不可微操作(如取整或argmax)。对于此类情况,会采用其他技术,例如Gumbel-Softmax技巧(一种连续松弛)或分数函数估计器,尽管它们伴随其自身的一些困难。
对ELBO优化的影响
通过应用重参数 (parameter)化技巧,ELBO中的重构项 E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z ) ] \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] E q ϕ ( z ∣ x ) [ log p θ ( x ∣ z )] 变得相对于编码器参数 ϕ \phi ϕ 可微。如果 q ϕ ( z ∣ x ) q_\phi(z|x) q ϕ ( z ∣ x ) 和 p ( z ) p(z) p ( z ) 被适当选择(例如,都是高斯分布),KL散度项 D K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) D_{KL}(q_\phi(z|x) || p(z)) D K L ( q ϕ ( z ∣ x ) ∣∣ p ( z )) 通常是解析可微的。例如,如果 p ( z ) = N ( 0 , I ) p(z) = \mathcal{N}(0, I) p ( z ) = N ( 0 , I ) 且 q ϕ ( z ∣ x ) = N ( μ ϕ ( x ) , diag ( σ ϕ 2 ( x ) ) ) q_\phi(z|x) = \mathcal{N}(\mu_\phi(x), \text{diag}(\sigma^2_\phi(x))) q ϕ ( z ∣ x ) = N ( μ ϕ ( x ) , diag ( σ ϕ 2 ( x ))) ,则KL散度为:
D K L ( q ϕ ( z ∣ x ) ∣ ∣ p ( z ) ) = 1 2 ∑ j = 1 J ( μ ϕ , j ( x ) 2 + σ ϕ , j 2 ( x ) − log ( σ ϕ , j 2 ( x ) ) − 1 ) D_{KL}(q_\phi(z|x) || p(z)) = \frac{1}{2} \sum_{j=1}^{J} \left( \mu_{\phi,j}(x)^2 + \sigma^2_{\phi,j}(x) - \log(\sigma^2_{\phi,j}(x)) - 1 \right) D K L ( q ϕ ( z ∣ x ) ∣∣ p ( z )) = 2 1 j = 1 ∑ J ( μ ϕ , j ( x ) 2 + σ ϕ , j 2 ( x ) − log ( σ ϕ , j 2 ( x )) − 1 )
这个表达式显然相对于 μ ϕ , j ( x ) \mu_{\phi,j}(x) μ ϕ , j ( x ) 和 σ ϕ , j 2 ( x ) \sigma^2_{\phi,j}(x) σ ϕ , j 2 ( x ) 是可微的。
因此,整个ELBO可以相对于 ϕ \phi ϕ 和 θ \theta θ 使用梯度上升(或负ELBO的梯度下降 (gradient descent))进行优化。
总而言之,重参数化技巧是训练变分自编码器的一种基本方法。它通过重新表述潜在变量 z z z 的生成,巧妙地规避了通过采样过程进行微分的问题。这使得ELBO目标适用于标准基于梯度的优化,允许梯度从重构损失流回编码器网络的参数。这项创新是使变分自编码器实用且有效的重要一步。