为什么在对抗网络中使用二元交叉熵生成器

机器算法验证 神经网络 卷积神经网络 生成模型 发电机
2022-03-08 19:23:57

我正在尝试与 General Adversarial Networks 合作,我到处都能看到一些东西,但无法解释为什么......

GAN 通常由生成器(通常生成图像并连接到鉴别器)和鉴别器(负责确定生成的图像是否为假)构成。

我可以理解为什么鉴别器的损失函数应该是二元交叉熵(在两个类之间确定)但为什么生成器的损失也应该是二元交叉熵?

如果生成器应该生成图像,那么使用 MSE 或 MAE 损失不是更合适吗?当我们对生成器使用 BCE 以外的任何损失函数时,究竟会发生什么?

非常感谢...

3个回答

我在 reddit 上从用户ajmooch那里找到了一个非常好的答案,并决定将其发布在这里,以防有人对我有误解:

这里有几件事要记住。

首先,Generator 的 BCE 目标可以更准确地表述为“生成器输出的图像应该被 Discriminator 赋予高概率”。它不是您在二进制重建损失中看到的 BCE,它是 BCE(G(Z),X),其中 G(Z) 是生成的图像,X 是样本,它是 BCE(D(G(Z)) ,1) 其中 D(G(Z)) 是判别器分配给生成图像的概率。给定一个始终具有逼真输出的“完美”生成器,D(G(Z)) 值应始终接近 1。显然在实践中很难获得这种收敛(训练本质上是不稳定的),但那是目标。

第二个是在标准 GAN 算法中,潜在向量(生成器作为输入接收并必须转化为图像的“随机噪声”)是独立于训练数据进行采样的。如果你在 GAN 的输出和单个图像之间使用 MSE,你可能会得到某种结果,但你实际上是在说“给定这个(随机)Z,产生这个特定的 X”,然后你d 隐含地强制生成器学习图像的无意义嵌入。如果您将 Z 向量视为图像的高级描述,这就像向它展示三遍狗并要求它在给定狗的三个不同(且不相关)描述的情况下生成同一只狗。将此与具有显式推理机制的 VAE 进行比较(VAE 的编码器网络在给定图像样本的情况下推断 Z 值),然后尝试使用这些推断的 Z 重建给定图像。GAN 不会尝试重建图像,因此在其普通形式中,将其输出与使用 MSE 或 MAE 的一组样本进行比较是没有意义的。

最近在将相似性度量纳入 GAN 训练方面做了一些工作——这篇 openAI 论文在鉴别器的最终 FC 层中添加了 G(Z) 和 X 之间的 MSE 目标(a la Discriminative Regularization),这似乎工作得很好用于半监督学习(基于他们非常好的 SVHN 结果),但并没有真正提高样本质量。

您还可以将 VAE 和 GAN 放在一起(就像我所做的以及其他几个在我之前所做的那样)并使用 VAE 的推理机制来为 GAN 生成器提供指导,这样就可以进行一些像素级的比较用于重建。

如果我理解正确,这两个网络(功能)是由相同的损失训练的

V(D,G)=Epdata[log(D(x))]+Epz[log(1D(G(z)))]
这是鉴别器输出的二进制交叉熵D. 生成器试图最小化它,鉴别器试图最大化它。

如果我们只考虑生成器G,它不再是二元交叉熵,因为D现在已经成为损失的一部分。

与需要最小化损失函数的常见分类问题不同,GAN 是两个玩家之间的博弈,即鉴别器 (D) 和生成器 (G)。既然“只是一场比赛”,双方球员就应该为同一个球而战!这就是为什么 D 的输出用于优化 D 和 G 的原因。与其使用术语“损失”,我更愿意使用“目标”。

请注意,对鉴别器和生成器使用带 Logits 的交叉熵 (CEWL) 的 GAN 的通用张量流实现并不完全符合https://arxiv.org/abs/1406.2661中的 Ian 方程。然而,使用 CEWL 似乎比应用 Ian 的方程提供更好的结果!

以下是 CEWL 实施的基本方程式:

Do=12mi=1m[Dl(G(z(i)))+log(1+eDl(G(z(i))))+log(1+eDl(x(i)))]

Go=1mi=1m[log(1+eDl(G(z(i))))]



上述两个功能都将被最小化。D 的目标函数中的第二项具有相互矛盾的影响,但它确实有效!