本文主要是介绍Autoencorder理解(7):Variational Autoencoder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以下将分为6个部分介绍:
- vae结构框架
- vae与ae区别
- 提及一下为什么要采样
- 如何优化
- vae应用
- vae生成/抽象看待vae学习
1.框架:
先来看一下VAE的结构框架,并先预告一下结论: VAE 包括 encoder (模块 1)和 decoder(模块 4) 两个神经网络。两者通过模块 2、3 连接成一个大网络。利益于 reparemeterization 技巧,我们可以使用常规的 SGD 来训练网络。
Figure1.VAE framework.2.区别:
个人认为和ae在本质上的区别在于z code的生成方式,以及loss的定义. 先看一下torch vae中的代码对loss的定义:
以及梯度的回传:
所以结论为:
1)在ae中,z是encoder直接的显式输出的神经元向量,decoder出来的衡量为距离.
2)在vae中,encoder 的输出(2×m 个数)视作分别为 m 个高斯分布的均值(z_mean)和方差的对数(z_log_var)而输入decoder的z是根据均值和方差生成服从相应高斯分布的随机数的一个向量.对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正式这种约束,把VAE和标准自编码器给区分开来了。 如下:
这篇关于Autoencorder理解(7):Variational Autoencoder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!