1.KL散度
KL散度又称为相对熵,信息散度,信息增益。KL散度是是两个概率分布P和Q 差别的非对称性的度量。 KL散度是用来 度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。其定义如下:
有时会将KL散度称为KL距离,但它并不满足距离的性质:
- KL散度不是对称的;
- KL散度不满足三角不等式。
2.JS散度
JS散度度量了两个概率分布的相似度,基于KL散度的变体,解决了KL散度非对称的问题。一般地,JS散度是对称的,其取值是0到1之间。定义如下:
KL散度和JS散度度量的时候有一个问题:
如果两个分配P,Q离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为0。梯度消失了。
- Wasserstein距离(EM距离):解决JS和KL距离的缺点
Wasserstein距离度量两个概率分布之间的距离,定义如下:
- WGAN
WGAN成功的做到了以下几点:、
- 彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度
- 基本解决了collapse mode的问题,确保了生成样本的多样性
- 训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,这个数值越
小代表GAN训练得越好,代表生成器产生的图像质量越高(如题图所示)- 以上一切好处不需要精心设计的网络架构,最简单的多层全连接网络就可以做到
相比原算法,GAN改变了以下几点:
- 判别器最后一层去掉sigmoid
- 生成器和判别器的loss不取log
- 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
- 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD
训练技巧:D和G交替训练,训练多次D再训练一次G
WGAN的损失函数,使用EM距离:
- 生成器:
- 判别器:
D和G的损失其实都在使用
WGAN代码
https://github.com/HCMY/DeepLearningPractice/blob/master/GAN/wgan.py
- WGAN公式推导