我们能完全解决GAN中的模式崩溃问题吗?

译文 精选
人工智能
模式崩溃会导致生成对抗网络(GAN)产生重复输出。尽管有一些解决方案,但并没有一种能够完全解决这个问题的方法。那么,研究人员将如何解决这个问题?

译者 | 李睿

审校 | 重楼

事实上,生成式对抗网络(GAN)是人工智能领域中令人瞩目的应用之一。GAN风靡全球,凭借生成逼真的图像、深度伪造(Deepfake)视频、人工智能生成的艺术作品,甚至合成的生物数据,其能力让人们惊叹不已。但是GAN也有不为人知的秘密,这是工程师、人工智能爱好者和研究人员多年来面临的一个难题:模式崩溃。

如果你以前训练过GAN,那么就体会过其非凡的魅力。比如见证模型进化,完善功能,并创造越来越逼真的对象——这真是令人兴奋!但这种情况发生了一些变化,GAN不再生成多样化的输出,而是开始重复生成几乎难以区分的同一类物体的变体。就像让GAN生成形态各异的猫,但它却总是一次又一次地展示出同一只黑猫,这有些令人哭笑不得。

为什么会这样? 到底发生了什么?真的能解决这个问题吗?

在模式崩溃期间会发生什么?

从根本上来说,什么是模式崩溃?为什么GAN这个具有如此巨大潜力的模型会崩溃,并拒绝生成多样化的数据?

在GAN框架中,有两个神经网络:生成器和鉴别器。生成器将随机噪声作为输入,并尝试生成假数据(例如图像或文本),而鉴别器则负责区分真实数据和生成器生成的假合成数据。如果生成器成功欺骗了鉴别器,就是生成器的胜利。如果鉴别器识别出假数据,那就是鉴别器的胜利。这是一个双方参与的“对抗”游戏。

在理论上,随着时间的推移,生成器应该能够创建出越来越逼真并且多样化的样本,捕捉到真实数据分布(称为“模式”)中的所有微妙变化。但在实际操作中,这种平衡往往会失控。生成器找到了一条捷径,通常是通过生成一些样本能够很好地欺骗鉴别器。其结果如何?生成器从有限的输出集中采样,而没有捕获真实数据中存在的所有潜在变化。

从形式上来说,当生成器将许多潜在空间点(应该对应多样化的输出)映射到仅包含少数(已经崩溃)输出的子集时,就会发生模式崩溃。所以,生成器不会合成不同类型的图像,例如不同品种的狗,而是认为:“这张哈巴狗的图像曾经奏效!我会继续生产哈巴狗的图像。”这对哈巴狗爱好者来说很酷;但对于希望生成拉布拉多犬或吉娃娃的人来说,那就令人失望了。

为什么会出现模式崩溃?

我们从技术层面更深入地探讨,因为了解问题的根源是直面并解决问题的关键。

问题的根源在于GAN如何优化其生成器的分布。需要记住,生成器和鉴别器之间的对抗游戏是基于最小化Jensen-Shannon(JS)散度的。这是一种复杂的说法,GAN试图将真实数据分布和虚假(生成)数据分布之间的距离最小化。JS散度之所以被广泛使用,是因为它消除了极端的不平衡,但关键问题在于:当真实数据和生成的数据分布差异太大时,梯度就会停止流动。

可以这样想:当鉴别器在区分真实与虚假方面变得过于出色时,生成器收到的有关如何改进的反馈就会太少。其结果如何?生成器利用它可以精确再现的少数模式——通常会会陷入一组狭窄的输出集合中,这些输出足以欺骗鉴别器。从技术上来说,GAN的优化游戏陷入了一个局部最小值。

而且,这不仅仅是JS散度的问题。KL散度也有其自身的问题。如果真实分布中的一个模式在生成的样本中缺失(想象GAN从未生成白猫的图片)那么,KL散度最终将趋于无穷大。这只会让事情变得更糟,因为当模型“试图优化”这个散度时,它已经达到了一个没有什么可优化的地步。它彻底崩溃了。

Wasserstein GAN:一个具有发展前景的解决方案?

那么应该如何解决这个问题呢?

人工智能领域引入的一种创新方法——Wasserstein GANs(WGANs)引起了广泛讨论。WGAN没有使用JS散度,而是用Earth Mover’s Distance(或Wasserstein Distance)取而代之。这衡量的是将一个分布转换为另一个分布所需的成本。

真正令人兴奋的是,与JS散度不同,即使生成器的分布和实际数据分布相距甚远,Wasserstein距离也能给出有意义的梯度。这意味着,在训练过程中,生成器会获得连续并且有用的反馈,指导它如何逐步调整其分布以更好地匹配真实数据,从而倾向于学习更平滑、更多样化的表示。

但是,事情不可能这么简单。

尽管WGAN确实可以提供帮助,但并不是灵丹妙药。WGAN最初面临的一个问题是,为了确保评论家(接替鉴别器的角色)表现良好,必须削减权重,这导致了优化方面的问题。因此出现了一个名为WGAN-GP(带有梯度惩罚的Wasserstein GAN)的升级版本,它通过惩罚梯度而不是削减权重,以更平滑的方式强制执行Lipschitz连续性约束。

简而言之:Wasserstein GAN在许多情况下能缓解模式崩溃问题,但在面对高度复杂的数据分布时仍会陷入困境。它们提供了信息更丰富的优化路径,但是即便有了这种复杂的修复方法,模式崩溃仍会发生。

微调GAN:小批量鉴别和展开式GAN(Unrolled GAN)

以下进一步探索研究人员为解决模式崩溃而尝试的一些更具创意的方法。

1.小批量鉴别

一个简单而有效的想法来自于小批量鉴别。这个概念是为了让鉴别器更智能——不仅在于区分单个假样本和真实样本,还能识别出缺乏多样性的整批生成样本。如果在同一批次中有太多生成的样本过于相似,鉴别器就会发现这一点,迫使生成器变得更加多样化。

这是如何实现的?通过将鉴别器的小批量统计信息与生成的样本进行比较,可以增强鉴别器的能力。如果生成的样本在特征空间中彼此过于接近,判别器就会察觉出问题,并告诉生成器:“再试一次,你一直在给我重复同一种类型的数据!”

从数学角度来看,基于特征的内核应用于整个批处理。如果某些特征空间中的两个样本非常相似,它们很可能会陷入同一模式。此时,鉴别器相应地惩罚生成器。

但是,小批量鉴别并不是灵丹妙药。它增加了计算成本,有时可能过于严格,导致生成器变得过于谨慎。

2.展开式GAN(Unrolled GAN)

还有一种更具前瞻性的方法:Unrolled GAN。这个解决方案是由谷歌DeepMind的研究人员提供的,它基于一个巧妙的想法。与其只更新鉴别器训练的一步生成器,不如将鉴别器的优化展开到多个步骤中。

生成器不再局限于应对短期的“游戏”,即欺骗当前状态的鉴别器,而是被迫预测并应对判别器在训练过程中的演变。通过展开,生成器不断尝试预测其行为将如何影响未来的判别器,并基于这种长期视角进行训练。

从数学上讲,这意味着生成器不能直接将传统的对抗损失最小化。与其相反,它最小化了展开损失函数,包含了鉴别器的几个梯度步骤的完全“展开”。

这是一种很好的修复方法,它通过迫使生成器经常用冲其投注的方式来显著减少模式崩溃的趋势,而不是依赖立即利用当前的鉴别器行为。

但是,展开会使GAN训练的计算成本更高。对于每次生成器的更新,可能需要多个鉴别器梯度步骤,这将显著降低训练速度。

潜在问题:InfoGAN和潜在空间正则化

在这里还没有涉及导致模式崩溃的一个非常核心的因素:潜在空间。

传统GAN在将随机噪声输入(潜码)映射到生成样本方面没有提供太多结构。这是有问题的,因为如果映射缺乏结构,生成器可能会将多个潜码分组到一个模式中,从而有效减少输出的多样性。

解决这个问题的一个简单但有效的方法是InfoGAN——它是一种变体,可以最大限度地利用潜码和生成输出之间的互信息(Mutual Information)。

互信息鼓励生成器尊重潜在空间中的变化。这产生了可解释的潜在空间,其中潜码的不同维度对应于数据中有意义的变化。例如,一个维度现在可以明确控制生成对象的旋转或面部特征,从而带来更多的模式多样性。

这在图像生成或解纠缠的图像到图像的转换等领域特别有用,在这些领域中,需要关心的是执行不同的变化,而不是陷入少数几个模式。

真的能消除模式崩溃吗?

事实上,虽然已经提出并实施了许多修复方法(从WGAN到Unrolled GAN等),但完全消除模式崩溃仍然难以实现。这并不是说没有取得进展,已经在很大程度上改进了GAN。然而,模式崩溃似乎是生成器和鉴别器之间动态关系的固有特性。这两个神经网络在进行竞争,而只要有竞争,就可能学会利用模式或捷径。

也就是说,例如更健壮的损失函数、批量级反馈(小批量鉴别)和混合努力(InfoGAN)等缓解策略,已经使模式崩溃在许多实际应用中不再是交易破坏者。我们可以有效地引导GAN覆盖有意义的模式。

在未来,可能会看到将对抗性框架与规范化流等方法结合起来的混合设计,这些方法通过设计自然地避免了模式崩溃。

那么能否彻底消除模式崩溃?可能不会。但只要了解它发生的原因以及有哪些工具可用,就可以有效缓解模式崩溃,从而构建出一些出色的模型。

虽然GAN有一些问题,但它们仍然是人工智能发展中最令人兴奋的领域之一。模式崩溃只是使这个领域如此丰富和引人注目的众多谜题之一。如果你在解决模式崩溃方面有新突破,欢迎分享。让我们一起解决这个问题。

原文标题:Mode Collapse in GANs: Can We Ever Completely Eliminate This Problem?,作者:Ashish Pawar

责任编辑:姜华 来源: 51CTO内容精选
相关推荐

2019-04-24 09:43:46

代码开发工具

2010-06-21 10:09:47

Java

2009-07-08 13:22:48

JVM termina

2022-08-05 11:55:13

FlutteriOS

2022-11-21 14:02:14

2022-02-23 12:56:45

框架开发

2009-06-30 14:22:50

Java编码

2019-07-09 08:44:00

DeepfakeGAN人工智能

2023-12-26 15:06:00

Linux内核转储

2020-12-07 13:23:07

LibreOffice开源

2009-11-13 16:01:53

思科路由器崩溃

2022-09-19 06:25:14

设计模式GoF

2010-08-13 10:52:12

思科路由器崩溃

2010-07-29 09:47:22

2020-04-13 15:05:10

Ubuntu深色模式Ubuntu 20.0

2012-08-28 10:19:55

2023-05-24 13:04:46

机器人人工智能

2011-11-30 13:59:17

JavaJVM

2010-03-05 10:54:25

雅虎问题

2023-04-11 11:42:31

点赞
收藏

51CTO技术栈公众号