学习总结于国立台湾大学 :李宏毅老师

自编码器 AE (Auto-encoder)    & 变分自动编码器VAE(Variational Auto-encoder)

                  

学习编码解码过程,然后任意输入一个向量作为code通过解码器生成一张图片。

VAE与AE的不同之处是:VAE的encoder产生与noise作用后输入到decoder

          

VAE的问题:VAE的decoder的输出与某一张越接近越好,但是对于机器来说并没有学会自己产生realistic的image。它只会模仿产生的图片和database里面的越像越好,而不会产生新的图片。

Why VAE?

intuitive reason:

                           

AE的过程                                                                            VAE的过程

这时给定满月与弦月之间的code,AE会得到什么?可能得到一个根本就不是月亮的东西。对于VAE,满月的code在一个noise的影响下仍然需要恢复为满月,弦月的code在一个noise的影响下仍然需要恢复为弦月。那么交集部分应该即为满月有为弦月,但是只能输出一张图像,所以可能会输出一张介于满月、弦月的月像,所以可能会得到一张比AE有意义的图像。再看VAE的流程图。m为原来的code(original code)。c为加了noise的code(Code with noise)。noise的方差是自动学习来的。那如果让机器自己学,那肯定希望方差是0好了,即变为了AE,这时重构误差(reconstruction error)就是最小的。所以要强迫方差不可以太小,设定一个限制:

加上这个最小化限制以后,方差就接近于1,不会出现方差为0了。L2正则化减少过拟合,不会learn出太trivial的solution。以上是直观的理解。下面是理论理解:

假设P(x)为像Pokemon的概率,那么越像Pokemon,这个概率越大,否则概率越低。那如果我们可以estimate出这个分布也就结束了,那怎么estimate这个高维空间上的机率分布p(x)呢(注意x是一个vector,如果知道了p(x)的样子,就可以根据p(x)sample出一张图)?可以用高斯混合模型(gaussian mixture model)。

      

高斯混合模型

现在假设共有100个gaussian,那么这100个gaussian每个都有一个weight。要做的是根据每个gaussian的weight来决定先从哪个gaussian来sample data,然后再从你决定的那个gaussian来simple data。看下图: m为整数代表第几个gaussian。第m个gaussian服从高斯分布的参数为(μm, Σm)。所以P(x)为所有高斯的综合:

参数解释:

P(m)为第m个高斯的weight。

P(x|m)为有了这个高斯之后sample出x的几率。

z~N(0, I)是从一个normal distribution里面sample出来的。 z是一个vector,每个dimension代表你要sample东西的某种特质。根据z你可以决定高斯的(μ, Σ)。高斯混合中有几个高斯就有几个mean和variance:

但是z是连续的,mean和variance是无穷多的,那么怎么给定一个z找到mean和variance呢?假设mean和variance都来自于一个function。那P(x)是怎样产生的呢?如下图:为方便假设z为一维,每个点都可能被sample到,只是中间可能性更大:

当你在z上sample出一个点后,它会对应于一个gaussian:

关键:至于哪个点对应到哪个gaussian呢,是由某个function所决定的。所以当你的高斯混合中的高斯是从一个normal distribution 产生的,那么就是相当于有无穷多的gaussian。一般可能高斯混合有512个高斯,那现在就可有无穷多的gaussian。那么又咋知道每个z对应到什么样的mean和variance呢?即这个function是咋样呢?我们知道NN就是一个function。这个function就是:

给定一个z输出两个vector,代表mean个variance。即这个function(NN)可以告诉我们在z上每个点对应到x的高斯混合上的mean合variance是多少。

那现在P(x)的样子就变了:

那z也不一定是gaussian,可以是任何东西。不用担心z的选择会影响P(x)的分布。因为NN的作用是很强大的。

所以现在问题很明朗:z为normal distribution, x|z ~N( μ(z),  σ(z) ),   μ(z)和 σ(z)是待去估计。那么就最大似然估计:x代表一个image:现在手上已经有的data(image),希望有一组mean和sigma的function可以让现在已有的data的P(x)取log后的和最大:

所以就是要调整NN的参数来最大化似然函数:

  Decoder

然后我们需要另一个分布 q(z|x): 给定x,输出z上的分布的mean和variance:

即这里也有一个function(NN),给定一个x输出z的一个mean和variance:

  Encoder

公式推导:

这里q(z|x)可以是任何一个分布,所以积分仍不变。恒等推导如下:

这样就找到了一个下界称为Lb 。之前只要找P(x|z),现在还要找q(z|x)来maximizing Lb。

q(z|x)和p(z|x)将会越来越相近。

即最小化KL(q(z|x) || P(z))

 

怎么最大似然呢?使得mean正好等于x:这也就是auto-encoder做的事情:

另:

VAE(Variational Autoencoder)的原理

变分自编码器(VAEs)

变分自编码器

编码器AE & VAE的更多相关文章

  1. 变分(图)自编码器不能直接应用于下游任务(GAE, VGAE, AE, VAE and SAE)

        自编码器是无监督学习领域中一个非常重要的工具.最近由于图神经网络的兴起,图自编码器得到了广泛的关注.笔者最近在做相关的工作,对科研工作中经常遇到的:自编码器(AE),变分自编码器(VAE),图 ...

  2. 基于变分自编码器(VAE)利用重建概率的异常检测

    本文为博主翻译自:Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability,如侵立 ...

  3. Pytorch入门之VAE

    关于自编码器的原理见另一篇博客 : 编码器AE & VAE 这里谈谈对于变分自编码器(Variational auto-encoder)即VAE的实现. 1. 稀疏编码 首先介绍一下“稀疏编码 ...

  4. 4.keras实现-->生成式深度学习之用变分自编码器VAE生成图像(mnist数据集和名人头像数据集)

    变分自编码器(VAE,variatinal autoencoder)   VS    生成式对抗网络(GAN,generative adversarial network) 两者不仅适用于图像,还可以 ...

  5. VAE变分自编码器实现

    变分自编码器(VAE)组合了神经网络和贝叶斯推理这两种最好的方法,是最酷的神经网络,已经成为无监督学习的流行方法之一. 变分自编码器是一个扭曲的自编码器.同自编码器的传统编码器和解码器网络一起,具有附 ...

  6. Generative Adversarial Nets(原生GAN学习)

    学习总结于国立台湾大学 :李宏毅老师 Author: Ian Goodfellow • Paper: https://arxiv.org/abs/1701.00160 • Video: https:/ ...

  7. 深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载,原文. 选自 Open AI 作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BRO ...

  8. [CVPR2018] Context-aware Deep Feature Compression for High-speed Visual Tracking

    基于内容感知深度特征压缩的高速视觉跟踪 论文下载:http://cn.arxiv.org/abs/1803.10537对于视频这种高维度数据,作者训练了多个自编码器AE来进行数据压缩,至于怎么选择具体 ...

  9. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

随机推荐

  1. [luogu4201][bzoj1063]设计路线【树形DP】

    题目描述 Z国坐落于遥远而又神奇的东方半岛上,在小Z的统治时代公路成为这里主要的交通手段.Z国共有n座城市,一些城市之间由双向的公路所连接.非常神奇的是Z国的每个城市所处的经度都不相同,并且最多只和一 ...

  2. Raspbian开启root账户

    启用root账户 使用默认用户pi,密码raspberry登录树莓派 sudo passwd root #给root账户设置密码 sudo passws --unlock root #解除root账户 ...

  3. Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)

    Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...

  4. HDU 3338 Kakuro Extension (网络流,最大流)

    HDU 3338 Kakuro Extension (网络流,最大流) Description If you solved problem like this, forget it.Because y ...

  5. 【POJ3061】Subsequence

    题目大意:给定一个有 N 个正整数的序列,求出此序列满足和大于等于 S 的长度最短连续子序列. #include <cstdio> #include <algorithm> u ...

  6. react缓存问题

    问题一: 问题描述: 我们公司自己的react项目,先打包部署v1.1版本,一切正常. v1.2版本做了很多页面和功能的修改和新增,但是打包部署之后,发现有些界面还是保持了v1.1的状态,比如有些新增 ...

  7. MATLAB:图像减法运算(imsubtract函数)

    图像减法运行涉及到imsubtract函数 实现代码如下: clear all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc close all; A=imread('ca ...

  8. eclipse复制工作空间配置

    eclipse复制工作空间配置   eclipse复制工作空间配置 总结一下,复制工作空间配置步骤如下: 1 使用eclipse新建workspace. 2 将新建的workspace下的.metad ...

  9. 搭建Telnet服务器

    搭建Telnet服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 可能大家都知道现在已经很少有人用TELNET服务器, 因为它传输数据是以明文的方式,我们很容易通过抓包软件讲数 ...

  10. JAVA记录-POST与GET方式区别

    1.get是从服务器上获取数据的一种请求,post是向服务器提交数据的一种请求. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到 ...