【问题标题】:keras variational autoencoder loss functionkeras 变分自编码器损失函数
【发布时间】:2020-02-20 19:49:56
【问题描述】:

我读过 Keras 的 this blog 关于 VAE 实现的内容,其中 VAE 损失是这样定义的:

def vae_loss(x, x_decoded_mean):
    xent_loss = objectives.binary_crossentropy(x, x_decoded_mean)
    kl_loss = - 0.5 * K.mean(1 + z_log_sigma - K.square(z_mean) - K.exp(z_log_sigma), axis=-1)
    return xent_loss + kl_loss

我查看了Keras documentation,VAE 损失函数是这样定义的: 在这个实现中,reconstruction_loss 乘以 original_dim,我在第一个实现中没有看到!

if args.mse:
        reconstruction_loss = mse(inputs, outputs)
    else:
        reconstruction_loss = binary_crossentropy(inputs,
                                                  outputs)

    reconstruction_loss *= original_dim
    kl_loss = 1 + z_log_var - K.square(z_mean) - K.exp(z_log_var)
    kl_loss = K.sum(kl_loss, axis=-1)
    kl_loss *= -0.5
    vae_loss = K.mean(reconstruction_loss + kl_loss)
    vae.add_loss(vae_loss)

有人能解释一下为什么吗?谢谢!

【问题讨论】:

  • 仍然不知道为什么,但在我的测试中,我确实必须增加很多重建损失才能训练,否则 KL 太大而赢得比赛。也许这个原始的暗淡是选择增加多少重建损失的关键......必须花一点数学时间来检查这是否属实。
  • 通过增加重建损失,你的意思是你将它乘以大于一的数字?
  • 对于我的数据,我的潜在空间的结构和聚类都很好,但重建的输入与输入有一些主要差异。也许像你这样的事情也发生在我身上!

标签: python keras autoencoder loss-function


【解决方案1】:

first_one:CE + mean(kl, axis=-1) = CE + sum(kl, axis=-1) / d

second_one:d * CE + sum(kl, axis=-1)

所以: first_one = second_one / d

请注意,第二个返回所有样本的平均损失,但第一个返回所有样本的损失向量。

【讨论】:

    【解决方案2】:

    在VAE中,重建损失函数可以表示为:

    reconstruction_loss = - log(p ( x | z))
    

    如果假设解码器输出分布为高斯分布,则损失函数归结为 MSE,因为:

    reconstruction_loss = - log(p( x | z)) = - log ∏ ( N(x(i), x_out(i), sigma**2) = − ∑ log ( N(x(i), x_out(i), sigma**2) . alpha . ∑ (x(i), x_out(i))**2
    

    相比之下,MSE 损失的等式是:

    L(x,x_out) = MSE = 1/m ∑ (x(i) - x_out(i)) **2
    

    其中 m 是输出维度。例如,在 MNIST 中 m = 宽 × 高 × 通道 = 28 × 28 × 1 = 784

    因此,

    reconstruction_loss = mse(inputs, outputs)
    

    应乘以 m(即原始维度)以等于 VAE 公式中的原始重建损失。

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2018-09-13
      • 2021-01-04
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 2021-10-08
      • 2016-04-12
      相关资源
      最近更新 更多