Wasserstein 损失可以是负数吗?
Wasserstein loss can be negative?
我目前正在使用(大约)Wasserstein 损失在 keras 中训练 WGAN,如下所示:
def wasserstein_loss(y_true, y_pred):
return K.mean(y_true * y_pred)
然而,这个损失显然可以是负数,这让我很奇怪。
我对 WGAN 进行了 200 个 epoch 的训练,得到了下面的 critic Wasserstein 损失训练曲线。
以上损失由
计算
d_loss_valid = critic.train_on_batch(real, np.ones((batch_size, 1)))
d_loss_fake = critic.train_on_batch(fake, -np.ones((batch_size, 1)))
d_loss, _ = 0.5*np.add(d_loss_valid, d_loss_fake)
生成的样本质量很好,所以我认为我正确地训练了 WGAN。但是,我仍然不明白为什么 Wasserstein 损失可能为负而模型仍然有效。根据 WGAN 原论文,Wasserstein loss 可以作为 GAN 的性能指标,那么我们应该如何解读呢?我是不是误会了什么?
Wasserstein 损失是地球运动距离的度量,它是两个概率分布之间的差异。在 tensorflow 中,它被实现为 d_loss = tf.reduce_mean(d_fake) - tf.reduce_mean(d_real)
如果 d_fake
在 d_real
分布的另一侧移动太远,它显然可以给出负数。您可以在您的情节中看到它,在训练过程中,您的真实分布和虚假分布会改变边,直到它们收敛于零附近。因此,作为性能测量,您可以使用它来查看生成器与真实数据的距离以及它现在在哪一侧。
查看分布图:
P.S。这是交叉熵损失,而不是 Wasserstein。
如果您还没有阅读它,也许 this article 可以帮助您更多。然而,另一个问题是优化器如何将负损失最小化(至零)。
看来我无法对 Sergeiy Isakov 给出的答案发表评论,因为我没有足够的声誉。我想发表评论,因为我认为该信息不正确。
Wasserstein距离原则上不能为负,因为距离度量不能为负。 Wasserstein 距离的实际表达式(对偶形式)涉及所有 1-Lipschitz 函数的上确界(您可以在网上参考)。由于它是上确界,我们总是取给出最大值的那个 Lipschitz 函数来获得 Wasserstein 距离。然而,我们使用 WGAN 计算的 Wasserstein 距离只是一个估计值,并不是真正的 Wasserstein 距离。如果评论家的内部迭代次数很低,它可能没有足够的迭代次数来移动到正值。
思想实验:如果我们假设我们得到一个负的 Wasserstein 估计,我们总是可以否定 critic 函数以使估计为正。这意味着存在一个给出正值的 Lipschitz 函数大于给出负值的 Lipschitz 函数。所以 Wasserstein 估计不能为负,因为根据定义我们需要有所有 1-Lipschitz 函数的上确界。
我目前正在使用(大约)Wasserstein 损失在 keras 中训练 WGAN,如下所示:
def wasserstein_loss(y_true, y_pred):
return K.mean(y_true * y_pred)
然而,这个损失显然可以是负数,这让我很奇怪。
我对 WGAN 进行了 200 个 epoch 的训练,得到了下面的 critic Wasserstein 损失训练曲线。
以上损失由
计算d_loss_valid = critic.train_on_batch(real, np.ones((batch_size, 1)))
d_loss_fake = critic.train_on_batch(fake, -np.ones((batch_size, 1)))
d_loss, _ = 0.5*np.add(d_loss_valid, d_loss_fake)
生成的样本质量很好,所以我认为我正确地训练了 WGAN。但是,我仍然不明白为什么 Wasserstein 损失可能为负而模型仍然有效。根据 WGAN 原论文,Wasserstein loss 可以作为 GAN 的性能指标,那么我们应该如何解读呢?我是不是误会了什么?
Wasserstein 损失是地球运动距离的度量,它是两个概率分布之间的差异。在 tensorflow 中,它被实现为 d_loss = tf.reduce_mean(d_fake) - tf.reduce_mean(d_real)
如果 d_fake
在 d_real
分布的另一侧移动太远,它显然可以给出负数。您可以在您的情节中看到它,在训练过程中,您的真实分布和虚假分布会改变边,直到它们收敛于零附近。因此,作为性能测量,您可以使用它来查看生成器与真实数据的距离以及它现在在哪一侧。
查看分布图:
P.S。这是交叉熵损失,而不是 Wasserstein。 如果您还没有阅读它,也许 this article 可以帮助您更多。然而,另一个问题是优化器如何将负损失最小化(至零)。
看来我无法对 Sergeiy Isakov 给出的答案发表评论,因为我没有足够的声誉。我想发表评论,因为我认为该信息不正确。
Wasserstein距离原则上不能为负,因为距离度量不能为负。 Wasserstein 距离的实际表达式(对偶形式)涉及所有 1-Lipschitz 函数的上确界(您可以在网上参考)。由于它是上确界,我们总是取给出最大值的那个 Lipschitz 函数来获得 Wasserstein 距离。然而,我们使用 WGAN 计算的 Wasserstein 距离只是一个估计值,并不是真正的 Wasserstein 距离。如果评论家的内部迭代次数很低,它可能没有足够的迭代次数来移动到正值。
思想实验:如果我们假设我们得到一个负的 Wasserstein 估计,我们总是可以否定 critic 函数以使估计为正。这意味着存在一个给出正值的 Lipschitz 函数大于给出负值的 Lipschitz 函数。所以 Wasserstein 估计不能为负,因为根据定义我们需要有所有 1-Lipschitz 函数的上确界。