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
相关文章
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
一文介绍CNN/RNN/GAN/Transformer等架构 !!
一文介绍CNN/RNN/GAN/Transformer等架构 !!
343 5
|
机器学习/深度学习 架构师
「首席架构师推荐」统计软件包比较
「首席架构师推荐」统计软件包比较
|
IDE Java 关系型数据库
软件架构编年史:包和命名空间
软件架构编年史:包和命名空间
|
负载均衡 架构师 应用服务中间件
程序员的nginx技能包(5)——负载均衡,高大上架构的起源
背景 不管是否很大型的系统,采用负载均衡的意义都是相当滴重要。
131 0
程序员的nginx技能包(5)——负载均衡,高大上架构的起源
|
3月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
4月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
88 3
|
4月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
3月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
342 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
26天前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
4月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
105 1
服务架构的演进:从单体到微服务的探索之旅

热门文章

最新文章