前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SFFAI分享 | 黄怀波 :自省变分自编码器理论及其在图像生成上的应用

SFFAI分享 | 黄怀波 :自省变分自编码器理论及其在图像生成上的应用

作者头像
马上科普尚尚
发布于 2020-05-11 06:45:59
发布于 2020-05-11 06:45:59
1.1K0
举报

导读

生成模型一直是机器学习计算机视觉领域的重要研究方向。以生成对抗网络(GANs)和变分自编码器(VAEs)等为代表的深度生成模型已经成为当前人工智能研究的热点问题和重要前沿方向。目前的各种深度生成模型都各有其优点和缺点,比如生成对抗网络的训练稳定性和模式崩溃(mode collapse)问题等,变分自编码器生成图像比较模糊等。针对这些问题,我们提出了一种新的生成模型——自省变分自编码器,用于实现稳定训练和生成高分辨率真实图像。

背景

生成模型是利用一个已知的概率分布来拟合给定的数据样本。其本质是对数据分布先验知识的学习,一般具有推理(Inference)、采样(Sampling)和密度估计(DensityEstimation)等功能。对于比较简单的分布,可以采用概率PCA等线性模型来进行学习;而对于比较复杂的数据分布,现在一般通过深度生成模型来对分布进行建模和学习。

如图1所示,目前主流的深度生成模型主要包括生成对抗网络(GANs)、变分自编码器(VAEs)、自回归模型(Auto-regressiveModels)、流模型(Flow-basedmodels)和其他一些模型。在这些模型中,目前研究最多和应用最广的是生成对抗网络和变分自编码器这两种模型。生成对抗网络通过生成器和判别器之间进行对抗来生成跟真实分布非常接近的样本。它的优点是生成的图像真实清晰,在计算机视觉等任务中应用广泛;缺点是训练不稳定和容易出现模式崩溃的问题。变分自编码器模型通过优化一个变分下界函数来实现输入样本的重构和隐层代码上的先验约束。其训练稳定,能够进行推理和近似密度估计,但是生成的样本非常模糊。虽然很多研究者针对这些问题对生成对抗网络和变分自编码器模型进行了很多改进,但是如何以简单有效的方式训练和生成高分辨率真实图像仍然是一个非常具有挑战的问题。

图1 主流的深度生成模型

自省变分自编码器模型

当前主流的生成高分辨率图像的方法是将高分辨率图像进行分解,分多个阶段,先合成低分辨率图像,再逐渐放大合成高分辨率图像。典型代表是LapGAN或者StackGAN,以及英伟达在ICLR18上的工作PGGAN。这种多阶段训练的方式增加了模型的复杂度,增加了复现文章结果的难度。为此,我们提出了一种新的深度生成模型——自省变分自编码器,能够以简单有效的方式直接合成高清真实图像。

自省变分自编码器模型基于传统的变分自编码器模型。在变分自编码器模型中,优化函数包括两个方面,一个重建损失函数用于重构输入样本,一个KL散度函数用于对隐变量添加先验约束。借鉴生成对抗网络,我们将对抗引入了变分自编码器的训练中。在训练编码器的时候,使得真实样本的隐变量接近先验分布,生成样本的隐变量偏离先验分布;在训练生成器的时候,则要生成样本的隐变量接近先验分布。我们保留了重建损失函数,在训练过程中编码器和生成器既要对抗又要协作。

对于真实样本来说,我们方法的训练目标跟传统变分自编码器完全一致,这极大的稳定了模型训练。对于生成样本来说,对抗的引入则提高了样本的质量,克服了变分自编码器生成结果模糊的问题。实验表明,我们的方法能够稳定合成高分辨率真实图像,比如1024x1024大小的人脸图像,256x256大小的卧室、教堂、狗等自然图像。不仅在图像质量上,而且在量化指标上我们也取得了无条件生成(unconditionalgeneration)上当前最好的结果。

LSUNBEDROOM上训练,生成的256x256卧室图像

LSUNCHURCHOUTDOOR上训练,生成的256x256教堂图像

ImageNet上训练,生成的256x256狗图像

Take Home Message

我们方法目前仍然有一些局限性,主要是对于高分辨率图像训练时间仍然非常漫长(比如1024x1024的图像需要3周左右的时间)和对于自然图像来说生成结果仍然有继续提升的空间。另外,在条件生成领域,谷歌最近提出的BigGAN模型可以达到非常的量化指标。但是,除了使用了很多之前文章的trick外,BigGAN的性能提升主要依赖于大的batch-size和模型参数,训练平台TPU当前对大多数研究者来说仍然不现实。在大多数研究者计算资源有限的情况下,设计更加简单更加容易训练的模型仍然是一个值得继续研究的方向。

Reference [1] Van Oord, Aaron, Kalchbrenner, Nal, andKavukcuoglu, Koray. Pixel recurrent neural networks. In ICML, pp.1747–1756, 2016. [2] Denton, Emily L, Chintala, Soumith, Fergus, Rob, et al. Deep generativeimage models using a laplacian pyramid of adversarial networks. In NIPS,pp. 1486–1494, 2015.

[3] Dinh, Laurent, Sohl-Dickstein, Jascha,and Bengio, Samy. Density estimation using real NVP. In ICLR,2017.

[4] Goodfellow, Ian, Pouget-Abadie, Jean,Mirza, Mehdi, Xu, Bing, Warde-Farley, David, Ozair, Sherjil, Courville, Aaron, and Bengio, Yoshua. Generative adversarial nets. In NIPS,pp. 2672–2680, 2014. [5] Karras, Tero, Aila, Timo, Laine, Samuli, and Lehtinen, Jaakko. Progressivegrowing of GANs for improved quality, stability, and variation. In ICLR,2018.

[6] Kingma, Diederik P and Welling, Max.Auto-encoding variational bayes. In ICLR, 2014. [7] Li, Yujia, Swersky, Kevin, and Zemel, Rich. Generative moment matchingnetworks. In ICML, pp.1718–1727, 2015. [8] Wang, Ting-Chun, Liu, Ming-Yu, Zhu, Jun-Yan, Tao, Andrew, Kautz, Jan, andCatanzaro, Bryan. Highresolution image synthesis and semantic manipulation withconditional GANs. In CVPR, 2018. [9] Zhang, Zizhao, Xie, Yuanpu, and Yang, Lin. Photographic text-to-image synthesiswith a hierarchicallynested adversarial network. arXiv preprintarXiv:1802.09178, 2018.

[10] Kingma D P, Dhariwal P. Glow:Generative flow with invertible 1x1 convolutions[J]. arXiv preprintarXiv:1807.03039, 2018.

[11] Brock A, Donahue J, Simonyan K. LargeScale GAN Training for High Fidelity Natural Image Synthesis[J]. arXiv preprintarXiv:1809.11096, 2018.

[12] Le Tan D K, Le H, Hoang T, et al.DeepVQ: A Deep Network Architecture for Vector Quantization. In CVPR, 2018:2579-2582.

[13] J. Lazarow, L. Jin, and Z. Tu,“Introspective Neural Networks for Generative Modeling,” In ICCV, 2017, pp.2793–2802.

[14] Bordes F, Honari S, Vincent P.Learning to Generate Samples from Noise through Infusion Training. In ICLR,2017.

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

本文分享自 人工智能前沿讲习 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
golang的线程模型——GMP模型
内核线程(Kernel-Level Thread ,KLT) 轻量级进程(Light Weight Process,LWP):轻量级进程就是我们通常意义上所讲的线程,由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程
benny
2021/08/09
1.9K0
【深度知识】GO语言的goroutine并发原理和调度机制
Go语言最大的特色就是从语言层面支持并发(Goroutine),Goroutine是Go中最基本的执行单元。事实上每一个Go程序至少有一个Goroutine:主Goroutine。当程序启动时,它会自动创建。
辉哥
2019/08/05
1.8K0
【深度知识】GO语言的goroutine并发原理和调度机制
Go的CSP并发模型实现:M, P, G
最近抽空研究、整理了一下Golang调度机制,学习了其他大牛的文章。把自己的理解写下来。如有错误,请指正!!!
sunsky
2020/08/20
1.5K0
进程、线程与协程傻傻分不清?一文带你吃透!
欢迎来到操作系统系列,依然采用图解 + 大白话的形式来讲解,让小白也能看懂,帮助大家快速科普入门
9号同学
2021/07/07
9360
进程、线程与协程傻傻分不清?一文带你吃透!
Golang 语言的 goroutine 调度器模型 GPM
Golang 语言与其他编程语言之间比较,最大的亮点就是 goroutine,使 Golang 语言天生支持并发,可以高效使用 CPU 的多个核心,而并发执行需要一个调度器来协调。
frank.
2021/01/22
1.3K0
线程模型的理解
Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,一次系统调用可以实现用户态和内核态的切换
liddytang
2021/02/25
3.6K2
Linux下的进程类别(内核线程、轻量级进程和用户进程)--Linux进程的管理与调度(四)
虽然我们在区分Linux进程类别, 但是我还是想说Linux下只有一种类型的进程,那就是task_struct,当然我也想说linux其实也没有线程的概念, 只是将那些与其他进程共享资源的进程称之为线程。
233333
2018/09/14
6.8K1
Linux下的进程类别(内核线程、轻量级进程和用户进程)--Linux进程的管理与调度(四)
Java与线程
并发不一定要依赖多线程(如PHP的多进程并发),但在Java中谈论并发,大多数都与线程脱不开关系
JavaEdge
2018/05/16
2.6K1
关于Go并发编程,你不得不知的“左膀右臂”——并发与通道!
导语 | 并发编程,可以说一直都是开发者们关注最多的主题之一。而Golang作为一个出道就自带“高并发”光环的编程语言,其并发编程的实现原理肯定是值得我们深入探究的。本文主要介绍Goroutine和channel的实现。 Go并发编程模型在底层是由操作系统所提供的线程库支撑的,这里先简要介绍一下线程实现模型的相关概念。 一、线程的实现模型 线程的实现模型主要有3个,分别是:用户级线程模型、内核级线程模型和两级线程模型。它们之间最大的差异在于用户线程与内核调度实体(KSE)之间的对应关系上。内核调度实体就是可
腾讯云开发者
2022/01/26
5910
GoLang GPM模型
goroutine 是什么?通常 goroutine 会被当做 coroutine(协程)的 golang 实现,但实际上,goroutine 并非传统意义上的协程,现在主流的线程模型分三种:内核级线程模型、用户级线程模型和两级线程模型(也称混合型线程模型),传统的协程库属于用户级线程模型,而 goroutine 和它的 Go Scheduler 在底层实现上其实是属于两级线程模型。
阿珍
2025/03/05
850
GoLang GPM模型
如何使用 Go 更好地开发并发程序,纯干货!
Go 语言的并发特性是其一大亮点,今天我们来带着大家一起看看如何使用 Go 更好地开发并发程序?
aoho求索
2021/03/16
5710
如何使用 Go 更好地开发并发程序,纯干货!
Golang GMP模型
早期操作系统是单进程的,只能顺序执行进程,如果进程需要IO,必须要等IO结束才能继续运行,造成了严重的CPU资源的浪费。
月梦@剑心
2023/08/31
4590
Golang GMP模型
协程实现原理
大家好,我是易安!今天我们来探讨一个问题,Go 协程的实现原理。此“协程”非彼”携程“。
架构狂人
2023/08/16
4320
协程实现原理
前端性能监控(RUM)接入层服务高并发优化实践(二)——并发模型原理
张翔 腾讯高级前端开发工程师、腾讯云前端性能监控(RUM)核心开发。主要负责前端性能监控系统中的上报服务层模块的设计与实现。 前言 往期我们介绍了 前端性能监控 (RUM) 接入层服务高并发优化实践 ,我们针对缓存模型进行重新设计与优化,相信不少用户也感受到了 RUM 前所未有的流畅。 腾讯云前端性能监控(RUM) 系统中,接入层服务时刻承受着平均上百万 QPS 的上报请求,所以对于服务端的性能要求是极其高。接着往期 前端性能监控 (RUM) 接入层服务高并发优化实践 说的缓存模型,本次我们将带为您潜入 G
腾讯云可观测平台
2022/08/26
6300
前端性能监控(RUM)接入层服务高并发优化实践(二)——并发模型原理
go进阶(1) -深入理解goroutine并发运行机制
并发指的是同时进行多个任务的程序,Web处理请求,读写处理操作,I/O操作都可以充分利用并发增长处理速度,随着网络的普及,并发操作逐渐不可或缺 
黄规速
2023/02/27
4.5K0
go进阶(1) -深入理解goroutine并发运行机制
操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!
由图可知程序会先由编译器编译成机器指令,运行之前先把程序放入内存,在内存中创建一个进程实体。一个进程实体(进程映像)由PCB、程序段、数据段组成。然后CPU从内存中取出指令,来运行程序。
阿甘的码路
2022/09/22
4980
操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!
进程和线程基础知识全家桶,30 张图一套带走
我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了。
小林coding
2020/07/14
3980
进程和线程基础知识全家桶,30 张图一套带走
Golang 协程/线程/进程 区别以及 GMP 详解
**进程** 每个进程都有自己的独立内存空间,拥有自己独立的地址空间、独立的堆和栈,既不共享堆,亦不共享栈。一个程序至少有一个进程,一个进程至少有一个线程。进程切换只发生在内核态。
码仔janrs.com
2023/06/01
7300
推荐阅读
相关推荐
golang的线程模型——GMP模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档