文章的思想来源
这篇文章的灵感来源是Xia et al 提出的一篇做机器翻译的文章NIP Dual【2】。这篇文章的一个例子很好的解释了对偶的思想。首先假设我们有两个人A和B,A会英文不会法语,B会法语不会英文。A要和B进行交流,A写了一段话,通过翻译器GA翻译成法语,但A看不懂法语,只能将翻译的结果直接发给B;B收到这段话之后,用自己的理解整理了一下,通过翻译器GB翻译成英文直接发给A;A收到之后,要检查B是否真正理解自己说的话。如此往复几次,A和B都能确认对方理解了自己。在这个例子中,翻译器A和B分别是两个生成器,A和B分别担任了判别器的角色。
原始GAN存在的问题
在wgan这篇文章中系统的阐述了原始GAN存在的一些问题。
(1)当我们通过最小化 来训练G时会出现难训练、无法优化G的问题
由于实际上Pg与Pdata很难有不可忽略的重叠,当D太强时,我们发现JS散度就固定是常数log2,C(G)就为一个固定值,所以导致G梯度消失。当D太弱时,会导致G梯度不准,四处乱跑。所以G和D必须同步得很好才行。
(2)原始GAN提出了优化方案:通过最小化来训练G。但会出现梯度不稳定、模型崩溃的问题
在原始GAN的距离度量 方式下,G的loss可以被化简成一下形式:
从上面这个式子,我们可以看到在最优D时,我们想要最小化生成器loss就既要减小KL散度又要同时增大JS散度,这就产生了矛盾导致梯度不稳定。
第二,即便是前面那个正常的KL散度项也有毛病。因为KL散度不是一个对称的衡量,与是有差别的。
换言之,对于上面两种错误的惩罚是不一样的,第一种错误对应的是“生成器没能生成真实的样本”,惩罚微小;第二种错误对应的是“生成器生成了不真实的样本” ,惩罚巨大。第一种错误对应的是缺乏多样性,第二种错误对应的是缺乏准确性。这一放一打之下,生成器宁可多生成一些重复但是很“安全”的样本,也不愿意去生成多样性的样本,因为那样一不小心就会产生第二种错误,得不偿失。这种现象就是大家常说的collapse mode。
WGAN进行优化后G和D的损失函数:
DualGAN的思想
判别器损失:
Z,Z'为噪声。形式与WGAN一致。
生成器损失:
网络结构
生成器使用U-Net。
判别器使用patchGAN
拓展:防止判别器过于自信
(1)单边标签平滑
D的优化目标从1变成0.9
(2)样本噪声
对输入D的样本添加噪声来挑战D。使真假样本的流形更加接近,同时防止D轻易找到完全分离真假样本的判别器边界。