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. CentOS 6.5 x64下安装VMware tools

    [root@CentOS6 /]# mount /dev/cdrom /mnt mount: block device /dev/sr0 is write-protected, mounting re ...

  2. Openwrt 刷机后配置WAN口,安装luci和设置中文、安装挂载USB存储。

    官方版本的ROM编译时时没有把luci和uhttpd打包进去的,所以,要ssh登录到路由器后手动安装,默认用户名root,密码是空. 如果你的路由器是挂载在其他路由下面的,DHCP可以获取到IP,能正 ...

  3. 那些好用的Chrome 插件

    1. json-viewer 推荐理由:一款Chrome浏览器查看JSON数据自动格式化显示的浏览器插件 https://github.com/tulios/json-viewer

  4. crawler_exa2

    优化中... #! /usr/bin/env python # -*- coding:utf-8 -*- # Author: Tdcqma ''' v17.0920.1401 基本功能实现,漏洞标题与 ...

  5. TF的模型文件

    TF的模型文件 标签(空格分隔): TensorFlow Saver tensorflow模型保存函数为: tf.train.Saver() 当然,除了上面最简单的保存方式,也可以指定保存的步数,多长 ...

  6. Git进阶用法

    Git高阶用法 1. 基本概念 你的本地仓库由Git维护的三棵树组成.第一个是你的工作目录,它持有实际文件:第二个是缓存区(Index),它像个缓存区域,临时保存您的改动:最后是HEAD,指向你最近一 ...

  7. Java多线程:volatile 关键字

    一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存 ...

  8. 关于QQ邮箱有时候接受不到邮件的解决

    1.很可能是被当作垃圾邮件拦截了,这时候就要自己找回 2.首先点击邮箱首页 3.在最后一行倒数第三个选择自助查询 4.一般在收信查询或者删信查询里面,找到被删的邮件,添加到白名单就好了

  9. 【分享】Web前端开发第三方插件大全

    收集整理了一些Web前端开发比较成熟的第三方插件,分享给大家. ******************************************************************** ...

  10. TeamViewer 版本v13.2.26558 修改ID

    TeamViewer 使用频繁后会被判定为商业用途,不可用.此软件的账号和设备mac地址绑定. 修改TeamViewer ID后可以重新开始使用.下述方法可以成功修改TeamViewer ID. Wi ...