本文是《Tutorial on Variational AutoEncoders》一文部分翻译的内容。

1.介绍

generative model,学习高维数据的概率分布P(X)P(X)。学习到不同维度之间的相互依赖关系,比如手写数字的生成模型如果生成了8的左边一半像素,那么剩下的像素也就能够随之确定。

latent variable,给予生成模型一些信息用来生成数据。比如一个生成手写数字的生成模型,隐变量z就可以是从[0,…,9]中随机采样的整型,确定了隐变量模型才能生成像素点。

但是隐变量又不可能那么简单,因为对于一个能够表达出数据集特性的生成模型,对于每个数据点,生成模型都要能够产生出一个隐变量来生成一个非常相似的东西。对手写数字数据集来说,同样的一个8,可能大一点或者小一点,往左歪一点或者往右歪一点,字迹是粗一点还是细一点。所以,生成模型中隐变量需要表达更多的信息,需要一个高维度的向量来表示隐变量z∈RZz∈RZ,隐变量要能够自动的学习到这些信息的表示,而且这些影响手写数字生成的信息之间的相互影响和依赖,即隐变量的latent structure,也应该自动的学习。

2.目标函数

VAE的过程是:从概率密度函数P(z)中采样隐变量z之后,从确定性函数f(z;θ)f(z;θ)得到的值,这个值要大概率和数据集中的数据很相似。

所以我们的目标是对数据集中的所有数据x,最大化:

P(X)=∫P(X|z;θ)P(z)dzP(X)=∫P(X|z;θ)P(z)dz

其中的条件概率P(X|z;θ)P(X|z;θ)等于N(X|f(z;θ),σI)N(X|f(z;θ),σI),也就是在标准VAE中,如果输出是实数向量,通常输出的分布是均值为f(z;θ)f(z;θ)方差为σIσI的高斯分布。

VAE要最大化P(x),就要解决两个问题:

  • 隐变量z如何表示?

使用标准正态分布N(0,I)N(0,I),因为只要有一个n维标准正态分布的z,再找到一个足够复杂的函数g,那么g(z)就可以表示任意一个n维分布。

对上面的公式而言,f(z;θ)f(z;θ)就是一个多层神经网络组成的函数逼近器。可以将将隐变量映射到最后的输出。

  • P(X)P(X)的积分如何计算?

现在我们得到了P(z)=N(0,I)P(z)=N(0,I),可以直接计算P(X)P(X)了吗?还是不行,假如采用抽样的方式抽样出很多z来计算P(X)P(X)的话就会发现,对于绝大多数z来说,P(X|z)P(X|z)都接近于0(因为z是标准正态分布的采样),这种方式非常低效。

VAE的解决这个问题的核心思想就是,试图抽样出有更大可能性产生X的z。而做到这一点是通过另一个分布Q(z|X)Q(z|X)来实现的,这个分布产生的Q能够以较大的可能产生X。

但是我们使用了Q分布后,P(X)P(X)积分公式就变成了Ez∼QP(X|z)Ez∼QP(X|z),我们要找到后者和P(X)P(X)之间的关系。根据P(z|X)和Q(z|X)P(z|X)和Q(z|X)的KL散度的公式进行推导,可以推出:

其中左侧的部分就是目标函数,我们要最大化这个目标函数就是在最大化对数似然概率的同时,最小化我们预测的分布Q和真实分布P之间的差异。

3.目标函数优化

那么Q(z|X)Q(z|X)是一个什么分布呢?通常的选择是,也是一个多元高斯分布N(z|μ(X),σ(X))N(z|μ(X),σ(X)),其中的μ和σμ和σ都是由神经网络学习到的映射。

所以目标函数等号右侧的最后一项就变成了两个多元高斯分布的KL散度,因为我们假定P(z)P(z)是标准多元高斯分布。在得到了Q分布之后,这一项是能够计算出来的(当然也能够利用梯度下降来优化)。

而右侧的第一项,也就是Ez∼Q[logP(X|z)]Ez∼Q[logP(X|z)],通过当前时刻的Q分布,从中采样出若干个z,然后从这若干个z中计算出P(X|z)P(X|z)作为期望的逼近值。

但是这样做的话,由于采样操作对μμ和σσ不可导,反向传播无法进行,因此,实际的VAE中使用了一个叫做reparameterization的改进,以从N(0,I)N(0,I)中抽样出数值ϵϵ后,用ϵϵ乘以方差再加上均值的结果代替从N(z|μ(X),σ(X))N(z|μ(X),σ(X))中抽样,如下图。

所以最终,VAE的优化目标就是,让最终的输出f(z)f(z)与目标xx足够接近的同时,隐变量的分布Q∼N(μ,σ2)Q∼N(μ,σ2)接近真实先验分布P∼N(0,I2)P∼N(0,I2)。

4.条件变分自编码器

为了解决某种问题,比如说给定某个人的手迹,要求生成另一些与他的手迹很像的手迹。这时候需要制定输入计算输出P(Y|X)P(Y|X),为了解决这类问题,从变分自编码器衍生出条件变分自编码器。

模型在Encoder和Decoder的输入中,增加了条件输入X,如上图。当然这张图只是一个简化版本,实际的CVAE有很多论文提出了很多不同的版本。

原文地址: http://cairohy.github.io/2017/11/17/deeplearning/Tutorial%20on%20Variational%20AutoEncoders/

Tutorial on Variational AutoEncoders相关推荐

  1. 条件式变换自编码机(conditional variational autoencoders)学习笔记(一)

    目录 前言 原文 Introduction VAE的功能 VAE的结构 隐空间的结构 用重参数化训练VAE 条件式变换自编码机(conditional variational autoencoders ...

  2. 【DL笔记】Tutorial on Variational AutoEncoder——中英文对照(更新中)

    更新时间:2018-09-25 Abstract In just three years, Variational Autoencoders (VAEs) have emerged as one of ...

  3. 基于关联规则(Variational Autoencoders)疾病预测系统实战:(pyspark FPGrowth实现频繁项集挖掘、最后给出预测模型topK准确率和召回率)

    基于关联规则(Variational Autoencoders)疾病预测系统实战:(pyspark FPGrowth实现频繁项集挖掘.最后给出预测模型topK准确率和召回率) 目录

  4. 基于变分自动编码器(Variational Autoencoders)疾病预测系统实战:(Keras实现并可视化训练和验证误差、最后给出topK准确率和召回率)

    基于变分自动编码器(Variational Autoencoders)疾病预测系统实战:(Keras实现并可视化训练和验证误差.最后给出topK准确率和召回率) 本文中使用的VAE算法以病人病史为输入 ...

  5. 基于变分自动编码器(Variational Autoencoders)进行推荐系统的实施、Keras实现并可视化训练和验证误差、最后给出topK准确率和召回率

    基于变分自动编码器(Variational Autoencoders)进行推荐系统的实施.Keras实现并可视化训练和验证误差.最后给出topK准确率和召回率 本著作改编自Dawen等人用于协同过滤目 ...

  6. 53_Auto-Encoders和Variational AutoEncoders(VAE)、PCA降维和Auto-Encoders降维的比较、Auto-Encoders变种、pytorch实现等

    1.53.Auto-Encoders和Variational AutoEncoders(VAE) 1.53.1.无监督学习 1.53.2.Auto-Encoders 1.53.3.How to Tra ...

  7. Variational Autoencoders and Nonlinear ICA: A Unifying Framework

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

  8. 变分自编码器 (Variational Autoencoders, VAEs)

    Contents Dimensionality reduction, PCA and autoencoders Dimensionality reduction Principal component ...

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

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

最新文章

  1. 给研发工程师的代码质量利器 | SOFAChannel#5 直播整理
  2. WEB前端:06_accordion手风琴效果
  3. 简单python画圣诞树图片-python圣诞树代码
  4. BAT笔试试题常见试题总结含答案(持续更新。。。)
  5. 理解JavaScript继承(二)
  6. android tv 蓝牙服务_打电话、看电话,听清大千世界,不单只有助听器,力斯顿的尖端配件“无线通”“TV伴侣”了解一下。...
  7. PowerShell对象排序(结合哈希表)
  8. Nginx 是如何实现高并发?常见的优化手段有哪些?
  9. script setup 实验性 vue 语法
  10. C++ string用法
  11. 使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体
  12. c_数据结构_队的实现
  13. 技术升级成为Linux运维人前途的魔障,是跟进还是选择被淘汰?
  14. 大前研一《思考的技术》
  15. 使用TestCafe进行UI测试
  16. 单调队列java_单调队列单调栈
  17. 使用rotate()来做一个3d贺卡
  18. 文字符号设计方法整理1--笔画字形(体)处理方法
  19. unity中脚本之间传递信息的方式
  20. 自驾指南:元旦爱车出行全攻略

热门文章

  1. 各项技术对正则表达式的支持
  2. Matlab学习笔记:画图多重设置
  3. Git学习笔记:远程仓库
  4. Linux下c和cuda混合编译,并生成动态链接库.so和使用
  5. 二十万字C/C++、嵌入式软开面试题全集宝典一
  6. 【Python】如何在文件夹里批量分割图片?
  7. [云炬创业管理笔记]第二章测试2
  8. [云炬python3玩转机器学习笔记] 3-8Numpy中的聚合运算
  9. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170327
  10. 机器学习笔试题精选(七)