GAN出现的问题
前面写过一篇文章说GAN的基本原理和公式的解析:GAN原理解析,公式推导与python实现,我们说到GAN的发明人提出的损失函数:
既然这已经是最优解了,我们一般会认为在最优解的时候它的梯度为零,因此对
化成这样的形式,主要是为了和待会的JS散度对比一下。
我们搞出公式1这样的损失函数,目的就是为了衡量两个分布之间的相似度,而衡量两个分布之间的相似度主要有两个指标,KL散度和JS散度,他们的定义如下:
把这两个公式套进公式5,可以得到:
即KL散度的
从另一个角度看,如果两个分布有相似的部分的话,其中其中一个就会向另外一个慢慢靠拢。但如果两个分布没有斑点的重合,又会是怎么样的呢?
-
P1(x)=0,P2(x)=0 -
P1(x)≠0,P2(x)≠0
如果是这两种情况的话,代入公式计算,第一种情况对JS散度的贡献为0,第二种情况如果重叠部分可忽略不计的话,对JS散度的贡献依然为0
-
P1(x)=0,P2(x)≠0 -
P1(x)≠0,P2(x)=0
如果是上述情况,计算一下第三种情况:
列了这么多公式,总结一下,其实就是想表达这样一个观点:
- 判别器训练的太好,生成器梯度消失,生成器的loss降不下去
- 判别器训练的不好,生成器梯度不准
- 只有判别器训练的不好不坏才行,但这个火候很难把握
所以,GAN很难训练。哈哈哈
W-GAN
Wasserstein GAN的原始论文。
W-GAN的优点
- 彻底解决了GAN训练不稳定的问题,不在需要小心平衡生成器和判别器的训练程度
- 基本解决了collapse mode的问题,基本保证了样本的多样性
- 训练的过程中与友了一个像交叉熵,准确率这样的数值来衡量训练的进程,这个数值越小代表GAN训练得越好,表示生成的图像质量越高。
- 以上一切改变都不需要精心设计的网络结构,只要最简单的多层全连接网络就可以
看到这里你是不是很兴奋呢?