Variational Autoencoder: Basic Concept
来源:互联网 发布:梦里花落知多少闻婧被 编辑:程序博客网 时间:2024/05/17 09:26
The neural network perspective
传统的 Autoencoder 结构如下图:
但是这种结构没法生成新数据,只能做数据压缩。怎么改进呢?可以考虑加一个正则项,让隐变量趋近一个单位高斯分布。
generation_loss = mean(square(generated_image - real_image)) latent_loss = KL-Divergence(latent_variable, unit_gaussian) loss = generation_loss + latent_loss
其中两个高斯分布的 KL divergence 可以套公式计算如下,
# z_mean and z_stddev are two vectors generated by encoder networklatent_loss = 0.5 * tf.reduce_sum(tf.square(z_mean) + \ tf.square(z_stddev) - tf.log(tf.square(z_stddev)) - 1,1)
值得一提的是,encoder 不是直接生成隐变量
samples = tf.random_normal([batchsize,n_z],0,1,dtype=tf.float32) sampled_z = z_mean + (z_stddev * samples)
下面用公式形式化地描述上面的过程,用
那么对单个样本
前者是重构损失,用对数是因为要极大化整体训练集的对数似然函数;后者是 KL divergence 的正则项。
假设 encoder 得到的高斯分布的均值为
The probability model perspective
如果是概率图模型的角度,有隐变量
概率图模型可以分成 Representation, Learning 和 Inference 三个任务,Representation 就是如何建立模型(有向图还是无向图),可以用 plate notation 表示;Learning 就是学习图模型里的参数,可以用比如 EM 算法来求解隐变量,于是求得联合概率分布;Inference 则是从联合概率分布中求得条件概率分布。比如我们对隐变量
变分推断(Variational Inference)的思路是这样,考虑用一个简单一些的分布
怎么理解
下面推导一下这个公式,
后一项取负数后有个名字,叫做 Evidence Lower BOund,即
我们继续来化简 ELBO,
细心的读者可以发现,其实两个式子还有一些不同的,那就是参数。ELBO 优化的参数仅仅是
The Reparametrization Trick
最后再来聊聊为什么生成隐变量
这里的问题是,网络中间出现了抽样(sampling)这个步骤,梯度回传到
Reference
- blog: Variational Autoencoders Explained
- 有代码,浅显易懂
- blog: Tutorial-What is a variational autoencoder?
- 讲的比较长,从 DL 和 GM 两个角度来理解问题。
- arxiv paper: Tutorial on Variational Autoencoders
- 背后的原理和 intuition 讲的比较多。
- Variational Autoencoder: Basic Concept
- variational autoEncoder介绍
- VAE(Variational Autoencoder)
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- VAE(Variational Autoencoder)的原理
- Basic Concept
- 变分自编码器(Variational Autoencoder)
- tensorflow1.1/variational autoencoder人脸识别
- Algorithm Basic Concept
- OFDMA basic concept
- OFDM basic concept
- OS basic concept
- Information Security Basic Concept
- Basic C# OOP Concept
- ERP basic concept
- 变分自编码VAE(variational autoencoder)及Keras 实现
- Junit单元测试多线程的问题
- 渗透测试 | 无线渗透 | 1-802.11 标准
- iOS 实现颜色渐变
- Math、Date对象
- 【Python笔记】编码一个generator实现杨辉三角
- Variational Autoencoder: Basic Concept
- 滤波器的延时计算问题
- WITH table AS及其他
- 交错序列
- 【分层实验框架】阿里妈妈大规模在线分层实验实践
- java获取网页的内容(以String形式储存)
- python--leetcode500. Keyboard Row
- Jerry's Tom
- 9-25NOIP模拟赛总结