前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >16岁 OpenAI 天才实习生 Kevin Frans:变分自编码机

16岁 OpenAI 天才实习生 Kevin Frans:变分自编码机

原创
作者头像
AI科技大本营
修改于 2017-08-11 02:33:25
修改于 2017-08-11 02:33:25
1.6K0
举报

编译 AI科技大本营(rgznai100) 参与 史天,胡永波,鸽子

我的天啊,这些少年们,让身为多年程序猿,却还在吃草的我们,情何以堪,情何以堪...AI哥也只剩下最后一点自信了,那就是...

说点正事......那个......

你知道啥叫变分自编码机吗?

你知道为啥你需要懂变分自编码机呢?

你知道如何以最快的速度搞懂变分自编码机吗?

啥也不说了,还是让这位16岁的天才少年讲给你听吧。

Kevin Frans是加州Palo Alto的一名高中生,他年级轻轻便已写出两篇论文,并且对生成式模型颇有研究。他的成名作是一个名为deepcolor的项目。

现在,他正在以实习生的身份在OpenAI做强化学习方面的研究。

本文是 Kevin Frans 用自己写的实例来讲解变分自编码机,对于自编码机与变分自编码机的工作原理、使用变分自编码机时的优缺点,他都做了特别细心的解释,是了解变分自编码机不可多得的一篇好文。

下面,我们就来看看这个高中生的实力到底有几何:

我曾经讲解过一次生成式对抗网络(GAN),谈的是用它来生成逼真图像的一个简单例子。

但这中间有些问题,即单纯使用GAN存在两大不利因素。

首先,这里的图像生成自某些随机的噪点。如果你想生成的是一张特定细节的图像,除了遍历初始噪点的整个分布范围,你没有别的办法来找出它们的值。

其次,生成式对抗模型只能区分出图像的“真”、“假”。你没有办法强制它所生成猫图必须看起来像猫。这就造成了一个问题,就是它所生成的图像不是参照真实的物体,而是参照的他们在图片中的样子,风格上不会特别写实。

如何解决这两个问题呢?

我会在本文中介绍另一种神经网络——变分自编码机,来解决这两个问题。

什么是变分自编码机?

要理解变分自编码机(VAE),我们要先从一个简单的网络开始,一步一步添加部件。

描述神经网络的常见方法,是把它解释成我们想要建模的功能的某种近似。然而,它们还能被理解为储存信息的某种数据结构

假设有一个由数层解卷积层构成的神经网络,我们把输入设定为单位向量,然后训练该网络去降低其与目标图像之间的均方误差。这样,该图像的“数据”就包含在神经网络当前的参数之中了。

现在,我们用多张图像来尝试这一步骤。此时,输入不再是单位向量,而要改用独热向量。比如,输入 1, 0, 0, 0 可能是生成一张猫的图像,而输入 0, 1, 0, 0 则可能生成一张狗的图像。这是可行的,不过这样我们只能存储最多4张图像。让网络记住更多的图像则要使用更长的向量,同时也意味着越来越多的参数。

为此,我们需要使用实向量,而非独热向量。我们可以把它视为某个图像所对应的编码,比如用向量 3.3, 4.5, 2.1, 9.8 来表示猫的图像,而用向量 3.4, 2.1, 6.7, 4.2 来表示狗的图像,这就是 编码/解码 这一术语的来源。这一初始向量便是我们的潜在变量。

像我前面那样随机选择潜在变量,明显是个糟糕的做法。在自编码机中,我们加入了一个能自动把原始图像编码成向量的组件。上述解卷积层则能把这些向量“解码”回原始图像。

这样,我们的模型终于到了一个能有用武之地的阶段。根据需要,我们可以用尽可能多的图像来训练网络。如果保存了某张图像的编码向量,我们随时就能用解码组件来重建该图像,整个过程仅需一个标准的自编码机。

不过,这里我们想要的是构建一个生成式模型,而非仅仅是“记忆”图像数据的模糊结构。除了像前面那样从已有图像中编码出潜在向量,我们还不知道如何创造这些向量,也就无法凭空生成任何图像。

这里有个简单的办法。我们给编码网络增加一个约束,迫使它所生成的潜在向量大体上服从于单位高斯分布。该约束条件使得变分自编码机不同于标准自编码机。

现在,生成新的图像就变得容易了:我们只需从单位高斯分布中采样出一个潜在向量,并将其传到解码器即可。

实际操作中,我们需要仔细权衡网络的精确度与潜在变量在单位高斯分布上的契合程度。

神经网络可以自行决定这里的取舍。对于其中的误差项,我们归纳出独立的两种:生成误差,用以衡量网络重构图像精确度的均方误差;潜在误差,用以衡量潜在变量在单位高斯分布上的契合程度的KL散度。

代码语言:txt
AI代码解释
复制
generation_loss = mean(square(generated_image - real_image))  
latent_loss = KL-Divergence(latent_variable, unit_gaussian)  
loss = generation_loss + latent_loss  

为了优化KL散度,我们要用到重新参数化的一个简单技巧:生成一个均值向量一个标准差向量,而非直接生成实值向量。

我们的KL散度计算就变成这样:

代码语言:txt
AI代码解释
复制
 # z_mean and z_stddev are two vectors generated by encoder network
latent_loss = 0.5 * tf.reduce_sum(tf.square(z_mean) + tf.square(z_stddev) - tf.log(tf.square(z_stddev)) - 1,1)  

在计算解码网络的误差时,我们只需从标准差中取样,再加上均值向量,就能得到我们的潜在向量:

代码语言:txt
AI代码解释
复制
samples = tf.random_normal([batchsize,n_z],0,1,dtype=tf.float32)  
sampled_z = z_mean + (z_stddev * samples)  

除了能让我们生成随机的潜在变量,该约束还能提高VAE网络的泛化能力。

形象地说,我们可以把潜在变量视为数据的变换系数。

在 0, 10 的区间内,假定你有一系列的实数-名称对,一个实数代表一个物体的名字。例如,5.43表示苹果,5.44表示香蕉。当有人给你数字5.43时,你肯定知道他们是在谈论苹果。本质上,采用这一方式可以编码无限多的信息,毕竟 0, 10 之间的实数是有无数个。

然而,如果每当有人给告诉你一个新数字,它的高斯噪点也会增加一个时,情况会变成怎样?比如说,你收到数字是5.43,其原始数值则应在4.4 ~ 6.4之间,那其他人所说的真实数字就有可能是5.44(香蕉)。

所增噪点的标准差越大,其均值变量所能传递的信息就越少。

用此相同的逻辑,我们就能在编码器和解码器之间传递潜在变量。对原始图像的编码越有效,我们在高斯分布上所能取样的标准差就越大,直至为1(标准正态分布)。

这一约束迫使编码器变得非常高效,从而能创造出信息丰富的潜在变量。它所提升的泛化能力,让我们随机生成或从非训练图像编码而来的潜在变量,在解码时将能产生更好的结果。

VAE的效果有多好?

我在MNIST手写数据集上做了一些测试,从中可以看出变分自编码机的效果有多好。

<center>左:第1世代,中:第9世代,右:原始图像</center>

看起来很不错!在我那没有显卡的笔记本上运行15分钟后,它就生成了一些很好的MNIST结果。

VAE的优点:

由于它们所遵循的是一种 编码-解码 模式,我们能直接把生成的图像同原始图像进行对比,这在使用GAN时是不可能的。

VAE的不足:

由于它是直接采用均方误差而非对抗网络,其神经网络倾向于生成更为模糊的图像。

也有一些需要结合VAE和GAN的研究工作:采用相同的 编码器-解码器 配置,但使用对抗网络来训练解码器。

研究详情参考论文 https://arxiv.org/pdf/1512.09300.pdf

http://blog.otoro.net/2016/04/01/generating-large-images-from-latent-vectors/

本文代码 https://github.com/kvfrans/variational-autoencoder

https://jmetzen.github.io/2015-11-27/vae.html

原文链接 http://kvfrans.com/variational-autoencoders-explained/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VAE(Variational Autoencoder)的原理「建议收藏」
Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013).
全栈程序员站长
2022/09/07
1.5K0
VAE(Variational Autoencoder)的原理「建议收藏」
GAN 并不是你所需要的全部:从AE到VAE的自编码器全面总结
说到计算机生成的图像肯定就会想到deep fake:将马变成的斑马或者生成一个不存在的猫。在图像生成方面GAN似乎成为了主流,但是尽管这些模型在生成逼真的图像方面取得了巨大成功,但他们的缺陷也是十分明显的,而且并不是生成图像的全部。自编码器(autoencoder)作为生成的图像的传统模型还没有过时并且还在发展,所以不要忘掉自编码器!
deephub
2022/04/14
8750
GAN 并不是你所需要的全部:从AE到VAE的自编码器全面总结
​变分自编码器概述
变分自编码器(VAE)[1] 如今已经成为在复杂场景中进行推断(inference)的基本工具,同时它作为生成模型在生成连续型数据上也得到了广泛的关注和应用。本文简要介绍了变分推断的问题背景,接着介绍VAE的基本思想和原理,指出VAE是变分推断思想和神经网络结合的产物,并对它作简单的分析和理解。最后概述VAE的发展,包括在聚类任务上的应用,在生成任务上的改进,在无监督的解耦表征(disentangled representations)上的进展等等。
SIGAI学习与实践平台
2019/08/05
1K0
​变分自编码器概述
深度学习算法(第31期)----变分自编码器及其实现
深度学习算法(第30期)----降噪自编码器和稀疏自编码器及其实现 今天我们一起学一下变分自编码器及其实现方面的知识。
智能算法
2019/10/17
9310
深度学习算法(第31期)----变分自编码器及其实现
变分自编码器 VAE
简单来讲,变分自编码器是可以和GAN相媲美的生成网络。我们可以输入一个低维空间的Z,映射到高维空间的真实数据。比如,生成不同样的数字,人脸等等。
为为为什么
2022/09/27
1.7K0
变分自编码器 VAE
【干货】一文读懂什么是变分自编码器
【导读】本文是工程师Irhum Shafkat的一篇博文,主要梳理了变分自编码器的相关知识。我们知道,变分自编码器是一种生成模型,在文本生成、图像风格迁移等诸多任务中有显著的效果,那么什么是变分自编码
WZEARW
2018/04/13
11.4K0
【干货】一文读懂什么是变分自编码器
VAE-变分自编码器
先将高维的原始数据映射到一个低维特征空间,然后从低维特征学习重建原始的数据。一个AE模型包含两部分网络:
iResearch666
2023/09/13
5960
VAE-变分自编码器
【干货】深入理解变分自编码器
【导读】自编码器是一种非常直观的无监督神经网络方法,由编码器和解码器两部分构成,自编码器近年来很受研究人员的欢迎。本文是机器学习工程师Jeremy撰写的一篇非常棒的博文,介绍了变分自编码器理论基础和工作原理,通过人脸示例帮助读者更直观的理解。本文强调了变分自编码器的理论推导和实现细节,在文末展示了变分自编码器作为生成模型的输出结果。希望深入理解变分自编码器的读者不妨读一读。 Variational autoencoders 变分自编码器 自编码器是发现数据的一些隐状态(不完整,稀疏,去噪,收缩)表示的模型
WZEARW
2018/04/08
1.9K0
【干货】深入理解变分自编码器
《Scikit-Learn与TensorFlow机器学习实用指南》第15章 自编码器
第15章 自编码器 来源:ApacheCN《Sklearn 与 TensorFlow 机器学习实用指南》翻译项目 译者:@akonwang 校对:@飞龙 自编码器是能够在无监督的情况下学习输入数据(叫做编码)的人工神经网络(即,训练集是未标记)。这些编码通常具有比输入数据低得多的维度,使得自编码器对降维有用(参见第 8 章)。更重要的是,自编码器可以作为强大的特征检测器,它们可以用于无监督的深度神经网络预训练(正如我们在第 11 章中讨论过的)。最后,他们能够随机生成与训练数据非常相似的新数据;这
ApacheCN_飞龙
2018/05/16
1.2K0
理解变分自编码器VAE
参考文章 https://arxiv.org/pdf/1312.6114.pdf https://dfdazac.github.io/01-vae.html https://spaces.ac.cn/tag/vae/ https://cloud.tencent.com/developer/article/1096650
水球喵子
2020/03/20
9080
理解变分自编码器VAE
教程 | 如何使用变分自编码器VAE生成动漫人物形象
选自Medium 作者:Wuga 机器之心编译 参与:Geek Ai、李泽南 变分自编码器(VAE)与生成对抗网络(GAN)经常被相互比较,其中前者在图像生成上的应用范围远窄于后者。VAE 是不是只能
机器之心
2018/05/08
2K0
教程 | 如何使用变分自编码器VAE生成动漫人物形象
走进深度生成模型:变分自动编码器(VAE)和生成对抗网络(GAN)
【导读】近日,深度学习爱好者Prakash Pandey发布一篇博文介绍深度生成模型。我们知道,有监督学习在很多方面都达到了很好的效果,但是,由于有监督学习由于数据集太少等缺点,研究者逐渐偏向于探索无
WZEARW
2018/04/13
5.1K0
走进深度生成模型:变分自动编码器(VAE)和生成对抗网络(GAN)
一文归纳Ai数据增强之法
数据、算法、算力是人工智能发展的三要素。数据决定了Ai模型学习的上限,数据规模越大、质量越高,模型就能够拥有更好的泛化能力。然而在实际工程中,经常有数据量太少(相对模型而言)、样本不均衡、很难覆盖全部的场景等问题,解决这类问题的一个有效途径是通过数据增强(Data Augmentation),使模型学习获得较好的泛化性能。
算法进阶
2022/06/01
7940
一文归纳Ai数据增强之法
TensorFlow 卷积神经网络实用指南:6~10
本章将介绍一种与到目前为止所看到的模型稍有不同的模型。 到目前为止提供的所有模型都属于一种称为判别模型的模型。 判别模型旨在找到不同类别之间的界限。 他们对找到P(Y|X)-给定某些输入X的输出Y的概率感兴趣。 这是用于分类的自然概率分布,因为您通常要在给定一些输入X的情况下找到标签Y。
ApacheCN_飞龙
2023/04/23
6830
深度学习算法中的变分自动编码器(Variational Autoencoders)
随着深度学习的发展,自动编码器(Autoencoders)成为了一种重要的无监督学习算法。其中,变分自动编码器(Variational Autoencoders,VAEs)作为一种特殊类型的自动编码器,在生成模型、数据压缩和特征学习等领域取得了很大的成功。本文将介绍变分自动编码器的原理和应用,并探讨其在深度学习中的重要性。
大盘鸡拌面
2023/09/20
1.1K0
在TensorFlow中对比两大生成模型:VAE与GAN(附测试代码)
来源:机器之心 本文长度为3071字,建议阅读6分钟 本文在 MNIST 上对VAE和GAN这两类生成模型的性能进行了对比测试。 项目链接:https://github.com/kvmanohar22/ Generative-Models 变分自编码器(VAE)与生成对抗网络(GAN)是复杂分布上无监督学习最具前景的两类方法。 本项目总结了使用变分自编码器(Variational Autoencode,VAE)和生成对抗网络(GAN)对给定数据分布进行建模,并且对比了这些模型的性能。你可能会问:我们已经
数据派THU
2018/01/30
2.7K0
在TensorFlow中对比两大生成模型:VAE与GAN(附测试代码)
学界 | 稳定、表征丰富的球面变分自编码器
近期的研究为 NLP 的一系列任务建立了深度生成模型的有效性,包括文本生成(Hu et al., 2017; Yu et al., 2017)、机器翻译(Zhang et al., 2016)以及风格迁移(Shen et al., 2017; Zhao et al., 2017a)。变分自编码器(VAE)在以往的文本建模中被研究过(Miao et al., 2016; Bowman et al., 2016),研究人员曾提出过一个用来捕获数据中潜在结构的连续潜变量。经典的 VAE 实现假设潜在空间的先验函数是多元高斯的,在训练期间,变分后验在损失函数的 KL 散度激励下会近似于先验值。以往研究发现,该方法的一个主要局限性是 KL 项可能会激励潜变量的后验分布「坍缩」到先验,导致潜在结构无法被充分利用(Bowman et al., 2016; Chen et al., 2016)。
机器之心
2018/10/22
1K0
学界 | 稳定、表征丰富的球面变分自编码器
教你用TensorFlow和自编码器模型生成手写数字(附代码)
来源:机器之心 本文长度为1876字,建议阅读4分钟 本文介绍了如何使用 TensorFlow 实现变分自编码器(VAE)模型,并通过简单的手写数字生成案例一步步引导读者实现这一强大的生成模型。 自编码器是一种能够用来学习对输入数据高效编码的神经网络。若给定一些输入,神经网络首先会使用一系列的变换来将数据映射到低维空间,这部分神经网络就被称为编码器。 然后,网络会使用被编码的低维数据去尝试重建输入,这部分网络称之为解码器。我们可以使用编码器将数据压缩为神经网络可以理解的类型。然而自编码器很少用做这个目的
数据派THU
2018/01/30
1.5K0
教你用TensorFlow和自编码器模型生成手写数字(附代码)
通过 VAE、GAN 和 Transformer 释放生成式 AI
生成式人工智能是人工智能和创造力交叉的一个令人兴奋的领域,它通过使机器能够生成新的原创内容,正在给各个行业带来革命性的变化。从生成逼真的图像和音乐作品到创建逼真的文本和沉浸式虚拟环境,生成式人工智能正在突破机器所能实现的界限。在这篇博客中,我们将探索使用 VAE、GAN 和 Transformer 的生成式人工智能的前景,深入研究其应用、进步及其对未来的深远影响。
磐创AI
2023/11/08
7600
通过 VAE、GAN 和 Transformer 释放生成式 AI
自编码器与生成模型
自编码器(Autoencoder, AE)是一种无监督学习模型,旨在通过神经网络将输入数据压缩(编码),然后重构(解码)回原始数据。自编码器通过学习将输入数据压缩到一个低维的表示空间,使得输入数据能够在低维空间中高效地表示,从而实现数据的降维、去噪、特征学习等任务。
LucianaiB
2025/01/27
1110
推荐阅读
相关推荐
VAE(Variational Autoencoder)的原理「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档