(译) Conditional Variational Autoencoders 条件式变换自编码机
Conditional Variational Autoencoders --- 条件式变换自编码机
Goal of a Variational Autoencoder:
一个 VAE(variational autoencoder)是一个产生式模型,意味着我们可以产生看起来像我们的训练数据的 samples。以 mnist 数据集为例,这些伪造的样本可以看做是手写字体的合成图像。我们的 VAE 将会提供我们一个空间,我们称之为 latent space (潜在空间),我们可以从这里采样出 points。任何这些点都可以 decoded into 一个合理的手写字体的图像。
Structure of a VAE :
任何自编码机的目标都是重建其输入。通常,自编码机首先讲 input 压缩为一个小的 form,然后将其转换成 input的一个估计。这个被用于压缩图像的函数,称为 "encoder",解压该数据的函数称为 “decoder”。这些函数都可以是神经网络,我们这个文档中考虑的都是这种情况。

标准的自编码机可以工作的很好,如果你的目标是简单的重建你的输入,但是作为产生式模型,其效果并不是很好,因为随机的采样一个输入 V 给 decoder,并不能使得 decoder 产生合理的图像。 V 可能距离任何输入都很远,所以 decoder 可能永远都不会训练得到合理的数字图像,当给定的输入像 V 的时候。
我们需要一些方法来确认 the decoder 已经准备好了可以去 decode 出任何我们给定的合理的数字图像。为了达到这个目的,我们将会需要预先定义 decoder 希望看到的 输入的分布 (the distribution of inputs)。我们将会使用一种标准的 正态分布 来定义 decoder 将会接收到的 输入的分布。

我们想要训练 the decoder 从这个分布中随机的采样一个点,并且可以恢复出合理的 数字图像。

我们现在需要一个 encoder。在传统的自编码机当中,the encoder 从数据中采样出一个样本,并且在 latent space 中返回给一个点,然后将其传给 decoder。在一个 Variational autoencoder 中,编码机在 latent space 中产生一个概率分布。

The latent distributions 其输出是和 latent space 相同纬度的高斯 (gaussians of the same dimensionality as the latent space)。The encoder 产生这些高斯的参数。
所以我们有一个 encoder 从图像中采样,产生 latent space 的概率分布,the decoder 在 latent space 中采样该点,然后返回一个伪造的图像。所以对于一张给定的图像来说,the encoder 产生一个分布,在 latent space 中该分布中采样出一个点出来,然后将该点输入到 decoder 当中,产生一个人造图像。

The Structure of the Latent Space.
我们看到了之前 the decoder 应该期望看到从标准正态分布中采样的点。但是,现在我们已经表明,decoder 接收到的 samples 并非是标准的正态分布。这两个东西都不是非常的奇怪,即使,当从 encoder 中采样出的 points 仍然近似的拟合一个标注的正态分布的情况。我们想要这样的情况:

其中,不同分布的平均值 对应了 不同训练训练样本估计的标准正态 (a standard normal)。现在的假设是 the decoder 看到的 points, drawn from a standard normal distribution holds.
很明显,我们需要一些方法来衡量是否 the encoder 产生的分布的和 (sum)可以估计 (approximat)标准的正太分布。我们可以利用KL-散度(Kullback-Leibler divergence)衡量该估计的质量。KL-散度 衡量了两个分布的差异程度 (measures how different two probability distributions are)。
Training a VAE with The Representrization Trick.
在上述讨论的 VAE 当中,网络的输入和输出之间,有一个随机的变量。通过一个随机变量是无法后向传播的,其代表了一个很明显的问题是:你现在无法训练 the encoder。为了解决这个问题,the VAE 被表达成不同的方式,使得 the latent distribution 的参数可以分解为随机变量的参数,使得后向传播可以沿着latent distribution 的参数继续传播。
具体来说,就是
。但是,一个很重要的启发是:一个 VAE 可以利用 BP 算法进行 end-to-end 的训练。但是,由于仍然存在一些随机的元素,所以不被称为随机梯度下降,该训练过程被称为:随机梯度变化的贝叶斯(stochastic gradient variational Bayes (SGVB))。
Conditional Variational Autoencoder :
到目前为止,我们已经创造了一个 autoencoder 可以重建起输入,并且 decoder 也可以产生一个合理的手写字体识别的图像。该产生器,但是,仍然无法产生一个需要的特定数字的图像。进入 the conditional variational auroencoder (CVAE)。该条件式变换自编码机 有一个额外的输入给 encoder 和 decoder。

在训练的时候,输入给 encoder and decoder 的图像对应的数字是给定的。在这种情况下,将会被表示成 one-hot vector.
为了产生一个特定数字的图像,将该数字输入给 the decoder 以及服从标准正态分布采样出的 latent space 中的一个随机点。尽管 同样的点 被输入进来来产生呢两个不同的数字,这个过程将会正确的工作,因为系统不在依赖于 the latent space 来编码你要处理的数字。相反的,the latent space 编码了其他的信息,像 stroke width 或者说 the angle。

下面的这些数字图像就是通过固定所需要的数字输入给 the decoder,然后从 the latent space 中取一些随机的样本来产生一些有用的,不同版本的那个数字。像您所看到的那样,这些数字在类型上有所不同,但是同一行的数字,很明显是同一个数字。
Conclusion
VAEs 是非常有效的无监督学习工具。标准 VAE 的 latent space 应该捕获到你的数据中有用的模式。例如,我们可以看到,一个 VAE 在没有任何 label 的情况下训练,可以成功的分类出 mnist 图像,分为 latent space 中 10个具有区分度的区域,每个区域包含几乎某个数字所有的图像。 CVAEs 对于产生匹配 某些 labels 的伪造样本来说,是非常有用的。对于处理 时序数据,VAEs 也非常有用,只需将 the encoder and the decoder 替换为 RNNs 即可。
(完毕)
----------------------------------------------------------------------------
原文链接: http://ijdykeman.github.io/ml/2016/12/21/cvae.html
(译) Conditional Variational Autoencoders 条件式变换自编码机的更多相关文章
- 条件式变分自编码机(Conditional Variational Autoencoders)
Conditional Variational Autoencoders 条件式变换自编码机 摘要: Conditional Variational Autoencoders --- 条件式变换自编码 ...
- Latent Representation Learning For Artificial Bandwidth Extension Using A Conditional Variational Auto-Encoder
博客作者:凌逆战 论文地址:https://ieeexplore.ieee.xilesou.top/abstract/document/8683611/ 地址:https://www.cnblogs. ...
- Understanding Variational Autoencoders (VAEs)
Understanding Variational Autoencoders (VAEs) 2019-09-29 11:33:18 This blog is from: https://towards ...
- Improving Variational Auto-Encoders using Householder Flow
目录 概 主要内容 代码 Tomczak J. and Welling M. Improving Variational Auto-Encoders using Householder Flow. N ...
- [Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders
本是neural network的内容,但偏偏有个variational打头,那就聊聊.涉及的内容可能比较杂,但终归会 end with VAE. 各个概念的详细解释请点击推荐的链接,本文只是重在理清 ...
- 基于图嵌入的高斯混合变分自编码器的深度聚类(Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedding, DGG)
基于图嵌入的高斯混合变分自编码器的深度聚类 Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedd ...
- Variational Autoencoders and Nonlinear ICA: A Unifying Framework
目录 概 主要内容 本文的模型 Identifiability Khemakhem I., Kingma D. P., Monti R. P. and Hyv"{a}rinen A. Var ...
- Variational Auto-Encoders原理
目录 AE v.s. VAE Generative model VAE v.s. GAN AE v.s. VAE Generative model VAE v.s. GAN
- PP: Time series anomaly detection with variational autoencoders
Problem: unsupervised anomaly detection Model: VAE-reEncoder VAE with two encoders and one decoder. ...
随机推荐
- 对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
在J2EE框架下开发web网站,这种问题经常遇到,只要我们网上搜一下,就可以看到很多版本的,我整理一下: 第一种可能性解决:看看我的项目:主要 是里面的Structs 1.3 (structs 2)和 ...
- wp8开发笔记之开发环境的搭建
开发工具的下载: Windows phone sdk 8.0下载地址: http://www.microsoft.com/ZH-CN/download/details.aspx?id=35471 开发 ...
- spring boot 跨域访问处理
问题场景:由于项目中使用到跨域访问,今天也得到高人指点,所以写出来分享给大家.可能是考虑到前后端分离,前端后端服务器不在一台机器上,出现这种跨域访问的情况.正常情况下本地访问是没有问题,但是遇到这种非 ...
- sql语句格式化数字(前面补0)、替换字符串
以下是详细分析: 1.select power(10,3)得到1000(即:10的3次方) 2.select cast(1000+33 as varchar) 将1000转换类型(即:将int转化成v ...
- X3850M2安装CertOS 7 KVM 2--Mount
x3850 m2设备接的存储是DS8000,检查发现系统下有两块disk是IBM2107900,一块容量为215GB,另一块是4GB.原因简单,4GB是以前高可用群集时用来做仲裁盘的. 奇怪的是,每块 ...
- 用JAVA写简单的栈
package com.gailekesi.example.expl_tuple; import javax.naming.NameNotFoundException; import java.awt ...
- thymeleaf的常见用法
1,th:属性名="",就可以直接修改控件的属性,比如 <input th:type="button" th:name="xinxin" ...
- android优秀Github源码整理
1.https://github.com/sd6352051/NiftyNotification 2.https://github.com/sd6352051/NiftyDialogEffects 3 ...
- final修饰的变量是引用不能改变,还是引用的对象不能改变???
对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码: public class Demo { public static void main(String[] args) { final St ...
- BZOJ3669 (动态树)
Problem 魔法森林 (NOI2014) 题目大意 给n个点,m条边的无向图,每条边有两个权值a,b. 求一条从1-->n的路径,使得这条路径上max(a)+max(b)最小.输出最小值即可 ...