GAN原理及推导

2019-04-13  本文已影响0人  ZAK_ML

四.训练


5.存在的问题

但是上面 G 的 loss function 还是有一点小问题,下图是两个函数的图像:

log(1-D(x)) 是我们计算时 G 的 loss function,但是我们发现,在 D(x) 接近于 0 的时候,这个函数十分平滑,梯度非常的小。这就会导致,在训练的初期,G 想要骗过 D,变化十分的缓慢,而上面的函数,趋势和下面的是一样的,都是递减的。但是它的优势是在 D(x) 接近 0 的时候,梯度很大,有利于训练,在 D(x) 越来越大之后,梯度减小,这也很符合实际,在初期应该训练速度更快,到后期速度减慢。

所以我们把 G 的 loss function 修改为

这样可以提高训练的速度。

还有一个问题,在其他 paper 中提出,就是经过实验发现,经过许多次训练,loss 一直都是平的,也就是

JS divergence 一直都是 log2,PG 和 Pdata 完全没有交集,但是实际上两个分布是有交集的,造成这个的原因是因为,我们无法真正计算期望和积分,只能使用 sample 的方法,如果训练的过拟合了,D 还是能够完全把两部分的点分开,如下图:

对于这个问题,我们是否应该让 D 变得弱一点,减弱它的分类能力,但是从理论上讲,为了让它能够有效的区分真假图片,我们又希望它能够 powerful,所以这里就产生了矛盾。

还有可能的原因是,虽然两个分布都是高维的,但是两个分布都十分的窄,可能交集相当小,这样也会导致 JS divergence 算出来 =log2,约等于没有交集。

解决的一些方法,有添加噪声,让两个分布变得更宽,可能可以增大它们的交集,这样 JS divergence 就可以计算,但是随着时间变化,噪声需要逐渐变小。

还有一个问题叫 Mode Collapse,如下图:

这个图的意思是,data 的分布是一个双峰的,但是学习到的生成分布却只有单峰,我们可以看到模型学到的数据,但是却不知道它没有学到的分布。

造成这个情况的原因是,KL divergence 里的两个分布写反了

这个图很清楚的显示了,如果是第一个 KL divergence 的写法,为了防止出现无穷大,所以有 Pdata 出现的地方都必须要有 PG 覆盖,就不会出现 Mode Collapse。

上一篇下一篇

猜你喜欢

热点阅读