优化方式
公式的右侧具有有关VAE损失函数的两个重要信息。解码器项 E z ∼ Q [ l o g P θ ( x ∣ z ) ] \mathbb E_{z\sim Q}[logP_θ(x|z)] Ez∼Q[logPθ(x∣z)]表示生成器从推理模型的输出中获取 z z z个样本以重构输入。最大化该项意味着将重建损失 L R \mathcal L_R LR最小化。如果图像(数据)分布假定为高斯分布,则可以使用MSE。
如果每个像素(数据)都被认为是伯努利分布,那么损失函数就是一个二元交叉熵。
第二项 − D K L ( Q ϕ ( z ∣ x ) ∥ P θ ( z ) ) - D_{KL}(Q_\phi (z|x) \| P_θ(z)) −DKL(Qϕ(z∣x)∥Pθ(z)),由于 Q ϕ Q_\phi Qϕ是高斯分布。通常 P θ ( z ) = P ( z ) = N ( 0 , 1 ) P_θ(z)=P(z)=\mathcal N(0,1) Pθ(z)=P(z)=N(0,1),也是均值为0且标准偏差等于1.0的高斯分布。KL项可以简化为:
− D K L ( Q ϕ ( z ∣ x ) ∥ P θ ( z ) ) = 1 2 ∑ j = 0 J ( 1 + l o g ( σ j ) 2 − ( μ j ) 2 − ( σ j ) 2 ) ( 12 ) - D_{KL}(Q_\phi (z|x) \| P_θ(z))=\frac{1}{2} \sum_{j=0}^J (1+log(\sigma_j)2-(\mu_j)2-(\sigma_j)^2)\qquad(12) −DKL(Qϕ(z∣x)∥Pθ(z))=21j=0∑J(1+log(σj)2−(μj)2−(σj)2)(12)
其中 J J J是 z z z的维数。和都是通过推理模型计算得到的关于 x x x的函数。要最大化 − D K L -D_{KL} −DKL:则 σ j → 1 \sigma_j \to 1 σj→1, μ j → 0 \mu_j \to 0 μj→0。 P ( z ) = N ( 0 , 1 ) P(z)=\mathcal N(0,1) P(z)=N(0,1)的选择是由于各向同性单位高斯分布的性质,可以给定适当的函数将其变形为任意分布。
根据公式(12),KL损失 L K L \mathcal L_{KL} LKL为 D K L D_{KL} DKL。 综上,VAE损失函数定义为:
L V A E = L R + L K L ( 13 ) \mathcal L_{VAE}=\mathcal L_R + \mathcal L_{KL}\qquad (13) LVAE=LR+LKL(13)
给定编码器和解码器模型的情况下,在构建和训练VAE之前,还有一个问题需要解决。
重参数化技巧(Reparameterization trick)
下图左侧显示了VAE网络。编码器获取输入 x x x,并估计潜矢量z的多元高斯分布的均值 μ μ μ和标准差 σ σ σ。 解码器从潜矢量 z z z采样,以将输入重构为 x x x。
但是反向传播梯度不会通过随机采样块。虽然可以为神经网络提供随机输入,但梯度不可能穿过随机层。
解决此问题的方法是将“采样”过程作为输入,如图右侧所示。 采样计算为:
S a m p l e = μ + ε σ ( 14 ) Sample=\mu + εσ\qquad(14) Sample=μ+εσ(14)
如果 ε ε ε和 σ σ σ以矢量形式表示,则 ε σ εσ εσ是逐元素乘法。 使用公式(14),令采样好像直接来自于潜空间。 这项技术被称为重参数化技巧。
之后在输入端进行采样,可以使用熟悉的优化算法(例如SGD,Adam或RMSProp)来训练VAE网络。