专栏首页Python编程和深度学习GAN生成对抗网络入门介绍

GAN生成对抗网络入门介绍

GAN生成对抗网络入门介绍

GAN(Generative Adversarial Network)生成对抗网络,由Ian Goodfellow在2014年提出。

论文:GAN: Goodfellow, Ian, et al. "Generative adversarial nets." Advances in Neural Information Processing Systems. 2014.

论文地址:https://arxiv.org/pdf/1406.2661.pdf。 一、基本概念:

GAN的思想来自零和博弈理论,由两个部分组成,一个是生成器Generator,随机接收一个随机噪声来生成图像。一个是鉴别器Discriminator,判断一张图像是不是“真实的”,输入是一张图像,输出是该图像为真实图像的概率,介于0-1之间,概率值越小认为生成图像不真实的可能性越大。 1、原理 生成器的目标是通过生成接近真实的图像来欺骗判别器,而判别器的目标是尽量辨别出生成器生成的假图像和真实图像的区别。生成器希望假图像更逼真判别概率高而判别器希望假图像再逼真也可以判别概率低,通过这样的动态博弈过程,最终达到纳什均衡点,通过深度神经网络训练完成之后,生成器可以从一段随机数中生成逼真的图像。

大自然里就存在很多生成对抗的例子,如下图,在生物进化的过程中,被捕食者会慢慢演化自己的特征,从而达到欺骗捕食者的目的,而捕食者也会根据情况调整自己对被捕食者的识别,共同进化,上图中的啵啵鸟和枯叶蝶就是这样的一种关系。生成器代表的是枯叶蝶,鉴别器代表的是啵啵鸟。它们的对抗思想与GAN类似,但GAN却有所不同。

下图就是基于卡通头像的生成器与判别器之间的对抗示意图。生成器通过学习尽可能生成接近真实的卡通头像来骗过判别器,而判别器通过学习尽可能识别出哪个是真实图像哪个是生成器生成的假图像。

我们所熟知的自编码器(Auto-Encoder)以及变分自编码器(Variational Auto-Encoder)都是典型的生成器。输入通过Encoder编码成code,然后code通过Decoder重建原图,其中自编码器中的Decoder就是生成器,code可随机取值,产生不同的输出。 自编码器是一种能够通过无监督学习,对输入数据进行特征提取,学习到数据的抽象表示,称为编码过程,编码结果往往维度远小于输入数据,自编码器可以用于降维和特征提取,结构如下,

变分自编码器(Variational auto-encoder,VAE)是一类重要的生成模型(generative model),它于2013年由Diederik P.Kingma和Max Welling提出,是自动编码器的升级版,结构如下

生成器和判别器都可以自我训练,但生成器自我训练产生的图像是模糊的,无法产生逼近真实图像的假图像,如下:

而判别器也可以自我训练,给定一个输入图像,输出一个概率置信度,介于0-1之间,如下:

2、目标函数 GAN的目标函数是:

Data是真实数据(groundtruth),Pdata是真实数据的分布,z是随机噪音(输入数据),Pz是原始噪音的分布,Pg是经过生成器生成数据的数据分布,G()是生成映射函数,D()是判别映射函数。从判别器 D的角度看,它希望自己能尽可能区分原始真实样本和生成的假样本,因此希望 D(x) 尽可能大,D(G(z)) 尽可能小, 即 V(D,G) 尽可能大。从生成器 G 的角度看,它希望生成的假数据尽可能骗过判别器D,也就是希望D(G(z)) 尽可能大,即 V(D,G)尽可能小。两个模型相对抗,最后达到全局最优。 对于原始数据来说,判别输入样本是否来自原始数据的损失函数为

最大化这一项相当于令判别器D在输入服从原始数据data时概率值为1。 对于生成数据来说,判别输入样本是否来自生成器的损失函数为

对于判别器D而言,判别器要更强大,识别能力更强,而对于生成器G来说,又希望生成的数据很逼真,使得判别器D很小,即在给定 G 的情况下先最大化 V(D,G) 而取 D,然后固定 D,并最小化 V(D,G)而得到 G。其中,给定 G,最大化 V(D,G) 评估了 Pg 和 Pdata之间的差异或距离。

上图中黑色曲线为真实样本,绿色曲线为生成的假样本,蓝色曲线为判别器的输出,面对真实样本判别器的输出较大,面对虚假样本判别器的输出较小。

二、GAN的训练过程 GAN的训练流程如下: 1、 初始化参数 2、开始迭代: 1)先固定生成器的参数,训练判别器,使得判别器学会给真实图像高概率值,给生成的假图像低概率值; 2)固定判别器的参数,训练生成器,使得生成器学会生成逼近真实的假图像,使得判别器尽量得到高概率值; 3、重复迭代过程

更详细的实践过程如下:

GAN最大的缺点是作为一种隐变量模型,它难以被解释,结果也难以被量化(生成结果的好不好往往要靠人类去直观感受),而且GAN的训练也难于其他神经网络。 下图展示了生成器和判别器的优缺点

可以看出生成器和判别器的优缺点是可以互补的,GAN通过生成器和判别器联合训练,利用生成器生成样本求解最大化问题,又通过判别器得到全局性,这使得GAN产生了很大的优势。 训练GAN的一些技巧:

  1. 输入规范化到(-1,1)之间,最后一层的激活函数使用tanh(BEGAN除外)
  2. 使用wassertein GAN的损失函数,
  3. 如果有标签数据的话,尽量使用标签,也有人提出使用反转标签效果很好,另外使用标签平滑,单边标签平滑或者双边标签平滑
  4. 使用mini-batch norm, 如果不用batch norm 可以使用instance norm 或者weight norm
  5. 避免使用RELU和pooling层,减少稀疏梯度的可能性,可以使用leakrelu激活函数
  6. 优化器尽量选择ADAM,学习率不要设置太大,初始1e-4可以参考,另外可以随着训练进行不断缩小学习率,
  7. 给D的网络层增加高斯噪声,相当于是一种正则

参考: https://www.cnblogs.com/fydeblog/p/9439024.html https://zhuanlan.zhihu.com/p/61453233 https://blog.csdn.net/stalbo/article/details/79283399

本文分享自微信公众号 - Python编程和深度学习(Python_Deeplearning),作者:Python编程和深度学习

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GAN的发展系列二(PGGAN、SinGAN)

    在前面的文章里我们已经介绍了GAN生成对抗网络的入门和一些GAN系列,在之后的专辑里会继续介绍一些比较经典的GAN。

    Minerva
  • 数字图像处理灰度变换之对数变换、伽马变换及python实现

    其中,c是一个常数,对数变换,将源图像中范围较窄的低灰度值映射到范围较宽的灰度区间,同时将范围较宽的高灰度值区间映射为较窄的灰度区间,从而扩展了暗像素的值,压缩...

    Minerva
  • GAN的发展系列四(Pix2Pix、CycleGAN)

    一、 Pix2pix 论文:《Image-to-Image Translation with Conditional Adversarial Networks》...

    Minerva
  • 塔荐 | 关于GAN原理与应用的入门介绍

    导读:生成对抗网络(GAN)是一类在无监督学习中使用的神经网络,其有助于解决按文本生成图像、提高图片分辨率、药物匹配、检索特定模式的图片等任务。Statsbot...

    灯塔大数据
  • 深入浅出介绍:GAN的基本原理与入门应用!

    如果你觉得好的话,不妨分享到朋友圈。 摘要:生成对抗网络(GAN)是一类在无监督学习中使用的神经网络,其有助于解决按文本生成图像、提高图片分辨率、药物匹配、检索...

    IT派
  • 深入浅出:GAN原理与应用入门介绍

    选自StatsBot 作者:Anton Karazeev 机器之心编译 参与:乾树、黄小天 生成对抗网络(GAN)是一类在无监督学习中使用的神经网络,其有助于解...

    机器之心
  • 生成对抗网络(Generative Adversarial Networks)

    传统的生成指的是生成图像数据,生成有两种策略,一种是直接估计概率密度函数,机器学习模型分为两类一类是判别式模型,一类是生成式模型,生成模型是基于联合概率,判别性...

    于小勇
  • 深兰科技方博士生成式对抗网络GAN研究:数学上如何理解把目标优化到“一半好”?

    今天我们来聊一聊一个比较有趣的话题,那就是近年来在人工智能深度学习领域的热点--生成式对抗网络(GAN)。

    AI科技讯
  • 人有多大胆,GAN有多高产 | AI创作利器演变全过程

    GAN诞生在2014年,Ian Goodfellow和他的同事发表了名为生成性对抗网络Generative Adversarial Nets的论文。

    量子位
  • 人有多大胆,GAN有多高产 | AI创作利器演变全过程

    GAN诞生在2014年,Ian Goodfellow和他的同事发表了名为生成性对抗网络Generative Adversarial Nets的论文。

    OpenCV学堂

扫码关注云+社区

领取腾讯云代金券