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

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

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

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

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

生成算法判别算法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

d223c78cd177334fd18000a1dcd33caee9412d58 

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

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

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

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

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

f5389ead8941e1abd5918e3e7e84e2f39b5738c1

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

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

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

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

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

训练生成对抗网络的技巧

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

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

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

其他机器学习教程

神经网络介绍

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

Word2VecJava语言实现神经嵌入

受限玻尔兹曼机

特征向量,协方差,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,审校:袁虎。

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

相关文章
|
24天前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
179 1
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
2月前
|
机器学习/深度学习 编解码 文件存储
YOLOv8改进 | 2023Neck篇 | BiFPN双向特征金字塔网络(附yaml文件+代码)
YOLOv8改进 | 2023Neck篇 | BiFPN双向特征金字塔网络(附yaml文件+代码)
232 0
|
2月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
44 0
|
2月前
|
机器学习/深度学习 测试技术 Ruby
YOLOv8改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
YOLOv8改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
84 0
|
2月前
|
机器学习/深度学习 测试技术 Ruby
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
125 2
|
24天前
|
机器学习/深度学习 PyTorch 算法框架/工具
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
20 0
|
1月前
|
安全 网络安全 数据安全/隐私保护
网络拓扑结构入门快速介绍
网络拓扑结构入门快速介绍
|
1月前
|
数据采集 Web App开发 数据处理
Ruby网络爬虫教程:从入门到精通下载图片
Ruby网络爬虫教程:从入门到精通下载图片
|
1月前
|
人工智能 监控 安全
网络安全知识入门:Web应用防火墙是什么?
网络安全知识入门:Web应用防火墙是什么?
22 1

热门文章

最新文章