了解GAN损失函数


17

我正在努力理解GAN损失功能,这在理解生成对抗网络(由Daniel Seita撰写的博客文章)中提供。

在标准的交叉熵损失中,我们有一个通过S型函数进行的输出以及所得的二进制分类。

西埃塔州

因此,对于[每个]数据点x1个及其标签,我们得到以下损失函数...

H((x1,y1),D)=y1logD(x1)(1y1)log(1D(x1)

这只是期望的对数,这是有道理的,但是在GAN损失函数中,我们如何在同一迭代中处理来自真实分布的数据和来自生成模型的数据呢?

Answers:


6

这个问题的重点

“如何……我们如何在同一迭代中处理来自真实分布的数据和来自生成模型的数据?

分析基础出版物

在参考页`` 理解生成对抗网络(2017)''中,博士候选人Daniel Sieta正确引用了生成对抗网络,Goodfellow,Pouget-Abadie,Mirza,Xu,Warde-Farley,Ozair,Courville和Bengio,2014年6月。它抽象地指出:“我们提出了一个新的框架,用于通过对抗过程来估计生成模型,在此过程中,我们同时训练了两个模型……”该原始论文定义了两个定义为MLP(多层感知器)的模型。

  • 生成模型,G
  • 判别模型,D

以一种方式控制这两种模型,其中一种向另一种提供负面反馈,因此称为对抗性。

  • 对G进行训练以捕获足以欺骗D的一组示例的数据分布。
  • 训练D发现其输入是G的模拟还是GAN系统的示例集。

(GAN系统的示例集有时被称为真实样本,但它们可能不比生成的样本更真实。两者都是计算机中的数值数组,一组具有内部原点,而另一组具有外部原点。外部环境是否来自指向某个物理场景的摄像机与GAN操作无关。)

概率上,愚弄D是使D产生与正确分类一样多的假阳性和假阴性的概率最大化的同义词,每种错误校正的正确率均为50%。在信息科学中,这意味着随着t接近无穷大,信息D的极限G接近0。从D的角度来看,这是最大化G的熵的过程,因此,术语交叉熵。

如何实现融合

由于问题中的损失函数是Sieta在2017年的著作中转载的,因此损失函数是D,旨在将两个分布之间的交叉熵(或相关性)最小化,以应用于给定训练状态的所有点集。

HX1个ÿ1个d=1个dX1个

G有一个单独的损失函数,旨在最大程度地提高交叉熵。请注意,系统中有两个级别的训练粒度。

  • 两人游戏中的游戏动作
  • 训练样本

这些产生带有外部迭代的嵌套迭代,如下所示。

  • 使用G的损失函数进行G的训练。
  • 模拟输入模式是从G的当前训练状态生成的。
  • 使用D的损失函数进行D的训练。
  • 如果交叉熵尚未充分最大化,请重复进行操作,D仍然可以区分。

当D最终输掉比赛时,我们已经达到了目标。

  • G恢复了训练数据的分发
  • D已减少为无效(“到处都是1/2概率”)

为什么需要同时培训

如果不以前后方式训练这两个模型来模拟并发,则在2014年论文所主张的独特解决方案上,对抗面(外部迭代)的收敛将不会发生。

更多信息

除了这个问题,Sieta论文的下一个有趣的问题是,“发电机损耗函数的设计不良”会导致梯度值不足以引导下降并产生有时称为饱和的现象。饱和只是反馈信号的减少,该反馈信号会导致反向传播中的下降引导至浮点舍入产生的混沌噪声。该术语来自信号理论。

我建议研究Goodfellow 等人(经验丰富的研究人员)在2014年发表的论文,以了解GAN技术,而不是2017年的页面。


3

让我们从头开始。GAN是可以学习创建与我们提供的数据相似的数据的模型。

当训练GAN以外的生成模型时,最容易想到的损失函数可能是均方误差(MSE)。

请允许我给你一个例子(Trickot L 2017):

现在假设您想养猫;您可以在照片中提供特定猫的模型示例。您选择的损失函数意味着您的模型必须精确地复制每只猫,以避免受到惩罚。

但这不一定是我们想要的!您只希望模型能够生成猫,只要它是合理的猫,任何猫都可以。因此,您需要更改损失函数。

但是,哪个功能可以忽略具体像素并专注于检测照片中的猫?

那是一个神经网络。这就是GAN中鉴别器的作用。区分者的工作是评估图像的可信度。

您引用的论文《理解生成对抗网络》(Daniel S 2017)列出了两个主要见解。

主要见解1:鉴别器的损失函数是交叉熵损失函数。

主要见解2:了解梯度饱和度对训练有无影响。当梯度太小(即零)而无法执行任何学习时,梯度饱和是一个普遍的问题。

要回答您的问题,我们需要进一步阐述第二个主要见解。

在GAN的情况下,由于发电机损失函数的设计不良,可能会发生梯度饱和,因此,这种“主要见解” ...是基于了解发电机不同损失函数之间的权衡取舍的。

本文中实现的设计通过具有非常特殊的功能(区分两个类别)解决了损耗函数问题。最好的方法是使用交叉熵(见解1)。正如博客文章所述:

交叉熵是一个很大的损失函数,因为它的设计部分是为了加速学习并仅在分类器正确之前才避免梯度饱和。

正如博客文章的评论所阐明的:

[在交叉熵函数中]的期望来自总和。如果查看离散随机变量的期望定义,您会发现需要对随机变量的不同可能值求和,并用它们的概率加权。在这里,每个概率仅为1/2,我们可以将其视为来自生成器或鉴别器。


这个问题没有问什么最容易用作ANN的损失函数。@tryingtolearn尚不清楚数学的具体内容,并且在不提供任何说明的情况下引用研究生的话也无法弄清楚。
FauChristian

1

您可以将z输入和x输入的组合视为单个样本,并评估鉴别器对每个输入进行分类的性能。

这就是为什么后来岗位上分离出单yE(p~data)E(z)-基本上,你有不同的预期(y为每个鉴别输入S),你需要在同一时间同时测量,以评估鉴别的效果如何。

这就是为什么损失函数被认为是真实输入的正分类和负输入的负分类的组合。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.