首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >沃瑟斯坦损失可以是负的吗?

沃瑟斯坦损失可以是负的吗?
EN

Stack Overflow用户
提问于 2019-07-19 09:58:28
回答 2查看 5.4K关注 0票数 8

我目前正在使用(大约) Wasserstein损失在keras中训练WGAN,如下所示:

代码语言:javascript
运行
复制
def wasserstein_loss(y_true, y_pred):
    return K.mean(y_true * y_pred)

然而,这种损失显然是负面的,这对我来说很奇怪。

我对WGAN进行了200个时期的训练,得到了下面的Wasserstein损失训练曲线。

上述损失按下式计算

代码语言:javascript
运行
复制
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损失可以用作GAN的性能指标,那么我们应该如何解释它?我是不是误解了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-12 01:38:54

Wasserstein损失是地球运动距离的度量,这是两个概率分布之间的差异。在tensorflow中,它被实现为d_loss = tf.reduce_mean(d_fake) - tf.reduce_mean(d_real),如果d_faked_real分布的另一侧移动得太远,显然会给出一个负数。你可以在你的图上看到,在训练过程中,你的真实分布和假分布会改变方向,直到它们在零附近收敛。因此,作为一种性能测量,您可以使用它来查看生成器与实际数据的距离以及它现在所处的位置。

请参阅分布图:

另外,这是交叉损失,不是沃瑟斯坦。如果你还没有读过,也许this article能给你更多帮助。然而,另一个问题是优化器如何将负损失最小化(为零)。

票数 6
EN

Stack Overflow用户

发布于 2021-02-24 05:03:49

看起来我不能对谢尔盖·伊萨科夫的回答发表评论,因为我没有足够的声誉。我想发表评论,因为我认为这些信息是不正确的。

原则上,Wasserstein距离不能为负,因为距离度量不能为负。Wasserstein距离的实际表达式(对偶形式)涉及所有1-Lipschitz函数的上确界(您可以在web上参考它)。因为它是上确界,所以我们总是采用给出最大值的Lipschitz函数来获得Wasserstein距离。然而,我们使用WGAN计算的Wasserstein只是一个估计值,而不是真正的Wasserstein距离。如果critic的内部迭代次数很低,它可能没有足够的迭代次数来移动到正值。

思维实验:如果我们假设我们得到一个负的Wasserstein估计,我们总是可以否定批评函数,使估计为正。这意味着存在一个给出正值的Lipschitz函数,它比给出负值的Lipschitz函数大。因此,Wasserstein估计不能是负的,因为根据定义,我们需要所有1-Lipschitz函数的上确界。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57104606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档