VAE 中的重新参数化技巧,我们应该怎么做?

机器算法验证 变分贝叶斯 生成模型
2022-04-11 09:43:16

我对重新参数化技巧如何工作感到困惑。本文中显示它非常简单。你学习了两个向量 ,从中采样,然后你的潜在向量将是(其中是元素乘积。): 但是当我查看 VAE 的 TensorFlow 教程代码时,它不仅仅是一个简单的代码是这样的:σμϵN(0,1)Z

Z=μ+σϵ

  def reparameterize(self, mean, logvar):
    eps = tf.random.normal(shape=mean.shape)
    return eps * tf.exp(logvar * .5) + mean

这表明了这一点:

Z=μ+ϵ×e0.5×logvar

这两个不一样,我很困惑,

  1. 首先为什么它学习方差的对数(正如变量的名称所暗示的那样)而不是仅仅学习方差。
  2. 二、为什么要乘以0.5?
  3. 最后,哪一个是正确的重新参数化技巧(如果它们不同)?
1个回答
  1. 我们这样做只是因为随机变量的方差被限制为正(即),因此如果我们要尝试学习方差,我们将不得不以某种方式约束神经网络的输出为正。解决这个问题的一个简单方法是学习对数,因为确保 .σ2R+log(σ2)Rexp(log(σ2))R+

  2. 是标准偏差,如您所知,它是方差的平方根。然后你可以看到对数外的 0.5 的乘积等于将对数内的方差提高到 0.5 的幂:σ

e0.5log(var)=elog(var0.5)=var0.5=σ

  1. 鉴于(2)的答案,应该清楚它们是相同的。