函数详解:(文末有原理推导,不想看可直接跳过)
GAN的原始损失函数,咋一看是非常难以理解的,但仔细理解后就会发现其简洁性和丰富的含义。
损失函数定义:

一切损失计算都是在D(判别器)输出处产生的,而D的输出一般是fake/true的判断,所以整体上采用的是二进制交叉熵函数。
左边包含两部分minG和maxD。
首先看一下maxD部分,因为训练一般是先保持G(生成器)不变训练D的。D的训练目标是正确区分fake/true,如果我们以1/0代表true/fake,则对第一项E因为输入采样自真实数据所以我们期望D(x)趋近于1,也就是第一项更大。同理第二项E输入采样自G生成数据,所以我们期望D(G(z))趋近于0更好,也就是说第二项又是更大。所以是这一部分是期望训练使得整体更大了,也就是maxD的含义了。
第二部分保持D不变,训练G,这个时候只有第二项E有用了,关键来了,因为我们要迷惑D,所以这时将label设置为1(我们知道是fake,所以才叫迷惑),希望D(G(z))输出接近于1更好,也就是这一项越小越好,这就是minG。当然判别器哪有这么好糊弄,所以这个时候判别器就会产生比较大的误差,误差会更新G,那么G就会变得更好了,这次没有骗过你,只能下次更努力了。
实现:训练的时候需要将D的损失函数设为上式的相反数,再进行损失函数的最小化即可。
转载:https://www.cnblogs.com/walter-xh/p/10051634.html
公式推导:
在原始的GAN中,提出的loss是:
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/9f5980422cfa250015f0c29c5e310cbf.png)
当G固定且运算可逆时(实际上这一点一般不成立,但不影响了解GAN的思想):
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/e781a57816c2fe314f164d144da8b90e.png)
代入loss公式,进而有:
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/d50ee1068556324c6da1f1e458abb969.png)
对于积分区间内的每一个x,设被积函数为f 为:
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/96a302c9ceccf0b381a6cbe827909b5a.png)
注意这里x是固定的,变量是D。对f求导,得到当

时,f存在最大值。
由于被积函数的最大值对于任意x都成立,所以当
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/998ac2625b7035455c9fcb5863d39479.png)
时, V(D, G)有最大值。
代入loss公式,有:

可见,GAN的loss实际上就是JS散度(JS散度可自行百度)。
本文详细解读了GAN(生成对抗网络)的原始损失函数,通过二进制交叉熵形式揭示其训练策略,包括D(判别器)的maxD和G(生成器)的minG。讲解了如何通过调整标签迷惑判别器来优化模型,并最终推导出与JS散度的关系。
52

被折叠的 条评论
为什么被折叠?



