众所周知,GAN异常强大,同时也非常难以训练。主要有以下亮点原因:
- 模型坍塌(mode collapse)
- 难以收敛和训练不稳定(convergence and instability)
GAN网络的一般表达式可以表示为:
利用minmax获得公式1
给定G,求D的最优化2
针对D进行求导:
获取最优解:
最优解结果:
KL和JS散度表达式:
GAN表达式:
增加一项,表示生成网络G的损失函数:
简化:
结合公式(6)和公式(8)可以得出:
公式(12)中的KL散度使得两个分布尽可能的小,而JS的负号使得两个分布近可能的大。
两种情况:
第一种情况,生成了不真实的样本,惩罚很大;第二种情况,未能产生真实的样本,惩罚很小。第一种生成的样本不准确,第二种生成的样本不够多样。基于这个原理,G 倾向于生成重复但是安全的样本,而不愿意冒险生成不同但不安全的样本,这会导致模式坍塌(mode collapse)问题。
当然很有可能出现两个分布不相关的情况3,这种情况就会导致称为一个常数,也就出现了梯度消失的情况。 所以判别器训练得太好,生成器梯度消失,生成器loss降不下去;判别器训练得不好,生成器梯度不准,四处乱跑。只有判别器训练得不好不坏才行,但是这个火候又很难把握。
对于另外一种G网络的表现形式,可以总结为:D表现越好,G的梯度消失越严重。