生成对抗网络入门指南(内含资源和代码)

简介: 生成对抗网络是由两个相互竞争的网络组成的深度神经网络架构。本文对其进行详细讲解,并附上大量相关英文文章链接供参考。

生成对抗网络(GAN)是由两个相互竞争的网络组成的深度神经网络架构。

2014年,Lan Goodfellow和蒙特利尔大学包括Yoshua Bengio在内的其它研究人员在论文中介绍了生成对抗网络。Facebook的AI研究主管Yann LeCun称对抗训练是“近10年来最有趣的机器学习(ML)”

生成对抗网络具有很大的潜力,因为它们可以学习模拟任何数据的分布。换句话说,在任何领域,我们都可以教生成对抗网络创造出与我们类似的世界:图像,音乐,演说,散文。从某种意义上来说,它们是机器人艺术家,能够创造出令人印象深刻甚至是伤感的东西。

生成算法判别算法

为了理解生成对抗网络,首先应该了解生成算法的是如何工作的,为此,现将生成算法和判别算法进行对比以便更好的理解。判别算法试图对输入数据进行分类:即给定一个数据实例的特征,来预测该数据所属的标注或类别。

例如:给定一封电子邮件的所有单词,判别算法能够预测该邮件是否为垃圾邮件。垃圾邮件是其中的一种标注,从邮件中收集到的单词则构成了输入数据的特征。用数学表达式表述这一问题,y表示标注,x表示特征,公式p(y|x)表示“给定x,y的概率”,则该事件可描述为“给定邮件中所包含的单词,邮件为垃圾邮件的概率”。因此,判别算法将特征映射到标注,只关注二者之间的相关性。

一种理解生成算法的方式是,生成算法做相反的事情。生成算法并不预测给定特征的标注,而是试图预测给定标注的特征。

生成算法试图解决的问题是:假设这封电子邮件为垃圾邮件,它的特征可能是什么?判别模型关注y和x之间的关系,而生成模型关注的是如何得到x。这允许你得到p(x|y),即给定y,x的概率或给定一个类,特征的概率。(也就是说,生成算法可用作分类器,只不过它不仅仅只是对输入数据进行分类)。

另一种区分判别模型和生成模型的理解方式是:判别模型学习类间的边界,而生成模型模拟各个类的分布。

生成对抗网络是如何运行的?

    生成器,是一个用来生成新的数据实例的神经网络;判别器,则是用来评估其真实性的神经网络。即判别器决定它所检验的每个数据实例是否属于实际的训练数据集。

    比方说,我们试图做一些比仿制蒙娜丽莎更平庸的工作。我们从现实世界中获取并生成那些类似MINST数据集中发现的手写数字,当显示来自真实MINST数据集中的实例时,判别器将其识别为可信。

    同时,生成器创建传送给判别器的新图像。即便这是假的,我们也视为将其视为真。生成器的目标是生成像样的手写数字,假装不会被发现。判别器的目标是识别生成器中的图像是假的。

    生成对抗网络的运行步骤如下:

1.生成器输入一系列随机数字并返回一张图像。

2.将生成的图像和真实数据集中的图像流一起送入判别器。

3.判别器接受真实图像和假图像,并返回概率值,范围是0~1之间的数字,其中1表示真实性的预测,0表示假的预测。

    因此,得到一个双反馈回路:判别器在包含图像真相的反馈回路中发生器在在判别器的反馈回路中。

 

    你可以将生成对抗网络想象成一个伪造者和一个警察在猫和老鼠游戏中的组合,在这里,伪造者正在学习虚假注释,警察正在学习检测他们。二者都是动态的,也就是说警察也在训练中,并且每一方都在不断升级中学习对方的方法。

    判别器网络是一个可对输入图像进行分类的标准卷积网络——将图像标记为真或假的一个二值分类器。从某种意义上来说,生成器是一个反向卷积网络:标准卷积分类器获取一张图像,采样并输出概率,而生成器则获取随机噪声矢量并将其上采样到一张图像中。前者使用maxpooling这样的下采样技术扔掉数据,后者生成新的数据。

    两个网络都试图在零和博奕中优化一个不同且对立的目标函数,或者是损失函数。它本质上就是一个演员-评论模型。随着判别器改变行为,生成器也随之改变,反之亦然。他们的损耗也相互抗衡。

生成对抗网络自动编码器和变分自编码器(VAE

    自动编码器将输入数据编码为矢量,创建一个隐藏或压缩的原始数据representation,主要用于降维。也就是说,用作隐藏representation的矢量将原始数据压缩为一个较小的主要纬度。自动编码器可以和解码器配对,可根据其隐藏representation重建输入数据,这和受限玻尔兹曼机相同。


    变分自编码器是生成算法,在对输入数据编码的过程中增加了额外约束,即将隐藏表示进行标准化。变分自编码器既可以像自动编码器一样压缩数据,又可以像生成对抗网络那样合成数据。然而当生成对抗网络生成细节数据时,变分自编码器生成的图像往往更加模糊。Deeplearning4j’s包中包括自动编码器和变分自编码器。

    生成算法可分为以下三种类型:

1.给定一个标注,预测相关的特征(朴素贝叶斯)。

2.给定一个隐藏表示,预测相关特征(变分自编码器,生成对抗网络)。

3.给定一些特征,预测其余特征(图像修复,图像插补)

训练生成对抗网络的技巧

    训练判别器时,保持生成器的值不变;训练生成器时,则保持判别器不变。比如:这可以让生成器更好的读取它必须学习的梯度变化。同样的道理,在开始训练生成器前,对用于MINST数据集的判别器先进行预训练,可以建立一个更佳清晰的梯度。

生成对抗网络的每一方都可以压制另一方。若判别器太好,返回接近0或1的值,发生器将难以读取梯度;若生成器太好,它将不断利用判别器的弱点导致漏报。这可以通过各自的学习率来减轻这种压制。

注意: Maven 上的Deeplearning4j’s最新版本不包括生成对抗网络,但很快就可以通过自动分化和模型导入来构建和使用,目前这些都可以在Github上额主存储库中获得。

其他机器学习教程

神经网络介绍

循环神经网络和长短期记忆网络(LSTM)

Word2Vec:Java语言实现神经嵌入

受限玻尔兹曼机

特征向量,协方差,PCA和熵

神经网络与回归

卷积神经网络(CNN)

生成对抗网络(GAN)

推论:机器学习模型服务器

生成对抗网络应用案例

文本到图像的生成

图像到图像的转换

图像分辨率的提高

对视频下一帧的预测

高质量图像的生成

[采用深度卷积生成对抗网络的无监督表示学习][论文] [代码]

[生成对抗文本到图像合成][论文] [代码][代码]

[改进的生成对抗网络技术][论文] [代码]

[即插即用生成网络:潜在空间图像的条件迭代生成] [论文] [代码]

[StackGAN:采用生成对抗网络的文本到照片般真实的图像合成与叠加][论文] [代码]

[对Wasserstein 生成对抗网络的改进训练][论文] [代码]

[边界均衡生成对抗网络在Tensorflow中的实现][论文] [代码]

[生成对抗网络的质量、稳定性和变异性的稳步增长][论文] [代码]

聚类

[采用分类生成对抗网络的无监督和半监督学习] [论文]

图像混合

[GP-GAN:高分辨率图像混合的实现] [论文] [代码]

图像修复

[具有感知和上下文损失的语义图像修复] [论文] [代码]

[上下文编码:通过修复进行特征学习] [论文] [代码]

[采用上下文条件生成对抗网络的半监督学习] [论文]

[面部生成的实现][论文] [代码]

联合概率

[对抗学习推论] [论文] [代码]

超分辨率

[经过深度学习的超分辨率图像重建] [代码](仅适用于人脸数据集)

[使用生成对抗网络生成照片真实的超分辨率图像] [论文] [代码]

[EnhanceGAN] [论文]

去除遮挡

[采用鲁棒性好的LSTM自动编码器野外去除遮挡] [论文]

语义分割

[用于乳腺摄影质量分割的对抗深层架构网络] [论文] [编号]

[使用对抗网络进行语义分割] [论文]

对象检测

[用于小物体检测的感知生成对抗网络] [论文]

[A-Fast-RCNN:通过对抗进行对象检测的硬件生成] [] [代码]

RNN-GANs

[C-RNN-GAN:具有对抗训练的连续递归神经网络] [论文] [代码]

条件对抗网络

[条件生成对抗网络] [论文] [代码]

[InfoGAN:利用信息最大化生成对抗网络的可解释表示学习] [论文][代码][代码]

[辅助分类生成对抗网络的条件图像合成] [论文] [代码]

[像素级区域转移] [论文] [代码]

[用于图像编辑的可变条件生成对抗网络] [论文] [代码]

[即插即用生成网络:潜在空间图像的条件迭代生成] [论文] [代码]

[StackGAN:采用生成对抗网络文本到照片般图像合成与叠加][论文] [代码]

视频预测和生成

[ 基于均方误差的深度multi-scale视频预测] [论文] [代码]

[使用场景动态生成视频] [论文] [] [代码]

[MoCoGAN:使用分解动作及内容生成视频] [论文]

纹理合成 & 样式转换

[预计算实时纹理合成与马尔可夫生成对抗网络] [论文] [代码]

图像转译

[无监督的跨领域图像生成] [论文] [代码]

[基于条件对抗网络的图像转译] [论文] [代码] [代码]

[学习使用生成对抗网络探索跨域之间的关系][论文] [代码]

[使用循环一致对抗网络对不成对图像间的转译] [论文] [代码]

[CoGAN:耦合生成对抗网络] [论文] [代码]

[基于生成对抗网络的无监督图像间转译] [论文]

[无监督图像间转译网络] [论文]

[三角生成对抗网络] [论文]

生成对抗网络理论

[基于能量(Energy-based )的生成对抗网络] [论文] [代码]

[改进的训练生成对抗网络技术] [论文] [代码]

[模式正则化生成对抗网络] [论文]

[利用去噪特征匹配改进生成对抗网络[论文] [代码]

[采样生成网络] [论文] [代码]

[如何训练生成对抗网络][论文]

[训练生成对抗网络的原则性方法] [论文]

[生成对抗网络的展开论述] [论文] [代码]

[最小二乘生成对抗网络] [论文] [代码]

[Wasserstein生成对抗网络] [论文] [代码]

[Wasserstein生成对抗网络的改进训练] [论文] [代码]

[训练生成对抗网络的原则方法] [论文]

[生成对抗网络的泛化和均衡][论文]

三维生成对抗网络

[通过三维生成对抗建模学习对象形状的概率潜在空间] [论文] [网络] [代码]

[用于新型3D视图合成的Transformation-Grounded 图像生成网络] [Web]】

音乐

[MidiNet:一维和二维条件下音符生成的卷积生成对抗网络] [论文]

面部生成和编辑

[使用已学习的相似性度量对像素进行自动编码] [论文] [代码]

[耦合生成对抗网络] [论文] [Caffe代码] [Tensorflow代码]

[用于图像编辑的可变条件生成对抗网络] [论文] [代码]

[为面部属性操作学习残留图像] [论文] [代码]

[采用Introspective对抗网络的神经图像编辑] [论文] [代码]

[Neural Face Editing with Intrinsic Image Disentangling] [论文]

[GeneGAN:从不成对数据中学习对象变形和属性子空间] [论文][代码]

[脸部旋转:用于正面视图合成的全局及局部感知生成对抗网络] [论文]

离散分布

[最大似然扩张离散生成对抗网络] [论文]

[Boundary-Seeking生成对抗网络] [论文]

[采用Gumbel-softmax分布的离散生成对抗网络] [论文]

改进的分类器和识别器

[用于多类开放集合分类的生成OpenMax] [论文]

[对抗特征学习的可控不变性] [论文] [代码]

[生成对抗网络生成未标记样例改善行人重识别基线] [论文] [代码]

[通过对抗训练从模拟和非监督图像中学习] [论文] [代码]

项目

[对抗机器学习库cleverhans] [代码]

[重置-CPPN-GAN-Tensorflow] [代码](使用残余生成对抗网络和变分自动编码器技术生成高分辨率图像)

[HyperGAN] [代码](专注于规模和可用性的开源GAN)

以上为译文。

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《generative adversarial network,译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

【方向】
+关注
目录
打赏
0
0
0
0
1807
分享
相关文章
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
694 7
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
117 9
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
鸿蒙应用开发从入门到入行 - 篇7:http网络请求
在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用、ArkUI里的基础组件,并通过制作一个简单界面掌握使用
146 8
图卷积网络入门:数学基础与架构设计
本文系统地阐述了图卷积网络的架构原理。通过简化数学表述并聚焦于矩阵运算的核心概念,详细解析了GCN的工作机制。
284 3
图卷积网络入门:数学基础与架构设计
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
194 2
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
148 3
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。ACL 可应用于路由器、防火墙等设备,通过设定规则控制访问。其类型包括标准、扩展、基于时间和基于用户的ACL,广泛用于企业网络和互联网安全中,以增强安全性、实现精细管理和灵活调整。然而,ACL 也存在管理复杂和可能影响性能的局限性。未来,ACL 将趋向智能化和自动化,与其他安全技术结合,提供更全面的安全保障。
323 4
深度学习中的卷积神经网络(CNN)入门
【10月更文挑战第41天】在人工智能的璀璨星空下,卷积神经网络(CNN)如一颗耀眼的新星,照亮了图像处理和视觉识别的路径。本文将深入浅出地介绍CNN的基本概念、核心结构和工作原理,同时提供代码示例,带领初学者轻松步入这一神秘而又充满无限可能的领域。

热门文章

最新文章