GAN发展历程综述:送你最易入手的几个架构 | 附资料包

简介:
本文来自AI新媒体量子位(QbitAI)

怎样教机器画一张从未见过的人脸呢?我们知道计算机可以存储大量照片,但它并不知道像素与外观是如何关联起来的。

多年来,各种各样的生成模型都试图解决这个问题。它们使用不同的假设模拟底层数据分布,但那些假设通常并不实用。

目前的实现方法都不是最优解:隐马尔可夫模型生成的文本非常枯燥,由上一句就能预测下一句;变分自编码器(Variational Autoencoders)生成的图像是模糊的,图像之间尽管名称不同,但实际上变化很小,缺乏多样性。

要解决这些问题就要采用一种全新的方法,生成式对抗网络(GAN)应运而生。

在这篇文章中,我们会全面介绍GAN的基础概念,展示其主要架构,并提供大量能显著优化结果的技巧。

GAN的发明

生成模型主要是用来收集训练样本并表示样本的概率分布,解决方案通常是直接推断其概率密度函数。

生成模型的初学者会好奇,既然有这么多真实的训练案例,那为什么还要去找这些生成模型呢? 这里是一些通过好的生成模型可能实现的应用,也可以算作这个问题的答案:

1.模拟实验可能的结果,降低损耗,加快研究速度

2.能够预测未来的行动规划,想象一个GAN能预先知道下一步“路况”

3.生成缺失的数据和标签:缺乏正确格式的清洗的数据会导致过度拟合

4.生成高质量语音

5.照片的自动优化(图像的超分辨率重建)

2014年,蒙特利尔大学的Ian Goodfellow和他的同事创造了生成式对抗网络(GAN)。它可以通过学习生成逼真物体的底层数据分布。

GAN背后的原理很简单,就是生成器和判别器的相互作用。生成器的目标是生成一个逼真的物体,试图以假乱真。判别器的目标是分辨生成图像和真实图像之间的差异。

上图是GAN的整体结构。目前最重要的是明白GAN是一种让生成器和判别器协同工作的方法,并且二者都有自己的体系结构。

生成器和判别器

在训练中的每一步,判别器都要辨别训练集中的假图像,所以判别器的判断力会随着训练越来越强。正如统计学习理论中讲到的,这实际上是在学习数据的基本分布。

当生成器足够擅长生成假图像的时,可以骗过判别器吗?答案是肯定的。下面我们看看生成器是如何生成以假乱真的图像的。

 图片来自Goodfellow,2016年

对这个神经网络来说,如果我们训练它的时间足够长,生成器将从样本的真实“分布”中学习,会逐渐生成逼真图像,直到判别器分辨不出图像真假。

有意思的是,量子位之前报道过一篇GAN诞生记,这个目前最火的AI模型竟然来自一群博士的酒后争吵。

最易入手的几个架构

机器学习方面的知识离不开练习,但很多学习者止步于了解理论皮毛。幸运地是,我们找到了一些实用的贴士帮助实践。在这篇文章中,我们先回顾一些GAN的基本架构。


深度卷积生成式对抗网(DCGAN)

Goodfellow的首篇GAN论文发表一年后,大家发现GAN模型不稳定,并且需要大量的技巧。2016年,Radford等人发表了一篇名为《无监督代表性学习与深度卷积生成式对抗性网络》的论文,文中提出了GAN架构的升级版,命名为DCGAN模型。

 图片来自Radford等人,2015年

让人欣喜的是,大多数情况下DCGAN架构比较稳定。这是首批证明向量运算可以作为从生成器中学习的固有属性表征的论文,和Word2Vec中的向量技巧类似,只不过是适用于图像的。

 图片来自Radford等人,2015年

DCGAN是我们推荐的入门模型中最简单稳定的。还有一些训练与实现的实用技巧资源,在文章结尾可以查看。

条件生成式对抗网络(Conditional GAN)

条件生成式对抗网络是GAN元架构的扩展形式,它能大幅提高生成图像的质量。如果你有一些数据点的标签,可用它帮助网络构建显著表征。不管使用什么架构,扩展是一样的,都需要向生成器添加另一个输入。

 图片来自Mirza,2014年

那么,条件生成式对抗网络是怎样应用的?假设你很喜欢猫,而你的模型恰好能生成各种各样的动物。相比把生成噪音传至生成器中,还有一种更好的方法,你可以在第二个输入中加入一些标签或词向量作为猫这个分类的id。在这种情况下,生成器就能根据预设的输入输出特定物体了。

一些技巧

练习是学习GAN不可或缺的一环,仅从论文中学习还是远远不够的。很多时候论文中的方法只适用于论文中的数据集,我们希望提供一组通用工具让入门者直接拿来研究。

一般来说,训练GAN的工作流程简洁明确,大致可分下面三步走:

  1. 抽取minibatch的训练示例并估算判别器的评分
  2. 生成minibatch的样本并估算判别器的评分
  3. 用上两步中累积的梯度完成更新

分别处理训练和生成minibatch并分别计算这些不同批次的batch norm是必要的,可以帮助我们确定判别器的快速初始训练。

下面是一个正确生成minibatch的说明:

在生成器的每一步中判别器运行次数大于1有时是好的,因此,如果您的生成器在有损失函数的情况下能生成出判别器分辨不了的东西,可以考虑这样做。

如果在生成器中使用batch norm层,可能内部批量的强关联,比如下图中的这个例子。

 图片来自Goodfellow,2016年

本质上说,每个batch都会产生轻微的变化,怎样避免这种情况发生呢?

一种方法是预计算平均像素和标准偏差并每次都用它,但这种解决方法经常导致过度拟合。因此,我们采用Virtual Batch Norm方法,在开始训练前先定义一个batch R作为参考,对于每个新batch X,利用R和X的关联计算标准化参数。

第二种方法是,从球体而不是立方体中搜集输入的噪音。虽然仅通过控制噪声向量模量就可以实现这种近似,但从高维立方体中均匀采样更可取。

还有一个技巧是避免使用稀疏的梯度,特别是在生成器中。我们可以通过将某些图层转换成“平滑”的类似效果来实现,比如:

  1. ReLU -> LeakyReLU
  2. MaxPooling -> AvgPooling, Convolution+stride
  3. Unpooling ->Deconvolution

相关资料

在这篇文章中,我们解释了生成式对抗模型,并讲解了一些实用技巧。原文中还有一些实现GAN的资料,在量子位微信公众号(ID:qbitai)对话界面回复“实现”两个字,可以获得这份学习资源大礼包。

本文作者:颜萌 林鳞
原文发布时间:2017-09-04
相关文章
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
一文介绍CNN/RNN/GAN/Transformer等架构 !!
一文介绍CNN/RNN/GAN/Transformer等架构 !!
203 5
|
机器学习/深度学习 架构师
「首席架构师推荐」统计软件包比较
「首席架构师推荐」统计软件包比较
|
IDE Java 关系型数据库
软件架构编年史:包和命名空间
软件架构编年史:包和命名空间
|
负载均衡 架构师 应用服务中间件
程序员的nginx技能包(5)——负载均衡,高大上架构的起源
背景 不管是否很大型的系统,采用负载均衡的意义都是相当滴重要。
120 0
程序员的nginx技能包(5)——负载均衡,高大上架构的起源
|
4天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
27天前
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
70 2
|
2天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
12 3
|
3天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
27 4
|
2天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
14 2
|
2天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
19 1

热门文章

最新文章