GAN训练中遇到的mode collapse(模式崩塌)

1.梯度/loss爆炸(NaN,Inf)

这两天一直在训练自己的GAN模型,训练过程中鉴别器极其不稳定,训练的几个epoch之后经常出现NAN,在加入WGAN中的梯度惩罚和鉴别器的参数裁剪之后,模型似乎变得可以训练了。

解决方案:

1.使用WGAN中的loss代替原始GAN中的损失函数,去掉原始GAN损失函数中的log

2.适当地进行梯度惩罚

3.使用hinge loss

2.mode collapse

在模型变得可以训练之后,生成器和鉴别器的loss如图所示:

                                                                    GAN训练中遇到的mode collapse(模式崩塌)_第1张图片

鉴别器和生成器的对抗损失呈现相反的趋势,并且两者一直都处于比较稳定的状态,于是我中断了训练。出现这种问题的可能原因是模型在训练过程中出现了模式崩塌,它发生的原因之一是G只要学会欺骗D就可以了,所以G其实可以只生成小量真实数据即可,极端情况下甚至可以只生成一个真实数据就可以欺骗D了。出现这种情况的可能原因是生成器和鉴别器的模型复杂度(或者参数)不在一个层级,鉴别器过于强势,我发现我的模型中生成器的参数大概为四千万,鉴别器的参数来大概为七千五百万,几乎相差了两倍。

解决方案:

1.权衡好生成器和鉴别器的模型复杂度,复杂度不在一个层面的话,模型几乎无法学习到任何东西

2.可以尝试每更新几次生成器再更新一次鉴别器

3.每迭代几个epoch后就输出生成的额图片

4.注意观察训练过程中的loss曲线

 

reference:

1.https://www.zhihu.com/question/416797108/answer/1472929170

2.https://zhuanlan.zhihu.com/p/25071913

 

你可能感兴趣的:(深度学习与pytorch,深度学习,神经网络)