热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LSGAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

雷锋网(公众号:雷锋网)按:本文作者齐国君,伊利诺伊大学电子与计算机工程专业。雷锋网获授权转载,更多AI开发技术文章,关注AI研习社(微信号:okweiwu)。最近很多关心深度学习

雷锋网(公众号:雷锋网)按:本文作者齐国君,伊利诺伊大学电子与计算机工程专业。雷锋网获授权转载,更多AI开发技术文章,关注AI研习社(微信号:okweiwu)。

最近很多关心深度学习最新进展,特别是生成对抗网络的朋友可能注意到了一种新的GAN-- Wasserstein GAN。其实在WGAN推出的同时,一种新的LS-GAN (Loss Sensitive GAN,损失敏感GAN)也发表在预印本 [1701.06264] Loss-Sensitive Generative Adversarial Networks on Lipschitz Densities 上。

那这两种GAN有没有什么联系呢?作为LS-GAN的作者,笔者就带大家一览WGAN和LS-GAN本质和联系。

GAN前传和“无限的建模能力”

熟悉经典GAN的读者都知道,GAN是一种通过对输入的随机噪声z (比如高斯分布或者均匀分布),运用一个深度网络函数G(z),从而希望得到一个新样本,该样本的分布,我们希望能够尽可能和真实数据的分布一致(比如图像、视频等)。

在证明GAN能够做得拟合真实分布时,Goodfellow做了一个很大胆的假设:用来评估样本真实度的Discriminator网络(下文称D-网络)具有无限的建模能力,也就是说不管真实样本和生成的样本有多复杂,D-网络都能把他们区分开。这个假设呢,也叫做非参数假设

当然,对于深度网络来说,咱只要不断的加高加深,这还不是小菜一碟吗?深度网络擅长的就是干这个的么。

但是,正如WGAN的作者所指出的,一旦真实样本和生成样本之间重叠可以忽略不计(这非常可能发生,特别当这两个分布是低维流型的时候),而又由于D-网络具有非常强大的无限区分能力,可以完美地分割这两个无重叠的分布,这时候,经典GAN用来优化其生成网络(下文称G-网络)的目标函数--JS散度-- 就会变成一个常数!

我们知道,深度学习算法,基本都是用梯度下降法来优化网络的。一旦优化目标为常数,其梯度就会消失,也就会使得无法对G-网络进行持续的更新,从而这个训练过程就停止了。这个难题一直一来都困扰这GAN的训练,称为梯度消失问题。

WGAN来袭

为解决这个问题,WGAN提出了取代JS散度的Earth-Mover(EM)来度量真实和生成样本密度之间的距离。该距离的特点就是,即便用具有无限能力的D-网络完美分割真实样本和生成样本,这个距离也不会退化成常数,仍然可以提供梯度来优化G-网络。不过WGAN的作者给出的是定性的解释,缺少定量分析,这个我们在后面解释LS-GAN时会有更多的分析。

现在,我们把这个WGAN的优化目标记下来,下文我们会把它跟本文的主角LS-GAN 做一番比较。

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

这里 f-函数和 g-函数 分别是WGAN的批评函数(critics)和对应的G-网络。批评函数是WGAN里的一个概念,对应GAN里的Discriminator。该数值越高,代表对应的样本真实度越大。

好了,对WGAN就暂时说到这里。总结下,由于假设中的无限建模能力,使得D-网络可以完美分开真实样本和生成样本,进而JS散度为常数;而WGAN换JS散度为EM距离,解决了优化目标的梯度为零的问题。

不过细心的读者注意到了,WGAN在上面的优化目标(12)里,有个对f-函数的限定:它被限定到所谓的Lipschitz连续的函数上的。那这个会不会影响到上面对模型无限建模能力的假设呢?

其实,这个对f-函数的Lipschitz连续假设,就是沟通LS-GAN和WGAN的关键,因为LS-GAN就是为了限制GAN的无限建模能力而提出的。

熟悉机器学习原理的朋友会知道,一提到无限建模能力,第一反应就应该是条件反应式的反感。为什么呢?无限建模能力往往是和过拟合,无泛化性联系在一起的。

仔细研究Goodfellow对经典GAN的证明后,大家就会发现,之所以有这种无限建模能力假设,一个根本原因就是GAN没有对其建模的对象--真实样本的分布--做任何限定。

换言之,GAN设定了一个及其有野心的目标:就是希望能够对各种可能的真实分布都适用。结果呢,就是它的优化目标JS散度,在真实和生成样本可分时,变得不连续,才使得WGAN有了上场的机会,用EM距离取而代之。

所以,某种意义上,无限建模能力正是一切麻烦的来源。LS-GAN就是希望去掉这个麻烦,取而代之以“按需分配”建模能力。

LS-GAN和“按需分配”的建模能力

好,让我们换个思路,直接通过限定的GAN的建模能力,得到一种新的GAN模型。这个就是LS-GAN了。我们先看看LS-GAN的真容:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

这个是用来学习损失函数的目标函数。我们将通过最小化这个目标来得到一个“损失函数" (,下文称之为L-函数)。L-函数在真实样本上越小越好,在生成的样本上越大越好。

另外,对应的G-网络,通过最小化下面这个目标实现:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

这里注意到,在公式(6)中,对L-函数的学习目标 S中的第二项,它是以真实样本x和生成样本的一个度量为各自L-函数的目标间隔,把x和分开。

这有一个很大的好处:如果生成的样本和真实样本已经很接近,我们就不必要求他们的L-函数非得有个固定间隔,因为,这个时候生成的样本已经非常好了,接近或者达到了真实样本水平。

这样呢,LS-GAN就可以集中力量提高那些距离真实样本还很远,真实度不那么高的样本上了。这样就可以更合理使用LS-GAN的建模能力。在后面我们一旦限定了建模能力后,也不用担心模型的生成能力有损失了。这个我们称为“按需分配”

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

上图就是对LS-GAN这种对建模能力”按需“分配的图示。

有了上面的准备,我们先把LS-GAN要建模的样本分布限定在Lipschitz 密度上,即如下的一个假设:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

那么什么是Lipschitz密度了?简而言之,Lipschitz密度就是要求真实的密度分布不能变化的太快。密度的变化随着样本的变化不能无限地大,要有个度。不过这个度可以非常非常地大,只要不是无限大就好。

好了,这个条件还是很弱地,大部分分布都是满足地。比如,你把一个图像调得稍微亮一些,它看上去仍然应该是真实的图像,在真实图像中的密度在Lipschitz假设下不应该会有突然地、剧烈地变化。不是吗?

然后,有了这个假设,我就能证明LS-GAN,当把L-函数限定在Lipschitz连续的函数类上,它得到地生成样本地分布和真实样本是完全一致!

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

前面我们说了,经典GAN事实上对它生成的样本密度没有做任何假设,结果就是必须给D-网络引入无限建模能力,正是这种能力,在完美分割真实和生成样本,导致了梯度消失,结果是引出了WGAN。

现在,我们把LS-GAN限定在Lipschitz密度上,同时限制住L-函数的建模能力到Lipschitz连续的函数类上,从而证明了LS-GAN得到的生成样本密度与真实密度的一致性。

那LS-GAN和WGAN又有什么关系呢?

细心的朋友可能早注意到了,WGAN在学习f-函数是,也限定了其f-函数必须是Lipschitz连续的。不过WGAN导出这个的原因呢,是因为EM距离不容易直接优化,而用它的共轭函数作为目标代替之。

也就是说,这个对f-函数的Lipschitz连续性的约束,完全是“技术”上的考虑,没有太多物理意义上的考量。

而且,WGAN的作者也没有在他们的论文中证明:WGAN得到的生成样本分布,是和真实数据的分布是一致的。不过,这点在我们更新的预印本中给出了明确的证明,如下:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

换言之:我们证明了,WGAN在对f-函数做出Lipschitz连续的约束后,其实也是将生成样本的密度假设为了Lipschiz 密度。这点上,和LS-GAN是一致的!两者都是建立在Lipschitz密度基础上的生成对抗网络。

好了,让我们把LS-GAN和WGAN对L-函数和f-函数的学习目标放在一起仔细再看一看:

LS-GAN:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

WGAN:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

形式上来看,LS-GAN和WGAN也有很大区别。WGAN是通过最大化f-函数在真实样本和生成样本上的期望之差实现学习的,这种意义上,它可以看做是一种使用“一阶统计量"的方法。

LS-GAN则不同。观察LS-GAN优化目标的第二项,由于非线性的函数的存在,使得我们无法把L-函数分别与期望结合,像WGAN那样得到一阶统计量。因为如此,才使得LS-GAN与WGAN非常不同。

LS-GAN可以看成是使用成对的(Pairwise)“真实/生成样本对”上的统计量来学习f-函数。这点迫使真实样本和生成样本必须相互配合,从而更高效的学习LS-GAN。

如上文所述,这种配合,使得LS-GAN能够按需分配其建模能力:当一个生成样本非常接近某个真实样本时,LS-GAN就不会在过度地最大化他们之间L-函数地差值,从而LS-GAN可以更有效地集中优化那些距离真实样本还非常远地生成样本,提高LS-GAN模型优化和使用地效率。

梯度消失问题

那LS-GAN是否也能解决经典GAN中的梯度消失问题呢?即当它的L-函数被充分训练后,是否对应的G-网络训练目标仍然可以提供足够的梯度信息呢?

我们回顾下,在WGAN里,其作者给出G-网络的训练梯度,并证明了这种梯度在对应的f-函数被充分优化后,仍然存在。

不过,仅仅梯度存在这点并不能保证WGAN可以提供足够的梯度信息训练 G-网络。为了说明WGAN可以解决梯度消失问题,WGAN的作者宣称:“G-网络的训练目标函数”在对其网络链接权重做限定后, 是接近或者最多线性的。这样就可以避免训练目标函数饱和,从而保证其能够提供充足的梯度训练G-网络。

好了,问题的关键时为什么G-网络的训练目标函数是接近或者最多线性的,这点WGAN里并没有给出定量的分析,而只有大致的定性描述,这里我们引用如下:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

现在,让我们回到LS-GAN,看看如何给出一直定量的形式化的分析。在LS-GAN里,我们给出了最优的L-函数的一种非参数化的解

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

这个定理比较长,简单的来说,就是所有的最优 L-GAN的解,都是在两个分段线性的上界和下界L-函数之间。如下图所示:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

红线是上界,绿线是下界。任何解出来最优L-函数,一定在这两个分段线性的上下界之间,包括用一个深度网络解出来L-函数。

也就是说,LS-GAN解出的结果,只要上下界不饱和,它的得到的L-函数就不会饱和。而这里看到这个L-函数的上下界是分段线性的。这种分段线性的函数几乎处处存在非消失的梯度,这样适当地控制L-函数地学习过程,在这两个上下界之间地最优L-函数也不会出现饱和现象。

好了,这样我们就给出了WGAN分析梯度消失时候,缺失的哪个定量分析了。

最后,我们看看LS-GAN合成图像的例子,以及和DCGAN的对比。

看看在CelebA上的结果:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

如果我们把DCGAN和LS-GAN中Batch Normalization 层都去掉,我们可以看到DCGAN模型取崩溃,而LS-GAN仍然可以得到非常好的合成效果:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

不仅如此,LS-GAN在去掉batch normalization后,如上图(b)所示,也没有看到任何mode collapse现象。

我们进一步通过实验看看、在LS-GAN中L-函数网络过训练后,模型还能不能提供足够的梯度来训练G-网络。

下图是L-网络每次都训练,而G-网络每个1次、3次、5次才训练时,对应的用来更新G-网络的梯度大小(在log scale上):

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

我们可以看到:即便当L-网络相对G-网络多训练若干次后,更新G-网络的梯度仍然充分大,而没有出现梯度消失的问题。

不仅如此,随着训练的进行,我们可以看到,G-网络的梯度逐渐增大,一直到一个相对比较稳定的水平。相对固定强度的梯度说明了,G-网络的训练目标函数,最终非常可能是达到一个接近线性的函数(这是因为线性函数的梯度是固定的)。

这个也进一步说明了,LS-GAN定义的G-网络的训练目标函数没有发生饱和,其定义是合理的,也是足以避免梯度消失问题的。

对LS-GAN进行有监督和半监督的推广

LS-GAN和GAN一样,本身是一种无监督的学习算法。LS-GAN的另一个突出优点是,通过定义适当的损失函数,它可以非常容易的推广到有监督和半监督的学习问题。

比如,我们可以定义一个有条件的损失函数,这个条件可以是输入样本的类别。当类别和样本一致的时候,这个损失函数会比类别不一致的时候小。

于是,我们可以得到如下的Conditional LS-GAN (CLS-GAN)

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

我们可以看看在MNIST, CIFAR-10和SVHN上,针对不同类别给出的合成图像的效果:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

半监督的训练是需要使用完全标注的训练数据集。当已标注的数据样本比较有限时,会使得训练相应模型比较困难。

进一步,我们可以把CLS-GAN推广到半监督的情形,即把已标记数据和未标记数据联合起来使用,利用未标记数据提供的相关分布信息来指导数据的分类。

为此,我们定义一个特别的半监督的损失函数:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

对给定样本x,我们不知道它的具体类别,所以我们在所有可能的类别上对损失函数取最小,作为对该样本真实类别的一个最佳的猜测。这与上面的公式(7)是一致的。

这样,我们可以相应的推广CLS-GAN,得到如下的训练目标 最优化损失函数

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

该训练目标可以通过挖掘各个类别中可能的变化,帮助CLS-GAN模型合成某类中的更多的“新”的样本,来丰富训练数据集。这样,即便标注的数据集比较有限,通过那些合成出来已标记数据,也可以有效的训练模型。

比如,在下面图中,CLS-GAN模型通过对未标记MNIST数据进行分析,可以按类别合成出更多不同书写风格的数字。

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

这些数字可以增加已标注的训练数据量,进一步提供模型准确度;而更准确的模型可以进一步提供CLS-GAN的合成图像的准确性。通过这种彼此不断的提高,半监督的CLS-GAN在只有很少已标注训练数据下,仍然可以做到准确的分类。

我们可以看下在SVHN上,当只有1000张已标注训练数据时分类的准确度:

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

下面是在CIFAR-10上,4000张已标记数据下的分类准确度。

LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上

结论

那么究竟GAN,WGAN和LS-GAN谁更好呢?持平而论,笔者认为是各有千秋。究竟谁更好,还是要在不同问题上具体分析。

这三种方法只是提供了一个大体的框架,对于不同的具体研究对象(图像、视频、文本等)、数据类型(连续、离散)、结构(序列、矩阵、张量),应用这些框架,对具体问题可以做出很多不同的新模型。

当然,在具体实现时,也有非常多的要考虑的细节,这些对不同方法的效果都会起到很大的影响。毕竟,细节是魔鬼!笔者在实现LS-GAN时也有很多的具体细致的问题要克服。一直到现在,我们还在不断持续的完善相关代码。

对LS-GAN有兴趣的读者,可以参看我们分享的代码,并提出改进的建议。 对研究GAN感兴趣的读者,也欢迎联系笔者:个人主页,一起探讨相关算法、理论。

雷锋网版权文章,未经授权禁止转载。详情见。


LS-GAN作者诠释新型GAN:条条大路通罗马,把GAN建立在Lipschitz密度上


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Go语言实现堆排序的详细教程
    本文主要介绍了Go语言实现堆排序的详细教程,包括大根堆的定义和完全二叉树的概念。通过图解和算法描述,详细介绍了堆排序的实现过程。堆排序是一种效率很高的排序算法,时间复杂度为O(nlgn)。阅读本文大约需要15分钟。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • OCR:用字符识别方法将形状翻译成计算机文字的过程Matlab:商业数学软件;CUDA:CUDA™是一种由NVIDIA推 ... [详细]
author-avatar
早晚虚文_114
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有