DualGan

文章的思想来源

这篇文章的灵感来源是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散度不是一个对称的衡量,KL(P_g || P_r)KL(P_r || P_g)是有差别的。

  换言之,KL(P_g || P_r)对于上面两种错误的惩罚是不一样的,第一种错误对应的是“生成器没能生成真实的样本”,惩罚微小;第二种错误对应的是“生成器生成了不真实的样本” ,惩罚巨大。第一种错误对应的是缺乏多样性,第二种错误对应的是缺乏准确性。这一放一打之下,生成器宁可多生成一些重复但是很“安全”的样本,也不愿意去生成多样性的样本,因为那样一不小心就会产生第二种错误,得不偿失。这种现象就是大家常说的collapse mode。

 

WGAN进行优化后G和D的损失函数:

 

DualGAN的思想

判别器损失:

Z,Z'为噪声。形式与WGAN一致。

生成器损失:

网络结构

 生成器使用U-Net。

判别器使用patchGAN

 

 拓展:防止判别器过于自信

 (1)单边标签平滑

  D的优化目标从1变成0.9

(2)样本噪声

  对输入D的样本添加噪声来挑战D。使真假样本的流形更加接近,同时防止D轻易找到完全分离真假样本的判别器边界。

 

posted on 2017-10-23 14:22  J_K_Guo  阅读(1717)  评论(0编辑  收藏  举报