首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文读懂生成对抗网络GANs

一文读懂生成对抗网络GANs

作者头像
数据派THU
发布于 2018-03-22 09:20:35
发布于 2018-03-22 09:20:35
1.4K0
举报
文章被收录于专栏:数据派THU数据派THU
原文标题:AnIntuitive Introduction to Generative Adversarial Networks

作者:KeshavDhandhania、ArashDelijani

翻译:申利彬

校对:和中华

本文以图像生成问题引出GAN模型,并介绍了GAN模型的数学原理和训练过程,最后提供了丰富的GAN学习资料。

本文讨论生成对抗网络,简称GANs。在生成任务或更广泛的无监督学习中,GANs是为数不多在此领域表现较好的机器学习技术之一。特别是他们在图像生成相关任务上拥有出色表现。深度学习领域先驱Yann LeCun,称赞GAN是机器学习近十年来最好的想法。最重要的是,GAN相关核心概念很容易理解(事实上,读完本文后你就可以对它有个清晰的认识)。

我们将GANs应用在图像生成任务中,并以此来解释GANs,下面是本文的概要:

  • 简单回顾深度学习
  • 图像生成问题
  • 生成任务中的关键问题
  • 生成对抗网络
  • 挑战
  • 进一步阅读
  • 总结

简单回顾深度学习

(前馈)神经网络示意图,棕色为输入层,黄色为隐藏层,红色为输出层

我们先简单介绍一下深度学习。上图是神经网络示意图,它是由神经元组成,神经元之间通过边相互连接,而且神经元按层排列,中间为隐藏层,输入层和输出层分别在左右两侧。神经元之间的连接边都有权重,每一个神经元都会根据与其连接的神经元的输入值加权求和,然后带入非线性激活函数中计算,这类激活函数有Sigmoid和ReLU。例如,第一层隐藏层神经元对来自输入层神经元的值进行加权求和,然后再应用ReLU函数。激活函数引入了非线性,它使神经网络可以模拟复杂的现象(多个线性层等价于一个线性层)。

给一个特定的输入,我们依次计算每个神经元输出的值(也称为神经元的活性)。从左到右,我们利用前层计算好的值来逐层计算,最后得到输出层的值。然后根据输出层的值和期望值(目标值)定义一个损失函数,例如,均方误差损失函数。

其中,x是输入,h(x)是输出,y是目标值,总和包含数据集中所有数据点。

在每步中,我们的目标是以合适的数值优化每条边的权重,从而尽可能降低损失函数的大小。我们计算出梯度值,然后利用梯度具体优化每一个权重。当我们计算出损失函数值,就可以用反向传播算法计算梯度。反向传播算法的主要结果是:利用链式求导法则和后一层参数的梯度值来计算这层的梯度。然后,我们通过与各个梯度成比例的量(即梯度下降)来更新每个权重。

如果你想要进一步了解神经网络和反向传播算法的细节,我推荐你阅读Nikhil Buduma写的简单学习深度学习(Deep Learning in aNutshell)

http://nikhilbuduma.com/2014/12/29/deep-learning-in-a-nutshell/

图像生成问题

图像生成问题上,我们希望机器学习模型可以生成图像。为了训练模型,我们得到了一个图像数据集(比如从网络下载的1,000,000张图片)。在测试的时候,模型可以生成图像,这些图像看起来像属于训练集,但实际上并不是训练集中的图像。也就是说,我们想生成新的图像(与单纯地记忆相反),但仍然希望它能捕获训练数据集中的模式,从而使新的图像感觉与训练数据集相似。

图像生成问题:没有输入,所需的输出是一个图像

需要注意的一点是:在测试或预测阶段,这个问题没有输入。每次“运行模型”时,我们希望它生成(输出)一个新的图像。这可以说输入将从一个容易抽样的分布(例如均匀分布或高斯分布)中随机抽样而来。

生成任务中的关键问题

生成任务中的关键问题是:什么是一个好的损失函数?假如你有两张机器学习模型生成的图片,我们如何决定哪一个更好,好多少呢?

在以前的方法中,这个问题最常见的解决方案是计算输出图像和训练集中最邻近图像的距离,其中使用一些预定义的距离度量标准来计算距离。例如,在语言翻译任务中,我们通常有一个源语句和一个小的(约5个)目标句子集,也就是由不同翻译人员提供的译文。当模型生成一个译文,我们把译文与提供的目标句子比较,然后根据它距离哪个目标句子最近,分配一个相应的分数(特别是,我们是用BLEU分数,它是根据两个句子之间有多少个n-grams匹配的距离度量标准)。但这是一种单句子翻译方法,当目标是一个较大的文本时,同样的方法会使损失函数的质量严重恶化。例如,我们的任务可能是生成给定文章的段落摘要,那么这种恶化源于少量的样本无法代表在所有可能的正确答案中观察到的变化范围。

生成对抗网络

GAN针对上面问题的回答是:用另外一个神经网络---记分神经网络(称为判别器 Discriminator),它将评估生成神经网络输出的图像的真实性。这两个神经网络具有相反的目标(对抗),生成网络的目标是生成一个看起来真实的假图像,判别网络的目标是区分假图像和真实图像。

这将生成任务的设置类似于强化学习的双人游戏(如象棋,Atari games or 围棋),在强化学习中我们有一个从零开始通过自我对抗不断改进的机器学习模型 。象棋或者围棋这些游戏的对抗双方总是对称的(尽管并非总是如此),但对于GAN的设置,两个网络的目标和角色是不相同的。一个网络产生假的样本,而另一个网络区分真的和假的样本。

生成对抗网络的示意图,生成器网络标记为G,判别器网络标记为D

如上图所示,是生成对抗网络示意图。生成网络G和判别网络D在进行一场双方极大极小博弈。首先,为了更好地理解这种对抗机制,需要注意到判别网络(D)的输入可以是从训练集中抽样出的样本,也可以是生成网络(G)的输出,不过一般是50%来自训练集,剩余50%来自G。为了从G中生成样本,我们从高斯分布中提取潜在的向量并输入生成网络(G)。如果我们想生成200*200的灰度图像,那么生成网络(G)的输出应该是200*200的向量。下面给出目标函数,它是判别网络(D)做预测的标准对数似然函数。

生成网络(G)是最小化目标函数,也就是减小对数似然函数或是说“迷惑”判别网络(D)。也就是说,无论何时从生成网络(G)输出中抽取样本作为判别网络(D)的输入,都希望判别网络识别为真样本。判别网络(D)是要最大化目标函数,也就是要增大对数似然函数或者说是把真实样本和生成样本区分开。换句话说,如果生成网络(G)在“迷惑”判别网络(D)上效果很好,也就会通过增大公式第二项中D(G(z))来最小化目标函数。另外,如果判别网络(D)能很好地工作,那么在从训练数据中选择样本的情况下,会通过第一项(因为D(x)很大)增大目标函数,也会通过第二项减小它(因为D(x)很小)。

如同平常的训练过程一样,使用随机初始化和反向传播,此外,我们需要单独交替迭代更新生成器和判别器。下面是在特定问题上应用GANs的端到端的工作流程描述:

1. 决定GAN网络架构:G的架构是什么?D的架构是什么?

2. 训练:一定数量的交替更新

  • 更新D(固定G):一半样本是真的,另一半是假的
  • 更新G(固定D):生成所有样本(注意,即使D保持不变,梯度流还是会经过D)

3. 人工检查一些假样本,如果质量很高(或者质量没有提升)则停止,否则重复2。

当G和D都是前馈神经网络时,我们得到的结果如下(在MNIST数据集中训练)

来自Goodfellow et. Al,从训练集开始,最右边一列(黄色框内)图像与其紧邻左边一列的图像最接近。其它所有图像都是生成的样本

关于G和D我们可以使用更复杂的架构,例如使用跳格卷积(strided convolutional)和adam优化器来代替随机梯度下降。另外,还有其它一些方面的改进,例如优化架构,使用超参数和优化器(具体可参考论文)。改进后,我们得到了如下的结果:

卧室图片,来自Alec Radford et. Al

挑战

训练GANs最关键的挑战是有可能不收敛,有时这个问题也被称为模式崩溃(mode collapse)。举个例子,来简单解释这个问题。假设任务是生成数字图像,就像MNIST数据集中的一样。可能出现的问题(实践中确实出现)是生成器G开始生成数字6,而不能生成其它数字。一旦D适应G的当前行为,为了最大限度地提高分类的准确性,它开始把所有的数字6归为假,所有其它数字都是真实的(假设它不能分辨假的6和真实的6)。然后G又适应了D的当前行为,开始只生成数字8而不生成其它数字。然后D又适应,开始把数字8归为假,其它的都是真。接着G又开始只生成3,如此循环下去。基本上,生成器G仅生成与训练数据集的一个小的子集相似的图像,而一旦识别器D开始把这个小的子集与其余的区分开,生成器G又转换到另外的子集,它们将一直简单的来回震荡。虽然这个问题没有被完全解决,但还是有一些方法可以避免这个问题。这些方法涉及小批量特征(minibatch features)和多次更新D的反向传播。我们不再讨论这些方法的细节,如果要了解更多信息,请查看下一节中的建议阅读材料。

进一步阅读

如果你想更深一步了解GANs,我建议你阅读ICCV 2017 tutorials on GANs( https://sites.google.com/view/iccv-2017-gans/home),那里有很多最新的教程,并且它们对GANs的不同方面各有侧重。

我还想说一点关于条件GANs(Conditional GANs)的概念,条件GANs,是在输入的条件下产生输出。例如,任务可能是输出与输入描述相匹配的图像。所以,当你输入狗时,输出的应该是狗的图像。

下面是一些最近研究的成果(附论文链接)。

文本到图像合成( ‘Text to Image synthesis’)成果,作者Reed et. al

超分辨率图像(Image Super-resolution)成果,作者Ledig et. Al

图像到图像转换(Image to Image translation)成果,作者Isola et. Al

生成高分辨率名人相(Generating high resolution ‘celebritylike’ images),作者Karras et. Al

最后也是最重要的,如果你想阅读更多关于GANs资料,请查看这个按照GANs的应用分类的论文列表 :

https://github.com/zhangqianhui/AdversarialNetsPapers

100+GAN的变种论文清单:

https://deephunt.in/the-gan-zoo-79597dc8c347

总结

通过这篇文章,希望你可以理解深度学习领域中的一种新技术—生成对抗网络。它们是无监督机器学习中少数成功的技术,并且这种技术正在快速革新我们执行生成任务的能力。过去的几年中,我们发现了一些让人印象深刻的成果。GANs应用在语言任务中,提高语言任务的稳定性和训练的方便性,等等,也是研究的热点。GANs在工业中也被广泛应用,从交互式图像编辑、三维形状估计、药物发现、半监督学习到机器人技术。最后,我希望这篇文章是你对抗机器学习之旅的开始。

原文链接:http://blog.kaggle.com/2018/01/18/an-intuitive-introduction-to-generative-adversarial-networks/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[AI安全论文] 03.什么是生成对抗网络?GAN的前世今生(Goodfellow)
这篇文章我们将介绍一个热门且前沿的知识——生成对抗网络(GAN),通过Ian Goodfellow等大佬的论文和小象学院美团老师的介绍,详细讲解什么是生成对抗网络,及常用算法(CGAN、DCGAN、infoGAN、WGAN)、发展历程、预备知识,最后通过Keras搭建最简答的手写数字图片生成案例。真诚希望本文对您有所帮助!如果写得不好或错误的地方,还请海涵。不服就GAN,后续会学习和安全的融合,让我们开始吧~
Eastmount
2021/12/03
1.3K0
[AI安全论文] 03.什么是生成对抗网络?GAN的前世今生(Goodfellow)
探秘生成对抗网络(GAN):原理、应用与代码全知道
生成对抗网络(GAN)自提出以来在深度学习领域备受关注。其独特的对抗训练机制使其在图像生成、数据增强、风格迁移等众多领域展现强大能力。
羑悻的小杀马特.
2025/03/27
7600
生成对抗网络(GANs )诞生以来的主要技术进展
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 来源:雷锋网 两年前,蒙特利尔大学 Ian Goodfellow 等学者提出“生成对抗网络”(Generative Adversarial Networks,GANs)的概念,并逐渐引起 AI 业内人士的注意。其实,直到 2015 年,生成对抗网络还称不上是炙手可热。但自今年以来,学界、业界对 GANs 的兴趣出现“井喷”: 多篇重磅论文陆续发表; Facebook、Open AI 等
昱良
2018/04/08
7990
生成对抗网络(GANs )诞生以来的主要技术进展
生成对抗网络(GANs)总结
生成对抗网络(GANs)是一种深度学习模型,它由两部分组成:生成器(Generator)和判别器(Discriminator)。
double
2024/03/07
5090
生成对抗网络(GANs)总结
【深度学习】生成对抗网络(GANs)详解!
生成对抗网络(Generative Adversarial Networks)是一种无监督深度学习模型,用来通过计算机生成数据,由Ian J. Goodfellow等人于2014年提出。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。生成对抗网络被认为是当前最具前景、最具活跃度的模型之一,目前主要应用于样本数据生成、图像生成、图像修复、图像转换、文本生成等方向。
Twcat_tree
2023/10/26
10.4K0
【深度学习】生成对抗网络(GANs)详解!
生成对抗网络综述:从架构到训练技巧,看这篇论文就够了
选自arXiv 机器之心编译 参与:路雪、刘晓坤、蒋思源 近日,帝国理工学院、蒙特利尔大学等研究机构共同发表论文并梳理了生成对抗网络,该论文从最基本的 GAN 架构及其变体到训练过程和训练技巧全面概述了生成对抗网络的概念、问题和解决方案。机器之心简要介绍了该论文。 原 GAN(Goodfellow et al., 2014)的完整理论推导与 TensorFlow 实现请查看机器之心的 GitHub 项目与文章:GAN 完整理论推导与实现。下面,我们将为各位读者介绍该综述论文。 论文地址:https://ar
机器之心
2018/05/10
2.5K0
生成对抗网络(GANs)最新家谱:为你揭秘GANs的前世今生
作者:Guim Perarnau 编译:Katherine Hou、朝夕、Katrine Ren、Shan LIU、笪洁琼、钱天培 生成对抗网络(GAN)一经提出就风光无限,更是被Yann Lecun誉为“十年来机器学习领域最有趣的想法”。 GAN“左右互搏”的理念几乎众所周知,但正如卷积神经网络(CNN)一样,GAN发展至今已经衍生出了诸多变化形态。 今天,文摘菌就来为大家盘点一下GAN大家庭中各具特色的成员们。 他们的名单如下: 1.DCGANs 2.Improved DCGANs 3.Conditio
大数据文摘
2018/05/24
7240
GAN生成对抗网络入门介绍
GAN(Generative Adversarial Network)生成对抗网络,由Ian Goodfellow在2014年提出。
Minerva
2020/06/16
2.7K0
GAN生成对抗网络入门介绍
通俗理解生成对抗网络(GANs)【下载PDF | 长文】
GAN网络是近两年深度学习领域的新秀,火的不行,本文旨在浅显理解传统GAN,分享学习心得。现有GAN网络大多数代码实现使用Python、torch等语言,这里,后面用matlab搭建一个简单的GAN网络,便于理解GAN原理。
智能算法
2018/07/30
9820
通俗理解生成对抗网络(GANs)【下载PDF | 长文】
生成式对抗网络模型综述
原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不得转载,不能用于商业目的。
SIGAI学习与实践平台
2018/07/11
1.5K0
揭开GANs的神秘面纱
这篇文章中,作者通过将生成对抗网络(GANs,以下均简称GANs)运用到图片生成任务中向我们解释了其的原理。GANs是无监督学习中少有的成功的技术,一经提出,将生成任务推动到了新的高度上。在多样的图片生成任务中,GANs独领风骚。Yann LeCun(深度学习的先驱)将GANs称作“近十年以来机器学习中最优秀的想法”。最重要的是,在显著的性能的同时,GANs的核心思想又是那么地浅显易懂。本文在图片生成的任务重向读者们揭开了GANs的神秘面纱,以下是本文的主要内容:
昱良
2019/07/04
9990
学界丨生成对抗网络(GANs )为什么这么火?盘点它自 2014 年以来的主要技术进展
两年前,蒙特利尔大学 Ian Goodfellow 等学者提出“生成对抗网络”(Generative Adversarial Networks,GANs)的概念,并逐渐引起 AI 业内人士的注意。其实,直到 2015 年,生成对抗网络还称不上是炙手可热。但自今年(2016)以来,学界、业界对 GANs 的兴趣出现“井喷”: 多篇重磅论文陆续发表; Facebook、Open AI 等 AI 业界巨头也加入对 GANs 的研究; 它成为今年 12 月 NIPS 大会当之无愧的明星——在会议大纲中被提到逾
AI科技评论
2018/03/09
1.5K0
学界丨生成对抗网络(GANs )为什么这么火?盘点它自 2014 年以来的主要技术进展
深度学习进阶篇[9]:对抗生成网络GANs综述、代表变体模型、训练策略、GAN在计算机视觉应用和常见数据集介绍,以及前沿问题解决
生成模型:p(x) 即观测x出现的概率。如果有标签则表示为: p(x|y) 指定标签y生成x的概率。
汀丶人工智能
2023/06/01
3.1K0
深度学习进阶篇[9]:对抗生成网络GANs综述、代表变体模型、训练策略、GAN在计算机视觉应用和常见数据集介绍,以及前沿问题解决
GAN!生成对抗网络GAN全维度介绍与实战
生成对抗网络(GAN)是深度学习的一种创新架构,由Ian Goodfellow等人于2014年首次提出。其基本思想是通过两个神经网络,即生成器(Generator)和判别器(Discriminator),相互竞争来学习数据分布。
TechLead
2023/10/21
4K0
GAN!生成对抗网络GAN全维度介绍与实战
一文详解生成对抗网络(GAN)的原理,通俗易懂
‍‍ 作者 | 我i智能(ID:AInewworld) 来源 | 我i智能(CSDN博客) 前言 GAN网络是近两年深度学习领域的新秀,火的不行,本文旨在浅显理解传统GAN,分享学习心得。现有GAN网
用户1737318
2018/06/05
2.2K0
生成对抗网络(Generative Adversarial Networks)
传统的生成指的是生成图像数据,生成有两种策略,一种是直接估计概率密度函数,机器学习模型分为两类一类是判别式模型,一类是生成式模型,生成模型是基于联合概率,判别性模型基于条件概率,生成式模型判别的是一种共生关系,判别式判别的是一种因果关系。知己估计概率密度函数生成的是概率密度函数或者概率密度函数的参数。另一种是绕开直接估计概率密度函数,直接学习数据样本生成的过程,里面没有显式函数的学习。第一种方式比较直观,但有的情况下直接生成数据样本更合适,可以避开显式概率密度函数的估计和设计,直接达到目的。
狼啸风云
2019/12/20
10.1K0
生成对抗网络(Generative Adversarial Networks)
一文看尽深度学习中的生成对抗网络 | CVHub带你看一看GANs架构发展的8年
生成对抗网络 (Generative Adversarial Networks, GANs) 在过去几年中被广泛地研究,其在图像生成、图像转换和超分辨率等领域取得了显著的进步。到目前为止,已经提出了大量基于GANs的相关工作和综述。本文基于柏林圣三一大学计算机科学与统计学院的王正蔚博士与字节跳动AI实验室联合发表的一篇综述[1]为基础,详细的解读GANs的来龙去脉,同时为大家介绍近期一些相关工作,中间也会穿插一些笔者的见解。最后,本文也将列出一些可探索的未来研究方向,希望能给予读者一些启发。
AIWalker
2021/07/05
1.6K0
一文看尽深度学习中的生成对抗网络 | CVHub带你看一看GANs架构发展的8年
生成对抗网络-AI快速进阶系列
首先,我们将介绍术语生成模型及其分类法。然后,将描述GAN的架构和训练管道,并附有详细示例。最后,我们将讨论GAN的挑战和应用。
jack.yang
2025/04/05
900
生成对抗网络-AI快速进阶系列
【机器学习】--- 生成对抗网络 (GANs)
生成对抗网络(GANs, Generative Adversarial Networks)近年来在机器学习领域成为一个热点话题。自从Ian Goodfellow及其团队在2014年提出这一模型架构以来,GANs 在图像生成、数据增强、风格转换等领域取得了显著进展,并推动了深度学习在生成模型领域的快速发展。本文将详细讨论 GANs 的基础原理、应用场景、常见变体、以及在实际中如何实现 GAN 模型。
Undoom
2024/09/23
2130
走进深度生成模型:变分自动编码器(VAE)和生成对抗网络(GAN)
【导读】近日,深度学习爱好者Prakash Pandey发布一篇博文介绍深度生成模型。我们知道,有监督学习在很多方面都达到了很好的效果,但是,由于有监督学习由于数据集太少等缺点,研究者逐渐偏向于探索无
WZEARW
2018/04/13
5.2K0
走进深度生成模型:变分自动编码器(VAE)和生成对抗网络(GAN)
推荐阅读
相关推荐
[AI安全论文] 03.什么是生成对抗网络?GAN的前世今生(Goodfellow)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档