当使用变分自动编码器生成样本时,我们从ñ( 0 , 1 )N(0,1)代替μ + σñ( 0 , 1 )μ+σN(0,1)

机器算法验证 机器学习 自动编码器 变分贝叶斯 生成模型
2022-03-06 17:15:00

背景:我试图了解变分自动编码器作为生成器的使用。我的理解:

  • 在训练期间,对于一个输入点xi我们想学习潜在的μiσi然后采样ziN(μi,σi)并将其馈送到解码器以进行重建x^i=decode(zi).
  • 但是我们不能用采样算子做反向传播,所以我们重新参数化并使用zi=μi+σiϵ在哪里ϵN(0,1). 我们的重建变成x^i=decode(μi+σiϵ).

但是,当我们完成训练并准备将其用作生成器时,我们会采样zN(0,1)并将其提供给解码器:xsample=decode(z).

让我困惑的部分是,在训练期间,解码操作是使用μi+σiϵ据我了解,这是使用N(μi,σi)与不同μiσi对于每个训练示例。然而,在生成期间,解码操作(有效地)在ϵ独自从N(0,1). 我们为什么要设置μ=0σ=1在生成期间(即使用z=0+1ϵ)?

1个回答

训练时,我们在画zP(z|x),然后用解码x^=g(z).

在生成期间,我们正在绘制zP(z),然后解码x=g(z).

所以这回答了你的问题:在生成过程中,我们希望从潜在代码的先验分布中生成样本,而在训练期间,我们正在从后验分布中抽取样本,因为我们正在尝试重建特定的数据点。