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

生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍

一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h

一、GAN原理介绍

学习GAN的第一篇论文当然由是 Ian Goodfellow 于2014年发表的 Generative Adversarial Networks(论文下载链接arxiv:[https://arxiv.org/abs/1406.2661] ),这篇论文可谓这个领域的开山之作。

GAN的基本原理其实并不复杂,模型通过框架中两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:

G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)
D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。

在训练过程中,生成网络G的目标就是尽可能生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。

最后博弈的结果,在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,即达到了一个纳什均衡,因此D(G(z)) = 0.5。此时,模型的收敛目标是生成器能够从随机噪声生成真实数据。

这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
以上只是大致说了一下GAN的核心原理,如何用数学语言描述呢?这里直接摘录论文里的公式:
生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
简单分析一下这个公式:

整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。

G的目的:上面提到过,D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。

D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小。这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)
下面这幅图片很好地描述了这个过程:
生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍

二、CGAN原理

在原始GAN中,目的是使得生成器能够从随机噪声中生成真实数据,而CGAN(论文下载链接arxiv:https://arxiv.org/pdf/1411.1784.pdf)则更近一层,即给GAN加上条件,指导数据的生成过程,使得生成具有特定性质的样本。以生成MNIST数据集的图像样本来说,原始GAN得到的生成器可以由随机向量生成一张含有数字的图像样本,其中数字可能是0~9中的任意一个,而CGAN则是在生成器输入时添加一个条件y,使得可以生成符合预期数字的图像样本,如生成含有数字1的图像。如图Figure1所示。价值函数变化如下:

生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍

三、DCGAN原理

DCGAN(论文下载链接arxiv:https://arxiv.org/abs/1511.06434 )是应用比较广泛的改进结构,基本采用卷积层替代了原始的全连接层,其中在生成器中采用带步长的卷积代替了上采样,极大地提升了GAN训练时的稳定性及生成结果质量。如图所示
GAN的主要问题是训练过程不稳定,而DCGAN改进了其稳定性,原因在于:

  1. 几乎每层都使用batchnorm层,将特征层的输出归一化到一起,加速训练,提升训练的稳定性;
  2. 判别器中使用Leaky ReLU,防止梯度过度稀疏,生成器则仍然采用 ReLU,但最后输出层采用Tanh;
  3. 使用Adam优化器训练,且最佳学习率为0.0002;
  4. 使用带步长卷积替代上采样层,卷积在提取图像特征上有较好的作用,并且使用卷积代替全连接层。
    生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍

四、WGAN原理

为了使得GAN的训练更加稳定,与DCGAN不同的是,WGAN(论文下载链接arxiv:https://arxiv.org/pdf/1701.07875.pdf)主要从损失函数的角度进行改进:

A)判别器最后一层去掉Sigmoid;
B)生成器和判别器的loss不取Log;
C)对更新后的权重强制clip,如[-0.01,0.01],以满足连续性条件;
D)推荐SGD、RMSProp等优化器,不要采用含有动量的优化算法,如Adam。

原始的GAN存在的问题有:判别器越好,生成器梯度消失越严重,生成器loss降不下去;判别器不好,生成器梯度不准,训练不稳定,只有判别器训练得不好不坏才行,但这个尺度很难把握,甚至同一轮训练的不同阶段该尺度都不一样,所以GAN才难以训练。最小化生成器loss函数,会等价于最小化一个不合理的距离度量,使得最小化生成分布与真实分布的KL散度的同时又要最大化两者的JS散度,导致梯度不稳定,同时也会使得生成器宁可多生成一些重复但较为“安全”的样本,也不愿意生成多样性的样本,从而导致模式崩溃,即多样性不足。

下图所示为标准GAN与WGAN对真实样本分布和生成样本分布判别的差异,标注GAN会出现梯度消失的情况,而WGAN则有较好的线性梯度。
生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
要在于从理论上给出了GAN训练不稳定的原因,即交叉熵不适合衡量具有不相交部分的数据之间的距离,转而使用Wassertein距离去衡量生成数据与真实数据之间的距离,理论上解决了训练不稳定的问题;解决了模式崩溃问题,生成结果更加多样;对GAN的训练提供了一个指标,可以采用此指标来衡量GAN训练的好坏,而不像之前那样盲目训练。

五、LSGAN原理

LSGAN(论文下载链接arxiv:https://arxiv.org/pdf/1611.04076.pdf)的主要目的也是采用最小二乘损失函数代替了GAN目标函数的交叉熵,从而解决了GAN训练不稳定和生成图像质量差、多样性不足的问题。
生成对抗式网络 GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
其中a,b,c属于超参数,a,b分别表示生成图片和真实图片的标记,c是生成器为了使判别器认为生成图片为真实样本而定的值,这里设定a=0,b=c=1。

论文主要回答了两个问题:为什么最小二乘损失可以提高生成图片质量;为什么最小二乘损失可以使得GAN训练更稳定。对于第一个问题,论文认为交叉熵作为损失函数,会使得生成器不再优化那些被判别器识别为真实图片的生成图片,即使这些生成图片距离判别器的决策边界仍较远。原因在于生成器只需要完成混淆判别器的目标生成图片即可,而最小二乘损失则在混淆判别器的前提下还得让生成器把距离决策边界较远的生成图片拉向决策边界。对于第二个问题,论文认为Sigmoid交叉熵损失容易达到饱和状态,即梯度为0,而最小二乘只在一个点达到饱和。

六、BEGAN原理

谷歌提出一种新的简单强大的GAN,这是一种新的评价生成器生成质量的方法,不需要太多的训练技巧即可实现快速稳定的训练。以往的GAN及其变体是希望生成器生成的数据分布尽可能地接近真实数据分布,因此研究者们设计了各种损失函数,而BEGAN则不采用这种估计概率分布的方法,即不直接去估计生成分布Pg和真实分布Pdata的差距,而是估计分布的误差分布差距,只要分布之间的误差分布相近,也可以认为这些分布是相近的。

BEGAN主要有3个贡献:

(1)提出了一种新的简单强大的GAN网络结构,使用标准的训练方式也能快速稳定的收敛。
(2)对于生成器和判别器的平衡提出了一种均衡的概念,提供了一个超参数,这个超参数用于平衡图像的多样性和生成质量。
(3)受WGAN启发,提出了一种收敛程度估计。

BEGAN采用自编码器作为判别器;在生成器的设计上,使用Wasserstein距离衍生出的损失去匹配自编码器的损失分布,这是通过传统的GAN目标加上一个用来平衡判别器和生成器的平衡项来实现的;还提出了一个衡量生成样本多样性的超参数Y:生成样本损失的期望与真实样本损失的期望值之比。Y值较低时会导致图像多样性较差,因为此时判别器过于关注对真实图像的自编码。


推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • DCG 创始人兼首席执行官 Barry Silbert 发布致股东信,详细解答了 19 个核心问题,并分享了公司未来的发展方向。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
author-avatar
你的拥吻像情歌一样凄美_207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有