Conditional Variational Autoencoders 条件式变换自编码机

摘要:

Conditional Variational Autoencoders --- 条件式变换自编码机      

Goal of a Variational Autoencoder:    

一个 VAE(variational autoencoder)是一个产生式模型,意味着我们可以产生看起来像我们的训练数据的 samples。

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)的更多相关文章

  1. (译) Conditional Variational Autoencoders 条件式变换自编码机

    Conditional Variational Autoencoders --- 条件式变换自编码机 Goal of a Variational Autoencoder: 一个 VAE(variati ...

  2. Latent Representation Learning For Artificial Bandwidth Extension Using A Conditional Variational Auto-Encoder

    博客作者:凌逆战 论文地址:https://ieeexplore.ieee.xilesou.top/abstract/document/8683611/ 地址:https://www.cnblogs. ...

  3. 基于图嵌入的高斯混合变分自编码器的深度聚类(Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedding, DGG)

    基于图嵌入的高斯混合变分自编码器的深度聚类 Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedd ...

  4. [Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

    本是neural network的内容,但偏偏有个variational打头,那就聊聊.涉及的内容可能比较杂,但终归会 end with VAE. 各个概念的详细解释请点击推荐的链接,本文只是重在理清 ...

  5. Understanding Variational Autoencoders (VAEs)

    Understanding Variational Autoencoders (VAEs) 2019-09-29 11:33:18 This blog is from: https://towards ...

  6. (转) 变分自编码器(Variational Autoencoder, VAE)通俗教程

    变分自编码器(Variational Autoencoder, VAE)通俗教程 转载自: http://www.dengfanxin.cn/?p=334&sukey=72885186ae5c ...

  7. 变分自编码器(Variational auto-encoder,VAE)

    参考: https://www.cnblogs.com/huangshiyu13/p/6209016.html https://zhuanlan.zhihu.com/p/25401928 https: ...

  8. Variational Autoencoders and Nonlinear ICA: A Unifying Framework

    目录 概 主要内容 本文的模型 Identifiability Khemakhem I., Kingma D. P., Monti R. P. and Hyv"{a}rinen A. Var ...

  9. Improving Variational Auto-Encoders using Householder Flow

    目录 概 主要内容 代码 Tomczak J. and Welling M. Improving Variational Auto-Encoders using Householder Flow. N ...

随机推荐

  1. Codeforces 1140G Double Tree 倍增 + dp

    刚开始, 我以为两个点肯定是通过树上最短路径过去的, 无非是在两棵树之间来回切换, 这个可以用倍增 + dp 去维护它. 但是后来又发现, 它可以不通过树上最短路径过去, 我们考虑这样一种情况, 起点 ...

  2. 03. Pandas 2| 时间序列

    1.时间模块:datetime datetime模块,主要掌握:datetime.date(), datetime.datetime(), datetime.timedelta() 日期解析方法:pa ...

  3. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

  4. 20165235 祁瑛 2018-4 《Java程序设计》第九周学习总结

    20165235 祁瑛 2018-4 <Java程序设计>第九周学习总结 教材学习内容总结 URL类 UR类是java.net包中的一个重要类,使用URL创建的对象的应用程序称作称作客户端 ...

  5. Python编程基础[函数和面向对象](三)

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  6. Python argparse 模块

    Python argparse 模块 test.py: import argparse argparser = argparse.ArgumentParser(add_help=False) argp ...

  7. XX-NET史上最详细完整教程

     转 https://www.cnblogs.com/phperkang/p/8780123.html 前言 XX-NET,系GAE类代理,即通过可用Google ip连接Google App Eng ...

  8. Codeforces 1118F1 Tree Cutting (Easy Version) (简单树形DP)

    <题目链接> 题目大意: 给定一棵树,树上的点有0,1,2三中情况,0代表该点无色.现在需要你将这棵树割掉一些边,使得割掉每条边分割成的两部分均最多只含有一种颜色的点,即分割后的两部分不能 ...

  9. 富文本编辑器Django-ckeditor

    富文本编辑器Django-ckeditor 前言 刚开始学习django的时候,在后台编辑数据的时候,总是在想,功能是否太简陋了点,只能做简单的文本编辑,所以在这里记录一个富文本编辑器Django-c ...

  10. HDU 5113

    HDU 5113类似四色定理的什么东西,大体就是dfs了,不过有两个坑点,这个题的逼格瞬间就上去了1.剪枝很神奇,任何一种颜色都不能超过剩下总格子数的一半,想想确实显然但是比赛的时候没有想到:2.测评 ...