【深度视觉】第十五章:生成网络3——LSGAN、WGAN

前面第十四章,我们详细讲了GAN的损失函数和训练方法,并且给出了GAN和DCGAN的两个训练流程。其中GAN我们就没有训练出来!当时也从代码的角度剖析了为什么没训练出来,当时总结的教训是:架构弱+弱导航(目标函数),一定不行。所以后面我们找个强架构DCGAN,还是搭配着个弱导航又训练了一轮,最后结果还算差强人意吧。    

如果我要是拿一个复杂的训练集,而不是手写数字这样的简单数据集,其实DCGAN也是难以训练的,估计也是会重蹈GAN的覆辙。所以针对GAN的问题,后人进行了非常多的探索,主要就是从目标函数入手,希望寻找一个更好更强的导航,于是LSGAN、WGAN诞生了。所以在讲LSGAN、WGAN这些架构前,我们从数学角度再分析一遍:       

1、GAN原理

这就是GAN的最基本的思想,就是一种博弈的思维。

2、GAN的目标函数
要实现GAN的对抗思想,用数学语言来描述,就是一个最小-最大化的问题:

3、GAN的训练过程
要先最大化再最小化目标函数,那在网络训练过程中就要采取交替训练的策略来实现:

可见在GAN的训练过程中是分步训练的,先训练判别器,再训练生成器,然后再训练判别器,再训练生成器,如此反复多轮。。。。

在训练判别器时,目标函数就是判别器对真样本和假样本判别损失,就是判别器把真样本判为假,把假样本判为真的损失。其实就是一个二分类,真样本的标签是1,假样本的标签是0,就是一个二分类的交叉熵损失。

在训练生成器时,目标函数就是上图的B,但是从上图右下角的小图上看,B是绿色的线:当损失很小的时候,就是越接近0的地方,B的斜率却最大的;当损失较大的时候,比如越接近1的地方,B的斜率却较小,因此此时的B更平缓嘛。 这会造成了一个什么麻烦呢?就是当网络训练得很好的时候,也就是损失很小的时候,损失函数的梯度却非常大,导致网络迭代出现大起大落得波动;当网络还没有充分训练的时候,损失函数的梯度却非常小,导致网络参数迟迟不能快速迭代,老是小步慢移,训练效率低下。我们都知道在训练初期应该大步迭代,越往后越要小步慢走,而B却正好相反。 所以我们把B给等价成了C,C是上图得蓝色曲线,所以我们最小化B就变成了最大化C。实际在训练过程中,人们也总结出经验就是用C作为目标函数来优化生成器。

4、生成模型的目标函数
我们用生成模型是为我们生成数据的。或者说我们是喂入生成模型一个随机数(或者是个随机向量),让模型给我们生成一张图片的。
那此时我们的目标就是:让生成数据的分布最大程度的和真实数据的分布相似,这样我们就可以从高概率地方随机采点,就可以生成我们想要的图片了。一般的做法是用极大似然估计:

当pdata我们不能简单的用正态分布或者高斯混合分布来表示,那极大化似然函数就没法求,但是我们可以用最小化KL散度来求,因为:

所以,当我们优化两个分布之间的距离时,除了用极大化似然函数外,我们还可以优化这个两个分布之间的KL散度,而且二者是等价的!如果两个分布非常接近,那它们的KL散度就越小;如果两个分布差异越大,那它们的KL散度就越大。

5、GAN的目标函数
GAN也是生成模型,但是,从KL散度的公式来看,似乎我们也是没法求sita星啊,因为Pdata和Pg我们没法定义啊!肯定不能简单把Pg假设为正态分布的!对于GAN来说,Pg是它的生成器学出来的,Pg的分布是GAN生成器学出来的,能让生成的Pg最大的靠近Pdata:

但对于GAN的判别器来说,它不知道生成器生成的数据的Pg,也不知道训练集的Pdata,但是它知道样本g和样本data:

于是,GAN的判别器其实就是把minmax目标函数,给改写成了V(G,D),就是用生成样本和训练样本的期望代替了P,那我们再看看判别器优化的最大化的V(G,D)到底是啥:

可见:也就是判别器是在找最优的D星,最优的D星是和生成器有关的,我们把最优的D星带入目标函数,发现原来这个目标函数是随着Pg、Pdata之间的JS散度变化的,当Pg、Pdata的分布相去甚远,判别器的损失就越小,当的Pg、Pdata分布越相近,判别器的损失就越大。

结论:判别器优化的是Pg、Pdata的JS散度!

6、小结GAN背后的原理
所以,如下图所示,GAN的minmax目标函数的意思就是:先寻找蓝线上的最大值点(就是判别器的max),再找到最小的最大值点(就是生成器的min)。也所以下图的G3就是GAN优化的结果。也就是判别器是找到最大的D星,生成器是找到最小的G星。

也所以GAN的训练方式是:

实际中代码实现是:

我们前面一个章节写的GAN和DCGAN都是这种实现方法。

GAN的优缺点:

7、JS散度存在的问题

最优的判别器其实度量的是Pdata和Pg之间的JS散度,而优化JS散度效果不好,因为JS散度存在下面的问题:

意思就是当生成器生成的数据的分布和训练数据的分布相差不大的时候,生成器还能往更强的方向迭代参数,生成器和判别器还是可以对抗的。
但是当生成器生成的数据的分布和训练数据的分布相去甚远的时候,判别器是不知道往哪里迭代的,生成器也就更不知道迭代方向了。也就是没法训练。
所以要对JS散度进行改进,就是LSGAN(最小均方拟合GAN)和WGAN。

8、LSGAN(Least Square GAN)
LSGAN针对GAN的问题,一是它抛弃了架构最后的sigmoid激活函数,之间输出结果,二是它对损失函数进行了改进,它不采用二分类交叉熵了(也就是KL散度),它采用回归的方法,让模型最后的输出往0和1上靠,就是真样本的标签是1,假样本的标签是0,但是损失函数是L1或者L2距离了,因为是回归嘛。

那为什么LSGAN的目标函数就有效了,普通GAN的目标函数很容易失效?下面是LSGAN背后的数学推导:

可见,原来LSGAN判别器的损失函数度量的是Pdata和Pg两个分布之间的卡方距离。而卡方距离比JS散度更能度量两个分布之间的距离。
下面是LSGAN的效果:

9、WGAN(Wasserstein GAN)
WGAN也是针对普通GAN的问题进行改进的,一是,WGAN也去掉了架构最后的sigmoid激活函数,直接输出结果;二是,也是对判别器的损失函数进行改进的,普通GAN的判别器的损失函数是KS散度,WGAN改成了推土机距离:

当我们想衡量两个概率分布的不相似程度时,我们可以用KL散度、TV散度、JS散度、 Wassertein 距离等。
其中,KL 散度计算出来的两个分布的距离是不具有对称性的,比如,分布KL(Pa||Pb)是不等于KL(Pb||Pa)的,这是它的缺点。
TV散度和JS散度的缺点则在于这两个距离不具有连续性。
Wassertein 距离的优势是具有连续性的特质。当两个分布相差很远的时候,此时用KL散度可能就没有意义,JS散度就是一个常量log2,所以它们都不能很好的度量两个分布之间的距离。

上图的横向黄色框表示把分布P的那部分搬运到分布Q各个区域的距离;纵向黄色框表示把分布Q的那部分搬运到分布P各个区域的距离。所以P到Q和Q到P的距离是一样的。
此外,由于搬运方案有多个,所以会生成多个PQ矩阵,所以我们还得找到一个最优的搬运矩阵,所以在计算推土机距离时,不是一下就计算出来的,是还得有一个优化器寻找最优的搬运方案。

但是一旦算出推土机距离,那就都是最优的距离,而所有的最优距离是单调的,如下图所示,d0一定是大于d50的,d50一定是大于0的。其中d0表示第一轮训练时,或者说是刚开始训练时的,pdata和pg之间的推土机距离,d50则表示训练50轮后的距离,最后的是训练100轮的距离。所以也可以说明判别器的损失函数如果是推土机距离牵引的化,网络会更好训练,因为这个损失函数的导航比JS损失函数的导航清晰度强啊。

前面也说了,推土机距离是挺好的,但是你如何找到最优的推土机距离呢?

所以WGAN代码实现就是这样的:

下面是WGAN的效果:

虽然从效果上肉眼看不到太大区别,但是你在实际中训练中,当你的生成数据的分布和真实样本分布相差很远时,你会发现普通GAN就没法训练了,只有WGAN还可以顺利训练。

说明:当我把WGAN都写的七七八八的时候,突然发现有一篇博文写得实在是太好了,必须mark到这里啊:https://www.cnblogs.com/Allen-rg/p/10305125.html 这篇博文写得实在是太清晰了。

GAN的内容实在是太多,后面我再继续开一个章节继续。 。。。。

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WGAN (Wasserstein生成对抗网络)是一种生成对抗网络,其原理图如下: WGAN的核心思想是通过定义和最大化Wasserstein距离来训练生成器和判别器模型。Wasserstein距离是用于衡量两个分布之间的差异的一种距离度量。 在WGAN中,生成器模型G接受一个随机噪声向量作为输入,并生成一个与真实数据分布相似的样本。判别器模型D接受生成生成的样本以及真实数据样本作为输入,并尝试区分出哪些是真实样本,哪些是生成的样本。 WGAN的训练过程分为两个阶段:判别器阶段和生成器阶段。在判别器阶段,我们固定生成器的参数,只更新判别器的参数,通过最小化Wasserstein距离来增强判别器的能力。Wasserstein距离的计算是通过将判别器输出对真实样本的评分减去对生成样本的评分,然后取这些差异的最大值。 在生成器阶段,我们固定判别器的参数,只更新生成器的参数,通过最大化Wasserstein距离来改进生成器的性能。在这个阶段,生成器努力生成样本,使得它们能够获得更高的Wasserstein距离评分。 通过交替进行这两个阶段的训练,WGAN可以逐渐提高生成器的生成能力,使其生成的样本与真实数据更加接近。另外,WGAN还引入了一些技巧以解决传统生成对抗网络训练中的一些不稳定性问题,例如使用权重剪切技术来约束判别器的参数。 总结起来,WGAN通过定义Wasserstein距离来衡量生成器和判别器之间的差异,并通过交替训练这两个模型来改进生成器的生成能力,从而使其生成的样本更接近于真实数据分布。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值