【问题标题】:Loss Function of generator in GansGans中生成器的损失函数
【发布时间】:2018-12-20 12:34:34
【问题描述】:

我已经深入研究了 gans,并且也在 pytorch 中实现了它,现在我正在研究 gans 背后的核心统计数据,当时我正在查看那个网站 Mathematics behing Gans 它说

“Loss(G) = - Loss(D),请注意,我们将生成器成本定义为判别器成本的负值。这是因为我们没有明确的方法来评估生成器的成本。”

但是在实现 gan 时,我们将生成器的损失定义为:

Bintropy 生成器生成的图像的判别器输出与原始论文中的真实标签和以下代码(由我实现和测试)之间的交叉熵损失

    # train generator
    z_ = to.randn(minibatch,100 ).view(-1, 100, 1, 1)
    z_ = Variable(z_.cuda())
    gen_images = generator(z_)

    D_fake_decisions = discriminator(gen_images).squeeze()
    G_loss = criterion(D_fake_decisions,real_labels)

    discriminator.zero_grad()
    generator.zero_grad()
    G_loss.backward()
    opt_Gen.step()

请解释一下两者的区别,以及正确的那个

代码链接:https://github.com/mabdullahrafique/Gan_with_Pytorch/blob/master/DCGan_mnist.ipynb

谢谢

【问题讨论】:

  • Binary Cross Entropy 不是 Generator 的损失,而是 Discriminator 的损失。我在回答中写了一点解释。

标签: machine-learning computer-vision artificial-intelligence conv-neural-network generative-adversarial-network


【解决方案1】:

Discriminator 的工作是执行 Binary Classification 以检测 Real 和 Fake,因此它的损失函数是 Binary Cross Entropy。

Generator 所做的是密度估计,从噪声到真实数据,然后将其输入 Discriminator 以欺骗它。

设计中遵循的方法是将其建模为 MinMax 游戏。现在让我们看看成本函数:

有人这样解释:

J(D) 中的第一项表示将实际数据馈送到判别器,判别器希望最大化预测一个的对数概率,表明数据是真实的。第二项表示 G 生成的样本。在这里,鉴别器希望最大化预测为零的对数概率,表明数据是假的。另一方面,生成器试图最小化鉴别器正确的对数概率。这个问题的解是博弈的一个平衡点,也就是判别器损失的鞍点。

由于判别器试图最大化生成器的样本为零的概率,生成器的工作变成最大化一个。这相当于将生成器的成本函数设为负交叉熵,其中 J(D) 中的第一项现在将保持不变。

来源:https://towardsdatascience.com/generative-adversarial-networks-history-and-overview-7effbb713545

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2017-07-30
    • 1970-01-01
    • 2018-07-26
    • 2019-12-22
    • 2018-07-13
    • 2018-03-01
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多