https://www.zhihu.com/question/41490383/answer/103006793

自编码是一种表示学习的技术,是deep learning的核心问题

让输入等于输出,取中间的一层作为embedding, 即编码

对中间的隐层进行约束,就可以得到不同类型的编码

h<x,这就是普通的降维编码

h>x, 并且约束其稀疏性,就得到稀疏编码

自编码网络,可以理解为,

完成训练后,Decoder部分就没有用了

堆叠自编码器(Stacked Auto-Encoder, SAE)

我们可以把AE进行堆叠,这样就有些像deep learning

只是这里的训练是逐层逐个训练

各种自编码的变形

VAE (variational autoencoder)

https://www.cnblogs.com/wangxiaocvpr/p/6231019.html

https://www.bilibili.com/video/av10590361/?p=29

李宏毅机器学习

VAE的差别

和普通autoecoding比,

VAE的Encoder会输出两个向量,你可以把其中一个看成mean,另一个看成variance

同时还要加入一个误差error,这个error是从一个高斯分布sample出来的

最终把这3个向量合成成code,variance要乘上一个noise,然后加在mean上

VAE为什么会有作用?

先看一种intuituive的解释,

左边的图,对于普通的AE,如果在满月和弦月的code的中间调一个点,去做decode会得到什么?

答案是不确定,因为你对code的分布并没有任何的约束

而VAE引入了noise,所以对于相同的input经过encoder后虽然得到的mean和variance是相同的,但是noise是不同的,所以会有一些较小的误差

如右边的图,所以对于VAE在这样的一个误差范围内的点,而不是仅仅一个点都应该能decode到满月或弦月

那么对于noise区间重合的地方,就会产生渐进的图,要同时和满月或弦月都比较相似,如最右图所示

下图显示如何将original code转化为noise code

可以看到这里的variance是学习到的,这里之所以要exp是保证variance为正

好,那单纯的这样去训练是不是会产生我们希望的效果?

答案是不会的,因为惰性是存在万事万物中的,能简单解决,网络也不会把自己搞的很复杂

这里如果没有任何约束,那么训练出来只要variance全为0就ok了,这样就等同于普通的AE

所以还需要加一个约束

这个约束的红,蓝部分,如果要minimize,相减为0,这样就保证variance接近于1 (variance = exp(a))

可以看到这个约束本身就会保证有一定的noise存在

然后后面的m平方的项是,L2 regularization,正则项

变分自编码器(Arxiv Insights)

https://www.bilibili.com/video/av20165127/

这个视频解释为何要加上noise误差?

对于VAE,Encoder网络是生成mean vector,deviation,这就确定了一个分布,然后在这个分布上sample出一个latent vector作为code

这里的问题,怎么表达sample这个过程,因为后面需要做backpropagation

所以用reparameterization trick

这里就是用noise来模拟sample的过程

现在有了Intuitive的解释,VAE formal的解释是什么?

VAE作为生产模型,目的就是要能生成对象,比如图片,x

那么我们怎么判断x生成的好坏了?直观上来讲,就是看看这个图片和我们的样本是否一样,和我们常见的case是否一样,即P(x)是否大

比如下面的例子,生成pokemon,x越像一个pokemon,p(x)就越大

所以对于生成模型而言,最关键的是要求出P(x),有了P(x),只需要sampleP较大的x,就能得到比较合理的结果图片

P(x)又取决于选用什么模型,比如用混合高斯模型,

高斯混合,是有若干个高斯分布叠加成的,比如m个,

所以首先选中某个高斯的weight为p(m),p(x|m)就符合该选中的高斯分布

而VAE相当于一个,连续的高斯混合,即这里有无限个高斯分布

选择到某个高斯分布的weight为P(z), 符合标准高斯分布

z代表选中第z个高斯分布,然后P(x|z)的高斯分布的参数,mean,variance是通过nn求得

虽然z是个标准高斯,但只要nn足够复杂,得到的分布也可以是任意的

那么这里的Maximizing Likelihood,

对于P(x)的公式,P(z)是固定的,P(x|z)是需要求的

怎么求,用Maximizing Likelihood,就让所有x的P(x)达到最大,这里的log是为了把连乘变成连加

这里说的是VAE的decode部分,P(x|z)

但是光decode没法训练啊,所以还需要encode,所以再引入一个q(z|x)

这里怎么将decode和encode连起来了?后面会说

把q(z|x)加到公式中,最后得到一个low bound

这里看到P(x),有Lb和一个KL决定

假设我们先固定其他部分,先调整q(z|x),由于q(z|x)和P(x)无关,所以调整q(z|x)不会改变P(x)整体的大小,只会改变Lb和KL的比例

如果调整q(z|x),让它尽量接近于p(z|x),那么KL项就接近于0,这时Lb就接近于P(x)

这样,我们再去调整P(x|z),来增加Lb,就等同于增加P(x)

那么现在的目标就是要max这个Lb,

最终Lb可以分解成两部分,

一部分是q(z|x)和P(z)的KL散度,这部分是要最小化的,因为前面有个负号,就是让q(z|x)和P(z)尽量接近,这样就把encode的输出和decode的输入连接上了

因为这里P(z)是个标准的高斯分布,这里就是让encode的输出,q(z|x)也变成一个标准的高斯分布

最小化这个KL就等同于最小化黄框中的约束,为什么要看paper

第二项,最大化底下的式子,

描述就是,给定一个x,通过q(z|x)sample一个z,然后使得P(x|z)最大,这个就是一个完整的auto-encoder的过程

这就从理论上formal的解释了,为何VAE这样做有效

VAE (variational autoencoder)的更多相关文章

  1. VAE(Variational Autoencoder)的原理

    Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint ar ...

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

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

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

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

  4. (zhuan) Variational Autoencoder: Intuition and Implementation

    Agustinus Kristiadi's Blog TECH BLOG TRAVEL BLOG PORTFOLIO CONTACT ABOUT Variational Autoencoder: In ...

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

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

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

    原文地址:http://www.dengfanxin.cn/?p=334 1. 神秘变量与数据集 现在有一个数据集DX(dataset, 也可以叫datapoints),每个数据也称为数据点.我们假定 ...

  7. Variational Auto-encoder(VAE)变分自编码器-Pytorch

    import os import torch import torch.nn as nn import torch.nn.functional as F import torchvision from ...

  8. PP: Unsupervised anomaly detection via variational auto-encoder for seasonal KPIs in web applications

    Problem: unsupervised anomaly detection for seasonal KPIs in web applications. Donut: an unsupervise ...

  9. 编码器AE & VAE

    学习总结于国立台湾大学 :李宏毅老师 自编码器 AE (Auto-encoder)    & 变分自动编码器VAE(Variational Auto-encoder)             ...

随机推荐

  1. easyui combox 手动添加项

    $('#comzwcf').combobox({ valueField: 'id', textField: 'text', }); $.ajax({ url: '/Provider/HandlerIr ...

  2. Rabbit五种消息队列学习(二) – 简单队列

    队列结构图 P:消息的生产者 C:消息的消费者 红色:队列 生产者将消息发送到队列,消费者从队列中获取消息. 测试 1.连接MQ public static Connection getConnect ...

  3. Effective Java 第三版——77. 不要忽略异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  4. Atitit 最近资料文章列表r9 r8 月份 attilax总结

    Atitit 最近资料文章列表r9  r8 月份   attilax总结 atitit tag标签标示规范 attilax总结 v2 r922.docx 2017-09-28 02:04 阅读(27) ...

  5. Sublime text 3 格式化代码 插件

    JsFormat: 重新打开sublime就能使用js格式化插件 使用方法: 1.快捷键:ctrl+alt+f 2.或者先用快捷键打开命令面板 “ctrl + shift + p”, 再输入 “For ...

  6. docker下创建crontab定时任务失败

    创建过程 基础镜像采用的centos7.2,需要安装一下crontab,在dockerfile中加以下语句就可以了: # crontab jobs RUN yum -y install crontab ...

  7. python3 log 日志记录

    在调试的过程中,很多地方需要用到日志 如下 import logging LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s&qu ...

  8. 利用TortoiseGit(小乌龟)将项目上传至GitHub网站

    准备 1.拥有一个GitHub账户 2.安装了TortoiseGit(小乌龟) 具体过程 一.在GitHub上建立新的仓库 起好仓库名,填好描述,在Add .gitgnore中选择Java(根据你自己 ...

  9. python 文档

    python 文档 https://docs.python.org/2/library/index.html

  10. [原创]Cadence Allegro小技巧之解决Out of date shapes问题

    Allegro报错“Dynamic shapes are out of date; please update them. Check for out of date shapes in Setup ...