Least Squares Generative Adversarial Networks(LSGAN)

这个模型,我是在李宏毅老师的课程上看到的。 之所以单把这个模型拿出来写一个博客是因为,我觉得李宏毅老师讲的不对啊。首先,声明李宏毅老师是我非常钦佩和尊敬的老师,看我的博客就可以知道,很多博客都是关于他的视频课程的读后感,可以说李宏毅老师是我的恩师啊。
建议看我的博客之间大家还是看看李宏毅老师的视频课程GAN LECTURE6
首先,按着论文的思路来讲以下这个模型的思想,同时对比李宏毅老师的思路。

论文中,作者发现传统的GAN训练到一定的程度以后,虽然模型已经收敛了吗,但是生成的图像的质量依然很差。所以作者拿数据出来,做了可视化分析,如下图所示:

Least Squares Generative Adversarial Networks(LSGAN)_第1张图片

简单说明一下图,这个蓝线下方区域,是判别器输出为正标签的区域。
如果你仔细看一下图的,你就会产生这样的疑问。为什么生成数据标分会那么高(离 boundary很远,真实数据反而离 boundary 很近)? 其实,这个图片表示的是GAN 训练到最理想情况。
1.GAN训练到理想情况后,蓝色的线应该是穿过真实数据的分布。(直觉上的理解就是,分类器在某些情况下没办法分别,哪些是真实数据,哪些是生成数据。) 。
2. GAN 会把一些生成数据分数打的很高。而这部分数据,从图中可以看出跟真实数据分布差异比较大,生成的图像质量往往也会不好。

理解了这个图片之后,我们就跟着作者的思路走。
作者看到生成数据质量差是因为离 boundary 比较远,那我就应该让他们离 boundary 更近一些就OK 。所以作者就发明了 Least Squares 方法,并顺带说一句 传统的GAN 会有这样的原因是因为 sigmoid + cross entropy 的原因。这样的说法我还是可以认可的,但是到了李宏毅老师那里,说法就变成了是因为sigmoid 函数饱和区域梯度为接近零,没办法有效更新参数,这我就不能理解了。因为sigmoid + cross entropy 就不会出现 sigmoid 饱和区域梯度不能传递的问题了啊。
所以以下,我就给出我的观点,为什么传统的GAN 会出现以上地情况。

首先我们要了解一个概念,在我们深度学习中经常用的 cross entropy loss 这种训练方法,他本质是maximum likelihood ,而我在博客 GAN系列原理篇 中讲过,用maximun likelihood 计算出来的那个最大值 本质是求出了两种分布的 JS divergence 。我们的判别器 学习过程其实就是相当于去学习 生成数据和生成数据之间的 JS divergence , 判别其不断更新参数使得 V(G,D)函数近似变成 :
-2log2 + 2 * JS Divergence。 而这里注意,我们地JS Divergence 他是有上限的,他的最大值是log2 。那log2是什么情况呢? 就是两个数据分布完全不同的时候。正是JS Divergence 这个问题,所以在训练 生成器的时候会生成问题。如果,你现在是跟着我的思路,应该有一个疑问,为什么是在训练生成器的时候发生问题,在训练判别器的时候这种KL 散度不是用的好好的吗? 其实这个问题在 李宏毅老师视频课下面评论有同学问了,李宏毅老师也给出了回答,但是这个回答我并不同意,他们的对话是这样的
Least Squares Generative Adversarial Networks(LSGAN)_第2张图片

其实在训练判别器的时候,我们也是相当于用 KL 散度,为什么没有出现问题啊? 并不是李宏毅老师说的那样,分类样本就那几个,所以他们的样本空间重合。总归来说,我们的JS divergence 他的问题,麻烦就是在因为他有一个上限值,这个值是log2。出现这个上线值的情况是在两个数据分布完全不相同的情况,而我们在训练判别器的时候,即使你的JS divergence 是log2 ,我们的判别器仍然是work的,因为这个时候两个数据分布完全不一样(想象以下聚类图,完全是两个簇) ,我们的判别器的目的就是分类,所以他不但能work,而切work的相当好。
但是训练生成器的时候,就不是这么回事了,看下图:
Least Squares Generative Adversarial Networks(LSGAN)_第3张图片

我们的生成器训练要比分类器训练,要求苛刻的多。看上面两个图,PG0 和PG1 分别代表两个次生成的数据,两次生成的数据 和真实数据都是完全没有重合的,这种情况下,根据上面所说 他们的JS Divergence 是log2,我们自己看的话知道PG1的数据离Pdata更近一些,所以PG1数据是更好的,但是神经网络是不知道的(都是log2的距离)。所以就会造成神经网络无法训练的问题。

这个时候,有的人就会有疑问(我当时就是有这个疑问的哈哈),我们训练生成器可以让生成器变的更好啊,他的性能是一直提高的啊。在这里我解释一下,上面的图,包括论文里面截取的图都是 假设在什么情况下讨论的呢? 都是在GAN 训练到收敛情况下的情况 也就是你的生成器生成的数据 判别器都是非常认同的,认为你生成的数据都是真实数据,但是这些生成的图像我们人眼看的话,质量还是不过关。

以上就是关于纠正李宏毅老师说法的观点,不一定对,但是经过上面的解释,我是可以说服我自己的。

我们再回归到论文,作者的Motivation 知道了,接下来看看作者的Method.
Least Squares Generative Adversarial Networks(LSGAN)_第4张图片

这个是作者的主要方法。作者的意思是,既然我们生成的数据总是离boundary很远,我们就通过这种least square的方法,对那些较远的数据给予penalty,这样能够让生成的数据再 boundary附近,也就比较接近真实的数据分布了。

类似与传统的GAN 作者也证明了他们这种做法其实是相当于优化 Pearson X方 divergence ,前提条件是b-c = 1 and b-a =2。 这部分就不证明了。

以上就是LSGAN的模型由来以及解释。

你可能感兴趣的:(强化学习)