以下内容纯属经验之谈,无公式推断!部分内容源自其他博客或课程,并已标注来源。
问题篇[1]
1.模式崩溃
在某个模式(mode)下出现大量重复样本,如左图中,生成的样本分布靠得很近,较聚集,可视化如右图,表现为生成多个相同或相似度很高的样本,缺乏多样性。
2.模式丢失
顾名思义,某些模式(mode)没有,同样缺乏多样性,虽然生成的样本已经尽可能拟合真实分布,分布也不聚集,但是存在某些模式的丢失,例如下图中人物,除了肤色变化,人物没有任何变化。
设计篇
1.在上采样阶段,慎用transpose2d,推荐使用upsample + conv2d组合,如下图所以,利用transpose2d上采样得到的生成图像,存在“方形格子”,生成的图像不平滑。
(a)输入图像 (b)transpose2d上采样生成图像
2.一些博客提到输入网络前将图像缩放到(-1,1),最后一次添加Tanh()激活层将输出映射到(-1,1),在保存结果和可视化时需要(image+1)/2缩放到(0,1).【2】
3. 采样cycleGAN类似结构可以学到图像的解耦的表示,可用于表情编辑、图像风格迁移等(异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN[3])。
4.[4]中提到的(1)利用推土机距离替代JS散度;(2)TTUR:低速(小学习率)更新生成器,高速更新判别器;(3)梯度惩罚;(4)谱归一化;(5)单侧标签平滑等
训练篇
1.当生成器损失从很大的值迅速变为0,而判别器损失维持不变。
有可能时生成器生成能力较弱,因此一种可行的方法是增加生成器的层数来增加非线性。
2.某些文献采用生成器与判别器交叉训练的方法,即先训练判别器,再训练生成器,其目的是先训练判别器并更新其参数,先让其具有较好判别能力,而在训练生成器时因为判别器已具有一定判定能力,生成器的目的是尽可能骗过判别器,所以生成器会朝着生成更真实的图像前进;也可以采用先训练生成器,再训练判别器,但是此种训练方法不推荐;同时也可以采用先更新生成器或判别器多次,再更新另一个一次的方法。
3. 生成器损失、判别器损失,其中一个很大或者逐渐变大,另一个很小或者逐渐变小。
为什么GAN的Loss一直降不下去。GAN到底什么时候才算收敛?其实,作为一个训练良好的GAN,其Loss就是降不下去的。衡量GAN是否训练好了,只能由人肉眼去看生成的图片质量是否好。不过,对于没有一个很好的评价是否收敛指标的问题,也有许多学者做了一些研究,后文提及的WGAN就提出了一种新的Loss设计方式,较好的解决了难以判断收敛性的问题。下面我们分析一下GAN的Loss为什么降不下去? 生成器和判别器的目的相反,也就是说两个生成器网络和判别器网络互为对抗,此消彼长。不可能Loss一直降到一个收敛的状态。[5] 对于生成器,其Loss下降快,很有可能是判别器太弱,导致生成器很轻易的就"愚弄"了判别器。 对于判别器,其Loss下降快,意味着判别器很强,判别器很强则说明生成器生成的图像不够逼真,才使得判别器轻易判别,导致Loss下降很快。 也就是说,无论是判别器,还是生成器。loss的高低不能代表生成器的好坏。一个好的GAN网络,其GAN Loss往往是不断波动的。 ———————————————— 版权声明:本文为CSDN博主「alanjia163」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_35290785/article/details/90247938
参考
[1] 李宏毅GAN开放课程
[2]GAN训练心得
[3] 异父异母的三胞胎:CycleGAN, DiscoGAN, DualGAN
https://zhuanlan.zhihu.com/p/26332365
[4] GAN性能不稳?这九大技术可“镇住”四类缺陷
[5] https://blog.csdn.net/qq_35290785/article/details/90247938