VAE(Variational Autoencoder)的原理_vae一一对应-程序员宅基地

技术标签: 讲解  推导  变分自编码器  VAE  

本篇博客转载自:
VAE(Variational Autoencoder)的原理
OpenAI实习生讲解变分自编码机


以上两篇文章翻译自Kevin Frans的英文博客.

英文原文:Variational Autoencoders Explained

论文链接:Auto-encoding variational bayes

论文的理论推导:变分自编码器(VAEs)

以下为正文


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

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

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

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

如何解决这两个问题呢?

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

什么是变分自编码机?

为了理解VAE,我们首先从最简单的网络说起,然后再一步一步添加额外的部分。

一个描述神经网络的常见方法是近似一些我们想建模的函数。然而神经网络也可以被看做是携带信息的数据结构。

假如我们有一个带有解卷积层的网络,我们设置输入为值全为1的向量,输出为一张图像。然后,我们可以训练这个网络去减小重构图像和原始图像的平均平方误差。那么训练完后,这个图像的信息就被保留在了网络的参数中。

这里写图片描述

现在,我们尝试使用更多的图片。这次我们用one-hot向量而不是全1向量。我们用[1, 0, 0, 0]代表猫,用[0, 1, 0, 0]代表狗。虽然这没什么问题,但是我们最多只能储存4张图片。当然,我们也可以增加向量的长度和网络的参数,那么我们可以获得更多的图片。

但是,这样的向量很稀疏。为了解决这个问题,我们想使用实数值向量而不是0,1向量。我们可认为这种实数值向量是原图片的一种编码,这也就引出了编码/解码的概念。举个例子,[3.3, 4.5, 2.1, 9.8]代表猫,[3.4, 2.1, 6.7, 4.2] 代表狗。这个已知的初始向量可以作为我们的潜在变量。

如果像我上面一样,随机初始化一些向量去代表图片的编码,这不是一个很好的办法,我们更希望计算机能帮我们自动编码。在autoencoder模型中,我们加入一个编码器,它能帮我们把图片编码成向量。然后解码器能够把这些向量恢复成图片。

这里写图片描述

我们现在获得了一个有点实际用处的网络了。而且我们现在能训练任意多的图片了。如果我们把这些图片的编码向量存在来,那以后我们就能通过这些编码向量来重构我们的图像。我们称之为标准自编码器。

但是,我们想建一个产生式模型,而不是一个只是储存图片的网络。现在我们还不能产生任何未知的东西,因为我们不能随意产生合理的潜在变量。因为合理的潜在变量都是编码器从原始图片中产生的。

这里有个简单的解决办法。我们可以对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正式这种约束,把VAE和标准自编码器给区分开来了。

现在,产生新的图片也变得容易:我们只要从单位高斯分布中进行采样,然后把它传给解码器就可以了。

事实上,我们还需要在重构图片的精确度和单位高斯分布的拟合度上进行权衡。

我们可以让网络自己去决定这种权衡。对于我们的损失函数,我们可以把这两方面进行加和。一方面,是图片的重构误差,我们可以用平均平方误差来度量,另一方面。我们可以用KL散度(KL散度介绍)来度量我们潜在变量的分布和单位高斯分布的差异。

这里写图片描述

为了优化KL散度,我们需要应用一个简单的参数重构技巧:不像标准自编码器那样产生实数值向量,VAE的编码器会产生两个向量:一个是均值向量,一个是标准差向量。

这里写图片描述

我们可以这样来计算KL散度:

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)

当我们计算解码器的loss时,我们就可以从标准差向量中采样,然后加到我们的均值向量上,就得到了编码去需要的潜在变量。

这里写图片描述

VAE除了能让我们能够自己产生随机的潜在变量,这种约束也能提高网络的产生图片的能力。

为了更加形象,我们可以认为潜在变量是一种数据的转换。

我们假设我们有一堆实数在区间[0, 10]上,每个实数对应一个物体名字。比如,5.43对应着苹果,5.44对应着香蕉。当有个人给你个5.43,你就知道这是代表着苹果。我们能用这种方法够编码无穷多的物体,因为[0, 10]之间的实数有无穷多个。

但是,如果某人给你一个实数的时候其实是加了高斯噪声的呢?比如你接受到了5.43,原始的数值可能是 [4.4 ~ 6.4]之间的任意一个数,真实值可能是5.44(香蕉)。

如果给的方差越大,那么这个平均值向量所携带的可用信息就越少。

现在,我们可以把这种逻辑用在编码器和解码器上。编码越有效,那么标准差向量就越能趋近于标准高斯分布的单位标准差。

这种约束迫使编码器更加高效,并能够产生信息丰富的潜在变量。这也提高了产生图片的性能。而且我们的潜变量不仅可以随机产生,也能从未经过训练的图片输入编码器后产生。

VAE的效果如何?

我做了一些小实验来测试VAE在MNIST手写数字数据集上的表现:

这里写图片描述

使用VAE的优点是我们可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,但是GAN做不到。

另外,VAE的一个缺点是没有使用对抗网络,所以会更趋向于产生模糊的图片。

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

更多细节可以参考以下的论文和博客:
Autoencoding beyond pixels using a learned similarity metric
Generating Large Images from Latent Vectors

你也可以从这里获得这篇博客的代码,这是原始的代码


以上是翻译全文

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xg123321123/article/details/77947677

智能推荐

UNIX-Linux环境编程(八):网络通信_linux recv perror-程序员宅基地

文章浏览阅读248次。网络通信一、基本概念1. ISO/OSI七层网络协议模型2. TCP/IP协议族3. TCP/IP协议与ISO/OSI模型的对比4. 消息流5. 消息包6.IP地址二、套接字(Socket)1. 接口2. 模式3. 绑定4. 函数5. 编程三、基于TCP协议的客户机/服务器模型1. 基本特征2. 编程模型3. 常用函数四、基于UDP协议的客户机/服务器模型1. 基本特征2. 编程模型3. 常用函数之前有写过socket网络编程的一些基本概念,最近对一些知识点进行梳理之后打算详细的、有层次地归纳一下这些基础_linux recv perror

kendo ui收费版和开源版的区别-程序员宅基地

文章浏览阅读371次。Kendo UI Core Kendo UI Professional 适用项目 无需专门技术支持的开源或商业项目,或者商务型风格的应用 需要专业且及时的技术支持的项目 包含组件 ..._kendo-ui pdf生成是要钱的吗

计算机网络(5)体系结构:计算机网络分层结构-程序员宅基地

文章浏览阅读5.8k次,点赞4次,收藏9次。1、计算机网络分层的的原因和概念两个系统间实体的通讯是很复杂的过程,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机网络的体系结构以分层的方式进行建模。 我们把计算机网络的各层及其协议的集合称为网络的体系结构。换言之,计算机网络的体系结构就是这个计算机网络及其所完成的功能的精确定义,它是计算机网络中的层次、各层的协议及层口接口的集合..._计算机网络分层结构

计算机如何驱动无线网络,详细教你电脑无线网卡驱动怎么安装-程序员宅基地

文章浏览阅读6k次。新安装的电脑要安装无线网卡驱动才能连上WiFi网络,这样电脑才能正常上网,但是一些电脑新手没有操作过这样的操作程序,不禁在网上发问电脑无线网卡驱动怎么安装,下面,小编就教大家安装电脑无线网卡驱动的操作方法。无线网卡就是既能接受无线信号,又能发射无线信号的网络设备,而无线网卡就需要安装无线网卡驱动。那么无线网卡驱动怎么安装呢?有些网友不知道该怎么操作,其实方法很简单。小编给大家讲解一下关于如何安装无..._怎样安装无线网卡驱动程序

Winform 判断Combobox控件先择值是否为空_imagecomboboxedit 如何判断未空-程序员宅基地

文章浏览阅读6.1k次。前面用.Item试了下,结果是取到绑定在Combobox的数据,不管有没有选择,都会满足不为空的要求,后来就用Text试了下,满足我所需要的要求。(Combobox内我没有设置默认显示某值)if (Combobox.Text.Trim().Length != 0){ MessageBox.Show("Combobox不为空!");}else{ MessageBox.Show("Comb_imagecomboboxedit 如何判断未空

每天掉多少根头发才会秃?你猜!-程序员宅基地

文章浏览阅读975次。最近……遇到了人生中最大的难题我开始疯狂掉头发了一开始觉得只是掉几根头发没什么大事后来发现自己发际线居然后移了!我年纪轻轻的难道要秃了???为什么?难道真如萌萌说的是老天..._一天掉几十根头发会不会掉光

随便推点

鸿蒙系统有什么特别之处,华为发布鸿蒙系统,鸿蒙系统有什么特别之处在哪里下载开源吗...-程序员宅基地

文章浏览阅读604次。8月9日下午,华为开发者大会正式召开!14:50华为消费者业务CEO余承东称,今年上半年智能手机出货量1.18亿台,同比增长24%。二季度出货量减少约1000万台。华为手机在国内份额占比35%,全球份额占比为17.6%。过去八年,华为消费者业务销售量增长68倍,2018年手机出货量2.06亿台。前瞻:华为开发者大会前瞻一:华为发布面向2025十大趋势2019年,华为基于对交通、零售、金融、制造、航...

install packages & pip 应用 & 虚拟环境_install package和pip install-程序员宅基地

文章浏览阅读683次。参考https://packaging.python.org/tutorials/installing-packages/#id7链接的目录1.确定python版本:命令行:python --version;shell(IPython & Jupyter notebook):# ensure that commands are run in the Python installation matching the currently running notebookIn [1]: ._install package和pip install

给学校计算机室申请计算机报告,小学计算机室工作总结 [小学计算机教师工作总结报告]...-程序员宅基地

文章浏览阅读273次。在计算机教学中,教师是教学的研究者、设计者、开发者,是学生学习实践的指导者、组织者、评价者,是学生课题小组、学习小组学习的组织者和协作者,是学生学习环境的管理者。今天小编给大家整理了小学计算机教师工作总结,希望对大家有所帮助。小学计算机教师工作总结范文一一、开展好常规教学。1、开学初,便结合我校的计算机硬件实际,制定出切实可行的教学计划,并严格按教学计划进行上课。在教学过程中,对具体的教学内容都进...

7-19 计算火车运行时间 (15分)_根据火车的出发时间和达到时间,编写程序c++-程序员宅基地

文章浏览阅读465次。本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。输入格式:输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。输出格式:在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。输入样例:1201 1530输出样例:03:29【源代码】#include <iostream>#include_根据火车的出发时间和达到时间,编写程序c++

【C语言】单链表逆转-程序员宅基地

文章浏览阅读48次。单链表逆转

三分钟使用vue-json-excel插件,将table表格数据导出为Excel文件实践_vue2 vue-json-excel 分sheet-程序员宅基地

文章浏览阅读1.5k次。提示:我这是使用了element-ui样式框架,默认是您已经安装了element-ui安装vue-json-excel插件npm install vue-json-excel --save引入vue-json-excel组件<template> <div> <download-excel :fields = "json_field..._vue2 vue-json-excel 分sheet