训练GANs的陷阱与提示

星夢妙者
发布: 2025-09-23 09:16:13
原创
389人浏览过

生成性对抗网络(gans)是深度学习领域近年来最引人注目的主题之一。最近几个月,关于gans的论文数量显著增加。gans已被应用于多种问题,如果您错过了这波潮流,这里有一份关于gans的有趣应用列表。

我已经阅读了许多关于GANs的文章,但自己从未尝试过。因此,在阅读了一些鼓舞人心的论文和GitHub项目后,我决定亲自训练一个简单的GAN,却很快遇到了问题。本文针对刚开始使用GANs的深度学习爱好者。除非您运气很好,否则首次尝试训练GAN可能会是一个令人沮丧的过程,可能需要花费数小时才能成功。当然,随着时间和经验的积累,您将会熟练掌握GANs的训练,但对于初学者来说,可能会遇到一些错误,甚至不知道从何处开始调试。我想分享我在首次从头开始训练GAN时的观察和经验,希望能帮助一些人节省几个小时的调试时间。

生成性对抗网络除非您在过去一年左右的时间里一直封闭在一个房间里,否则所有参与深度学习的人——甚至一些没有参与深度学习的人——都听说过并讨论过GANs。GANs或生成对抗网络是一种深度神经网络,是一种生成模型。这意味着,给定一组训练数据,GANs可以学习估计数据的基本概率分布。这非常有用,因为除了其他用途之外,我们现在可以根据原始训练集中可能不存在的学习概率分布生成样本。如上文链接中所列,这产生了一些非常有用的应用。

该领域的专家已经提供了几个惊人的资源来解释GANs及其工作原理,因此我不会尝试重复他们的工作。但为了完整性,这里有一个快速概述。

训练GANs的陷阱与提示GAN概述

生成性对抗网络实际上是两个相互竞争的深层网络。给定训练集X(例如几千张猫的图像),生成器网络G(X)将随机向量作为输入,并尝试生成类似于训练集中的图像。鉴别器网络D(X)是一种二元分类器,其试图根据训练集X和由生成器生成的假猫图像来区分真实猫图像。因此,生成器网络的工作是学习X中数据的分布,以便它可以生成真实的猫图像,并确保鉴别器无法区分训练集中的猫图像和生成器的猫图像。鉴别器需要学习跟上生成器的步伐,不断尝试新的技巧来生成假猫图像并欺骗鉴别器。

最终,如果一切顺利,生成器(或多或少)会学习训练数据的真实分布,并且真正擅长生成逼真的猫图像。鉴别器无法再区分训练集猫图像和生成的猫图像。

从这个意义上说,这两个网络不断地试图干扰另一个不能很好地完成他们的任务。那么,这到底是怎么回事呢?

另一种看待GAN设置的方法是,鉴别器试图通过告诉它真正的猫图像是什么样子来引导生成器。最终,生成器将其计算出来并开始生成逼真的猫图像。训练GANs的方法类似于博弈论中的Minimax算法,并且两个网络试图相对于彼此实现所谓的纳什均衡。如果您想更详细地了解这一点,请参阅底部的参考资料。

GAN训练面临的挑战回到GANs训练。首先,我使用Keras和TensorFlow后端,在MNIST数据集上训练了一个GAN(准确地说,是DC-GAN),这并不难。经过对生成器和鉴别器网络的一些小的调整,GAN能够生成清晰的MNIST数字图像。

训练GANs的陷阱与提示生成的MNIST数字

黑白数字只是非常有趣。物体和人物的彩色图像是所有酷家伙都喜欢玩的东西。这就是事情开始变得棘手的地方。在MNIST之后,明显的下一步是生成CIFAR-10图像。在日复一日地调整超参数、更改网络架构、添加和删除层之后,我终于能够生成类似CIFAR-10的外观不错的图像。

训练GANs的陷阱与提示使用DC-GAN生成的青蛙

训练GANs的陷阱与提示使用DC-GAN生成的汽车

我从一个相当深的(但大部分是不良的)网络开始,最终得到了一个实际有效的、简单得多的网络。当我开始调整网络和训练过程时,15个时期后生成的图像看起来像这样,

训练GANs的陷阱与提示接下来:

训练GANs的陷阱与提示最终:

训练GANs的陷阱与提示下面是我意识到自己犯过的错误以及我在此过程中学到的东西。因此,如果您是GANs的新手,并且在训练方面没有取得很大成功,那么查看以下方面可能会有所帮助:

免责声明:这只是我尝试过的事情和我得到的结果。我并没有声称已经解决了所有GAN训练问题。1.更大内核和更多过滤器

较大的内核覆盖了前一层图像中的更多像素,因此可以查看更多信息。5×5内核与CIFAR-10配合良好,在鉴别器中使用3×3内核导致鉴别器损耗迅速逼近0。对于生成器,您希望顶部卷积层中的较大内核保持某种平滑性。在较低层,我没有看到改变内核大小的任何重大影响。

过滤器的数量可以大量增加参数的数量,但通常需要更多的过滤器。我在几乎所有的卷积层中都使用了128个过滤器。使用较少的过滤器,尤其是在发生器中,使得最终生成的图像太模糊。因此,看起来更多的过滤器有助于捕获额外的信息,最终可以为生成的图像增加清晰度。

2.翻转标签(Generated = True,Real = False)虽然起初看起来很傻,但对我有用的一个主要技巧是改变标签分配。

如果您使用的是Real Images = 1和Generated Images = 0,那么反过来也会有所帮助。正如我们稍后将看到的,这有助于早期迭代中的梯度流,并有助于令事情发生变化。

3.软标签和噪音标签在训练鉴别器时这非常重要。有硬标签(1或0)几乎扼杀了所有早期学习,导致鉴别器非常迅速地接近0损失。我最终使用0到0.1之间的随机数来表示0个标签(真实图像)和0.9到1.0之间的随机数来表示1个标签(生成的图像)。训练生成器时不需要这样做。

此外,它还有助于为训练标签添加一些噪音。对于输入识别器的5%的图像,标签被随机翻转。即真实被标记为生成并且生成被标记为真实。

4.批量规范有帮助,但前提是你有其他的东西批处理规范化无疑有助于最终的结果。添加批处理规范后,生成的图像明显更清晰。但是,如果您错误地设置了内核或过滤器,或者识别器的损失很快达到0,添加批处理规范可能并不能真正帮助恢复。

训练GANs的陷阱与提示在网络中生成具有批处理规范层的车辆5.一次一堂课

天谱乐
天谱乐

唱鸭旗下AI音乐创作平台,为您提供个性化音乐创作体验!

天谱乐 514
查看详情 天谱乐

为了更容易地训练甘斯,确保输入数据具有相似的特性是很有用的。例如,与其在CIFAR-10的所有10个类中都训练GAN,不如选择一个类(例如,汽车或青蛙)并训练GAN从该类生成图像。DC-GAN的其他变体在学习生成多个类的图像方面做得更好。例如,以类标签为输入,生成基于类标签的图像。但是,如果你从一个普通的DC-GAN开始,最好保持过程简单。

6.看看梯度如果可能的话,试着监控梯度以及网络中的损耗。这些可以帮助你更好地了解训练的进展,甚至可以帮助你在工作不顺利的情况下进行调试。

理想情况下,生成器应该在训练早期接收大的梯度,因为它需要学习如何生成真实的数据。另一方面,鉴别器并不总是在早期获得大的梯度,因为它可以容易地区分真实和伪造的图像。一旦对生成器进行了足够的训练,鉴别器就会变得更难以区分假图像。它会不断出错并获得强大的梯度。

我在CIFAR-10汽车上的最初几个GAN版本,有许多卷积和批量规范层,没有标签翻转。除了趋势之外,监测梯度的规模也很重要。如果生成器层上的梯度太小,学习可能会很慢,或者根本不会发生。这在GAN的这个版本中是可见的。

训练GANs的陷阱与提示顶部生成器层的梯度(X轴:小批量迭代)

训练GANs的陷阱与提示底部生成器层的梯度(X轴:小批量迭代)

训练GANs的陷阱与提示顶部鉴别器层的梯度(X轴:小批量迭代)

训练GANs的陷阱与提示底部鉴别器层的梯度(X轴:小批量迭代)

在生成器的最下层梯度的规模太小,任何学习都无法进行。鉴别器的梯度始终是一致的,这表明鉴别器并没有真正学到任何东西。现在,让我们将其与GAN的梯度进行比较,GAN具有上面描述的所有变化,并生成良好的真实图像:

训练GANs的陷阱与提示顶部生成器层的梯度(X轴:小批量迭代)

训练GANs的陷阱与提示底部生成器层的梯度(X轴:小批量迭代)

训练GANs的陷阱与提示顶部鉴别器层的梯度(X轴:小批量迭代)

训练GANs的陷阱与提示底部鉴别器层的梯度(X轴:小批量迭代)

梯度到达生成器底层的比例明显高于前一个版本。此外,随着训练的进展,梯度流与预期一样,随着发生器在早期获得较大的梯度,一旦训练足够,鉴别器在顶层获得一致的高梯度。

7.没有提前停止我犯了一个愚蠢的错误——可能是由于我的不耐烦——当我看到损失没有任何明显的进展,或者生成的样本仍然有噪声时,在进行了几百次小批量培训之后,我就终止了培训。重新开始工作并节省时间比等待训练完成并最终意识到网络从未学过任何东西更有诱惑力。GANs需要花费很长时间来训练和初始几个损失值,并且生成的样本几乎从未显示任何趋势或进展迹象。在结束训练过程并调整设置之前,等待一段时间是很重要的。

此规则的一个例外是,如果您发现Discriminator损失迅速接近0。如果发生这种情况,则几乎没有恢复的可能性,最好重新开始训练,可能是在网络或培训过程中进行了更改之后。

最后的GAN是这样工作的:

训练GANs的陷阱与提示就是这样了。我希望这篇文章可以帮助任何人从头开始训练他们的第一个DC-GAN。以下是我关注的一些资源以及包含有关GAN的大量信息的其他资源:

GAN论文:生成性对抗网络

基于深度卷积生成对抗性网络的无监督表示学习

改进的GANs训练技术

其他链接:Training GANs: Better understanding and other improved techniques

NIPS 2016 GAN教程

有条件的GAN

Keras中用于最终工作版本的GAN代码可以在我的Github上找到。

以上就是训练GANs的陷阱与提示的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号