【计算机视觉中的 GAN 】如何稳定GAN训练(3)

news/2024/4/27 6:22:12/文章来源:https://blog.csdn.net/gongdiwudu/article/details/131990442

一、说明

    在上一篇文章中,我们达到了理解未配对图像到图像翻译的地步。尽管如此,在实现自己的超酷深度GAN模型之前,您必须了解一些非常重要的概念。如本文所提的GAN模型新成员的引入:Wasserstein distance,boundary equilibrium 和 progressively growing GAN三个方面。

上篇文章地址: 【计算机视觉中的 GAN 】 - 条件图像合成和 3D 对象生成(2)

二、关于:瓦瑟斯坦距离、边界平衡,逐渐增长的GAN值

        GAN主导着深度学习任务,如图像生成和图像翻译。

        在上一篇文章中,我们达到了理解未配对图像到图像翻译的地步。尽管如此,在实现自己的超酷深度GAN模型之前,您必须了解一些非常重要的概念。

        在这一部分中,我们将看看一些基础工作。我们将看到最常见的GAN距离函数及其工作原因。然后,我们将 GAN 的训练视为试图找到双人博弈的平衡。最后,我们将看到一项革命性的增量训练工作,它首次实现了逼真的百万像素图像分辨率

        我们将探索的研究主要解决模式崩溃和训练不稳定性。从未训练过GAN的人很容易争辩说我们总是提到这两个轴。在现实生活中,为新问题训练大规模 GAN 可能是一场噩梦

        如果您开始阅读和实施最新的方法,则几乎不可能在新问题中成功训练新的 GAN。实际上,这就像中了彩票一样。

当你离开最常见的数据集(CIFAR、MNIST、CELEBA)时,你就陷入了混乱。

通常情况下,您尝试直观地将学习曲线理解为调试,以便猜测可能更好地工作的超参数。但是GAN训练非常不稳定,以至于这个过程往往是浪费时间。这部可爱的工作是最早为 GAN 培训计划提供广泛理论依据的工作之一。有趣的是,他们发现了分布之间所有现有距离之间的模式。

2.1 核心理念

        核心思想是有效地测量模型分布与实际分布的接近程度。因为选择测量距离的方式直接影响模型的收敛性。正如我们现在所知,GAN 可以表示低维流形(噪声 z)的分布。

直观地说,这个距离越弱,就越容易定义从参数空间(θ-space)到概率空间的映射,因为事实证明,分布更容易收敛。

        我们有理由要求这种连续映射。主要是因为可以定义一个连续函数来满足这种连续映射,该映射给出所需的概率空间或生成的样本。

        出于这个原因,这项工作引入了一个新的距离,称为Wasserstein-GAN。它是推土机(EM)距离的近似值,理论上表明它可以逐步优化GAN的训练。令人惊讶的是,在训练期间不需要平衡D和G,也不需要网络架构的特定设计。通过这种方式,减少了 GAN 中固有存在的模式崩溃。

2.2 了解瓦瑟斯坦距离

        在我们深入研究拟议的损失之前,让我们看一些数学。正如 wiki 中完美描述的那样,偏集合的子集的上确界 sup) 是大于或等于 的所有元素的最小元素。因此,上确界也被称为最小上限。我个人将其称为可以在 T 中找到的所有可能组合的子集的最大值。

        现在,让我们在GAN术语中引入这个概念。T 是我们可以从 G 和 D 得到的所有可能的对函数近似 f。S 将是那些函数的子集,我们将约束这些函数以使训练更好(某种正则化)。排序自然来自计算的损失函数。基于上述,我们最终可以看到测量两个分布 Pr 和 Pθ 之间距离的 Wasserstein 损失函数。

取自 theaisummer.com https://theaisummer.com/gan-computer-vision-incremental-training/

        严格的数学约束称为 K-Lipschitz 函数,用于获取子集 S。但是,如果数学得到广泛证明,则不需要了解更多。但是,我们如何引入这种约束呢?

解决这个问题的一种方法是大致近似这个约束,方法是训练一个神经网络,其权重位于一个紧凑的空间中。 为了实现这一目标,最简单的方法是将砝码夹紧到固定范围内。

        就是这样,重量剪辑可以按照我们想要的方式工作!因此,在每次梯度更新后,我们将w范围裁剪为[−0.01,0.01]。这样,我们就可以显著地强制执行 Lipschitz 约束。简单,但我可以向你保证它有效!

        事实上,有了这个距离损失函数,当然,它是连续的和可微的,我们现在可以用提出的准则训练D直到最优,而其他距离则饱和。饱和意味着鉴别器的损耗为零,生成的样本仅在某些情况下有意义。所以现在,饱和(自然导致模式崩溃)得到了缓解,我们可以在所有训练范围内使用更线性风格的梯度进行训练。让我们看一个例子来澄清这一点:

图片来自WGAN论文[https://arxiv.org/abs/1701.07875]
WGAN标准在空间的所有部分提供干净的梯度

        为了在实践中查看所有以前的数学,我们在 Pytorch 中提供了 WGAN 编码方案。您可以直接修改项目以包含此损失标准。通常,最好在实际代码中看到它。值得一提的是,要保存子集并取上限,这意味着我们必须取很多对。这就是为什么你会看到我们每隔几次训练生成器,以便鉴别器获得更新。这样,我们就有了定义上确界的集合。请注意,为了接近上确界,我们还可以在升级 D 之前为 G 做很多步骤。

        在后来的工作中,证明即使这个想法是可靠的,重量裁剪也是强制执行所需约束的糟糕方法。强制函数成为K-Lipschitz的另一种方法是梯度惩罚

关键思想是相同的:将重量保持在紧凑的空间内。然而,他们通过约束批评家输出相对于其输入的梯度范数来做到这一点。

        我们不会介绍本文,但为了用户的一致性和易于实验,我们提供了代码作为原版 wgan 的改进替代方案。

2.3 结果和讨论

        按照我们的简要描述,我们现在可以跳入一些结果。很高兴看到GAN在训练过程中如何学习,如下图所示:

图片来自WGAN论文[https://arxiv.org/abs/1701.07875]

DCGAN发电机的瓦瑟斯坦损耗准则。如您所见,损失迅速稳定地减少,而样品质量提高。这项工作被认为是GAN理论方面的基础,可以总结为:

        TL;RL

  • Wasserstein 准则允许我们训练 D 直到最优。当标准达到最佳值时,它只是为生成器提供损失,我们可以像任何其他神经网络一样训练该生成器。
  • 我们不再需要正确平衡 G 和 D 容量。
  • Wasserstein损失导致训练G的梯度质量更高。
  • 据观察,WGAN在生成器和超参数调优的架构选择方面比普通GAN更健壮

        的确,我们确实提高了优化过程的稳定性。但是,没有什么是零成本的。WGAN训练在基于动量的优化器(如Adam)以及高学习率下变得不稳定。这是合理的,因为标准损失是高度非平稳的,因此基于动量的优化器似乎表现得更差。这就是他们使用RMSProp的原因,众所周知,RMSProp在非平稳问题上表现良好。

        最后,理解本文的一种直观方法是对层内激活函数的历史进行梯度类比。具体来说,sigmoid 和 tanh 激活的梯度消失了,取而代之的是 ReLU,因为整个值范围内的梯度有所改善。

三、开始(边界均衡生成对抗网络2017)

        我们经常看到判别器在训练开始时进步太快。尽管如此,平衡鉴别器和生成器的收敛性仍然是一个现有的挑战。

        这是第一部能够控制图像多样性和视觉质量之间权衡的工作。用简单的模型架构和标准的训练方案获取高分辨率图像。

        为了实现这一点,作者引入了一个技巧来平衡生成器和鉴别器的训练。BEGIND的核心思想是这种新实施的均衡,它与描述的Wasserstein距离相结合。为此,他们训练了一个基于自动编码器的鉴别器。有趣的是,由于D现在是一个自动编码器,它产生图像作为输出,而不是标量。在我们继续之前,让我们记住这一点!

        正如我们所看到的,匹配误差的分布而不是直接匹配样本的分布更有效。关键的一点是,这项工作旨在优化自动编码器损失分布之间的Wasserstein距离,而不是样本分布之间的Wasserstein距离。BEGIND的一个优点是它没有明确要求判别器受到K-Lipschitz约束。自动编码器通常使用 L1 或 L2 范数进行训练。

3.1 两人博弈均衡的表述

        为了用博弈论来表达这个问题,增加了一个平衡判别器和生成器的均衡项。假设我们可以理想地生成无法区分的样本。然后,它们的误差分布应该是相同的,包括它们的预期误差,这是我们在处理每批后测量的误差。完全平衡的训练将导致 L(x) 和 L(G(z) 的预期值相等。然而,事实并非如此!因此,BEGIN决定量化余额比率,定义为:

图片由作者提供,最初用Latex编写

        此数量在网络中建模为超参数。因此,新的训练方案涉及两个相互竞争的目标:a)自动编码真实图像和b)区分

        从生成的图像中真实。γ术语让我们平衡这两个目标。较低的γ值会导致较低的图像多样性,因为鉴别器更侧重于自动编码真实图像。但是,当预期损失发生变化时,如何控制此超参数呢?

3.2 边界平衡GAN(开始)

        答案很简单:我们只需要引入另一个落在 [0, 1] 范围内的变量 kt。此变量将设计用于控制训练期间放在 L(G(z)) 上的焦点。

图片由作者提供,最初用Latex编写

 

        它初始化为 k0 = 0,λ_k在本研究中也被定义为 k 的比例增益(使用 0.001)。这可以看作是闭环反馈控制的一种形式,其中kt在每一步都进行调整,以保持所选超参数γ所需的平衡。

        请注意,在早期训练阶段,G 倾向于为 D 生成易于重建的数据。同时,尚未准确学习真实的数据分布。基本上,L(x)>L(G(z))。与许多 GAN 相反,BEGIN 不需要预训练,可以使用 Adam 进行优化。最后,利用均衡概念推导出收敛的全局度量。

        从本质上讲,可以将收敛过程表述为找到 a) 最接近的重建 L(x) 和 b) 控制算法的最低绝对值 ||γ L(x)−L(G(z)) ||.加上这两个术语,我们可以识别网络何时收敛。

3.3 模型体系结构

        模型架构非常简单。一个主要区别是引入了指数线性单位而不是 ReLU。他们使用带有深度编码器和解码器的自动编码器。超参数化旨在避免典型的GAN训练技巧。

图片来自 BEGIN [https://arxiv.org/abs/1703.10717] 论文。模型体系结构
模型体系结构

使用 U 形架构,无需跳跃连接。下采样实现为子采样卷积,内核为 3,步幅为 2。另一方面,上采样是通过最近邻插值完成的。在编码器和解码器之间,处理数据的张量通过全连接层映射,之后没有任何非线性。

3.4 结果和讨论

在下面的 128x128 插值图像中可以看到一些呈现的视觉结果:

图片来源:BEGAN[https://arxiv.org/abs/1703.10717] .由 BEGIN 生成的插值 128x128 图像

图片来源:BEGAN[https://arxiv.org/abs/1703.10717] .由 BEGIN 生成的插值 128x128 图像

值得注意的是,观察到多样性随着γ而增加,但伪像(噪点)也是如此。可以看出,插值显示出良好的连续性。在第一行,头发过渡和发型被改变。还值得注意的是,左图中的某些特征消失了(香烟)。第二行和最后一行显示简单的旋转。虽然旋转很平稳,但我们可以看到个人资料图片并没有完美捕获。

最后,使用BEGIND平衡方法,网络收敛到多样化且视觉上令人愉悦的图像。在 128x128 分辨率下,只需稍作修改,情况仍然如此。训练稳定、快速,并且对微小的参数变化具有鲁棒性。

但是让我们看看在真正的高分辨率下会发生什么!

四、渐进式 GAN(GANs 的渐进增长以提高质量、稳定性和变化 2017)

        到目前为止,我们描述的方法会产生清晰的图像。但是,它们仅以相对较小的分辨率和有限的变化生成图像。分辨率保持较低的原因之一是训练不稳定。如果您已经部署了自己的GAN模型,您可能知道,由于计算空间的复杂性,大分辨率需要较小的小批量。这样,时间复杂度的问题也随之上升,这意味着你需要几天的时间来训练一个GAN。

4.1 增量增长架构

        为了解决这些问题,作者逐渐增加了生成器和鉴别器,从低分辨率图像到高分辨率图像。

直觉是,随着训练的进行,新添加的层旨在捕获与高分辨率图像相对应的更高频率的细节

但是,是什么让这种方法如此出色呢?

答案很简单:模型不必同时学习所有尺度,而是首先发现大规模(全局)结构,然后发现局部细粒度细节。增量训练性质旨在朝这个方向发展。需要注意的是,在整个训练过程中,所有层都是可训练的,并且网络架构是对称的(镜像)。所述体系结构的图示如下所示:

图片来自 GAN 论文的渐进增长 [https://arxiv.org/abs/1710.10196]

图片来自 GAN 论文的渐进增长 [https://arxiv.org/abs/1710.10196]

然而,由于不健康的竞争,模式崩溃仍然存在,这增加了GD中误差信号的大小。

4.2 在过渡之间引入平滑层

这项工作的关键创新是新增加的层数平稳过渡以稳定训练。但是每次过渡后会发生什么?

图片来自 GAN 论文的渐进增长,链接:https://arxiv.org/abs/1710.10196
图片来自 GAN 论文的渐进式增长

图片来自 GAN 论文的渐进式增长,链接:https://arxiv.org/abs/1710.10196

        真正发生的事情是图像分辨率翻了一番。因此,在 G 和 D 上添加了一个新层。这就是魔术发生的地方。在过渡期间,以更高分辨率运行的层被用作残差跳跃连接块,其权重 (α) 从 0 线性增加到 1。一个表示跳过连接被丢弃。

        所描绘的 toRGB 块表示将一维特征向量投影并重塑为 RGB 颜色的层。它可以被视为始终使图像具有正确形状的连接层。同时,fromRGB 执行相反的操作,而两者都使用 1 × 1 卷积。真实图像相应地缩小以匹配当前尺寸。

有趣的是,在过渡期间,作者在真实图像的两种分辨率之间进行插值,类似于类似GAN的学习。此外,对于渐进式 GAN,大多数迭代都是以较低的分辨率执行的,导致 2 到 6 个列车加速。因此,这是第一部达到百万像素分辨率的作品,即 1024x1024

与遇到协方差偏移的下游任务不同,GAN 表现出不断增加的误差信号幅度和竞争问题。为了解决这些问题,他们使用正态分布初始化和每层权重归一化,通过每批动态计算的标量。这被认为可以使模型学习尺度不变性。为了进一步约束信号幅度,它们还将像素特征向量归一化为生成器中的单位长度。这可以防止特征图的升级,同时不会显着恶化结果。随附的视频可能有助于理解设计选择。官方代码在TensorFlow中发布在这里。

4.3 DR:结果和讨论

        结果可以总结如下:

        1)网络容量的逐渐增加解释了融合性的改善。直观地说,现有层学习较低的比例,因此在过渡之后,引入的层的任务只是通过越来越小的比例效果来细化表示。

        2)渐进式增长的加速随着输出分辨率的提高而增加。这首次能够生成 1024x1024 的清晰图像。

        3)尽管实现这样的架构确实很困难,并且缺少许多培训细节(即何时进行过渡以及为什么过渡),但它仍然是我个人喜欢的令人难以置信的工作。

图片来自 GAN 的渐进增长,百万像素分辨率,链接:https://arxiv.org/abs/1710.10196

图片来自 GANs的渐进增长,百万像素分辨率,链接:https://arxiv.org/abs/1710.10196

4.4 结论

在这篇文章中,我们遇到了一些即使在今天也使用的最高级培训概念。我们专注于涵盖这些重要培训方面的原因是能够进一步介绍更高级的应用程序。如果你想从更多的博弈论角度看待GANs,我们强烈建议你观看Daskalakis的演讲。最后,对于我们的数学爱好者,这里有一篇精彩的文章,更详细地介绍了向 WGAN 的过渡。

总而言之,我们已经找到了几种通过增量训练来处理模式崩溃、大规模数据集和百万像素分辨率的方法。对于整个文章系列,请随时访问AI之夏。

五、引用

[1] Arjovsky, M., Chintala, S., & Bottou, L. (2017).瓦瑟斯坦甘。arXiv预印本arXiv:1701.07875

[2] Berthelot, D., Schumm, T., & Metz, L. (2017).开始:边界均衡生成对抗网络。arXiv预印本arXiv:1703.10717

[3] Karras, T., Aila, T., Laine, S., & Lehtinen, J. (2017).逐步生长甘氏,以提高质量、稳定性和变化。arXiv预印本arXiv:1710.10196

[4] Daskalakis, C., Ilyas, A., Syrgkanis, V., & Zeng, H. (2017).训练人乐观。arXiv预印本arXiv:1711.00141

[5] Gulrajani, I., Ahmed, F., Arjovsky, M., Dumoulin, V., & Courville, A. C. (2017).改进了瓦瑟斯坦甘斯的训练。神经信息处理系统进展(第5767-5777页)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_337166.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element时间选择器的默认值

概览:vue使用element组件,需要给时间选择器设置默认值,场景一:默认时间选择器,场景二:时间范围选择器,开始时间和结束时间。 一、默认时间选择器 实现思路: element组件的v-model绑…

DevOps-Jenkins

Jenkins Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 官网 应用场景 场景一 研发人员上传开发好的代码到github代码仓库需要将代码下载nginx服务器部署手动下载再…

数值线性代数:奇异值分解SVD

本文记录计算矩阵奇异值分解SVD的原理与流程。 注1:限于研究水平,分析难免不当,欢迎批评指正。 零、预修 0.1 矩阵的奇异值 设列满秩矩阵,若的特征值为,则称为矩阵的奇异值。 0.2 SVD(分解)定理 设,则…

Open3D-ML自动驾驶点云目标检测与分割入门

当开始新的研究时,我的方法通常是测试不同的相关事物,直到有足够的经验让我开始将这些点联系起来。 在开始构建用于 3D 对象检测的自定义模型之前,我购买了一台 LiDAR 并处理了一些数据。 下一个明显的步骤是在我为自己的数据贴标签之前找出研…

SpringCloudAlibaba之Ribbon

Ribbon是nacos自带的负载均衡器,属于客户端的负载均衡 但是在Spring高级版本中让LoadBalancer替代了 本人用的是2.1.0的nacos,ribbon还没有被替换。 使用: 在配置类中:LoadBalanced BeanLoadBalancedpublic RestTemplate restT…

ChatGPT长文本对话输入方法

ChatGPT PROMPTs Splitter 是一个开源工具,旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示,并根据如何处理所有块接收到 ChatGPT(或其他具有字符限制的语言模型)的方法。 推荐:用 NSDT设计器 快速搭建可…

【FPGA IP系列】FIFO的通俗理解

FPGA厂商提供了丰富的IP核,基础性IP核都是可以直接免费调用的,比如FIFO、RAM等等。 本文主要介绍FIFO的一些基础知识,帮助大家能够理解FIFO的基础概念。 一、FIFO介绍 FIFO全称是First In First Out,即先进先出。 FIFO是一个数…

怎么选择合适的微信管理系统?

稳定好用的网页版微信CRM系统,随时随地可以登录,不用安排插件软件,不限制手机和电脑使用,电脑手机关机消息都是实时同步的 还有很多功能: 1、聚合聊天:支持多个微信号登录到系统上,一个页面就可…

WIZnet W51000S-EVB-PICO 入门教程(一)

概述 W5100S-EVB-Pico是基于树莓派RP2040和全硬件TCP/IP协议栈控制器W5100S的微控制器开发板-基本上与树莓派Pico板相同,但通过W5100S芯片增加了以太网功能。 W5100S-EVB-Pico特点 RP2040规格参数 双核Arm Cortex-M0 133MHz264KB 高速SRAM和2MB板载内存通过…

【计算机视觉中的 GAN 】 - 生成学习简介(1)

一、说明 在阅读本文之前,强烈建议先阅读预备知识,否则缺乏必要的推理基础。本文是相同理论GAN原理的具体化范例,阅读后有两个好处:1 巩固了已经建立的GAN基本概念 2 对具体应用的过程和套路进行常识学习,这种练习题一…

RocketMQ概论

目录 前言: 1.概述 2.下载安装、集群搭建 3.消息模型 4.如何保证吞吐量 4.1.消息存储 4.1.1顺序读写 4.1.2.异步刷盘 4.1.3.零拷贝 4.2.网络传输 前言: RocketMQ的代码示例在安装目录下有全套详细demo,所以本文不侧重于讲API这种死…

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码。提供了简单轻量化的部署方式和详细的四种刷题模式教程。该应用使用JSON作为题库的存储方式,层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用,方便将题库从word格式转换为…

抖音seo短视频账号矩阵系统技术开发简述

说明:本开发文档适用于抖音seo源码开发,抖音矩阵系统开发,短视频seo源码开发,短视频矩阵系统源码开发 一、 抖音seo短视频矩阵系统开发包括 抖音seo短视频账号矩阵系统的技术开发主要包括以下几个方面: 1.前端界面设…

SpringBoot的三层架构以及IOCDI

目录 一、IOC&DI入门 二、三层架构 数据库访问层 业务逻辑层 控制层 一、IOC&DI入门 在软件开发中,IOC(Inversion of Control)和DI(Dependency Injection)是密切相关的概念。 IOC(控制反转&a…

【每日一题】141. 环形链表

【每日一题】141. 环形链表 【每日一题】141. 环形链表题目描述解题思路 【每日一题】141. 环形链表 题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环…

37 coredump 的生成和使用

前言 呵呵 coredump 之前对于我而言也是一个挺陌生的概念 但是 只从开始了 linux 的相关学习之后, 对于这个 概念也有了一些 理解 呵呵 这里 以一些 简单的例子 来看一下 coredump 的生成和使用 首先执行 "ulimit -c unlimited" 测试用例1 - 除数为 0 root…

【TypeScript】TS入门级基础学习(一)

【TypeScript】TS入门级基础学习(一) 一、前言 TypeScript 是一种用于应用程序规模的 JavaScript 语言。 TypeScript 向 JavaScript 添加了可选类型,支持用于任何浏览器、任何主机、任何操作系统的大规模 JavaScript 应用程序的工具。 Type…

Spark(37):Streaming DataFrame 和 Streaming DataSet 创建

目录 0. 相关文章链接 1. 概述 2. socket source 3. file source 3.1. 读取普通文件夹内的文件 3.2. 读取自动分区的文件夹内的文件 4. kafka source 4.1. 导入依赖 4.2. 以 Streaming 模式创建 Kafka 工作流 4.3. 通过 Batch 模式创建 Kafka 工作流 5. Rate Source…

2023牛客暑期多校-J-Qu‘est-ce Que C‘est?(DP)

题意: 给定长度为n的数列,要求每个数都在的范围,且任意长度大于等于2的区间和都大于等于0,问方案数。。 思路: 首先要看出是dp题,用来表示遍历到第i位且后缀和最小为x的可行方案数(此时的后缀可以只有最…

Java 版 spring cloud +spring boot 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…