VAE(Variational Autoencoder)的原理

【VAE-1】——VAE教程阅读 本文为VAE原作者Diederik P. Kingma在Arxiv上的一篇解读An Introduction to Variational Autoencoders的阅读记录。原文实际上是对于自己的得意之作VAE进行更进一步的讨论,以及对follow-up的工作进行讨论的文章。 In chapter 2 we explain the basics of VAEs. In chapter 3 we explain advanced inference techniques, in chapter 4 give 阅读详情

Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." arXiv preprint arXiv:1312.6114 (2013).

论文的理论推导见:https://zhuanlan.zhihu.com/p/25401928

中文翻译为:变分自动编码器

转自:http://kvfrans.com/variational-autoencoders-explained/

下面是VAE的直观解释,不需要太多的数学知识。 

什么是变分自动编码器?

为了理解VAE,我们首先从最简单的网络说起,然后再一步一步添加额外的部分。

 

一个描述神经网络的常见方法是近似一些我们想建模的函数。然而神经网络也可以被看做是携带信息的数据结构。

 

假如我们有一个带有解卷积层的网络,我们设置输入为值全为1的向量,输出为一张图像。然后,我们可以训练这个网络去减小重构图像和原始图像的平均平方误差。那么训练完后,这个图像的信息就被保留在了网络的参数中。

 

 

现在,我们尝试使用更多的图片。这次我们用one-hot向量而不是全1向量。我们用[1, 0, 0, 0]代表猫,用[0, 1, 0, 0]代表狗。虽然这要没什么问题,但是我们最多只能储存4张图片。当然,我们也可以增加向量的长度和网络的参数,那么我们可以获得更多的图片。

 

但是,这样的向量很稀疏。为了解决这个问题,我们想使用实数值向量而不是0,1向量。我们可认为这种实数值向量是原图片的一种编码,这也就引出了编码/解码的概念。举个例子,[3.3, 4.5, 2.1, 9.8]代表猫,[3.4, 2.1, 6.7, 4.2] 代表狗。这个已知的初始向量可以作为我们的潜在变量。

 

如果像我上面一样,随机初始化一些向量去代表图片的编码,这不是一个很好的办法,我们更希望计算机能帮我们自动编码。在autoencoder模型中,我们加入一个编码器,它能帮我们把图片编码成向量。然后解码器能够把这些向量恢复成图片。

 

我们现在获得了一个有点实际用处的网络了。而且我们现在能训练任意多的图片了。如果我们把这些图片的编码向量存在来,那以后我们就能通过这些编码向量来重构我们的图像。我们称之为标准自编码器。

 

但是,我们想建一个产生式模型,而不是一个只是储存图片的网络。现在我们还不能产生任何未知的东西,因为我们不能随意产生合理的潜在变量。因为合理的潜在变量都是编码器从原始图片中产生的。

 

这里有个简单的解决办法。我们可以对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正式这种约束,把VAE和标准自编码器给区分开来了。

 

现在,产生新的图片也变得容易:我们只要从单位高斯分布中进行采样,然后把它传给解码器就可以了。

 

事实上,我们还需要在重构图片的精确度和单位高斯分布的拟合度上进行权衡。

 

我们可以让网络自己去决定这种权衡。对于我们的损失函数,我们可以把这两方面进行加和。一方面,是图片的重构误差,我们可以用平均平方误差来度量,另一方面。我们可以用KL散度(KL散度介绍)来度量我们潜在变量的分布和单位高斯分布的差异。

 

 

为了优化KL散度,我们需要应用一个简单的参数重构技巧:不像标准自编码器那样产生实数值向量,VAE的编码器会产生两个向量:一个是均值向量,一个是标准差向量。

 

 

我们可以这样来计算KL散度:

# z_mean and z_stddev are two vectors generated by encoder network

latent_loss = 0.5 * tf.reduce_sum(tf.square(z_mean) + tf.square(z_stddev) - tf.log(tf.square(z_stddev)) - 1,1)

 

当我们计算解码器的loss时,我们就可以从标准差向量中采样,然后加到我们的均值向量上,就得到了编码去需要的潜在变量。

 

 

VAE除了能让我们能够自己产生随机的潜在变量,这种约束也能提高网络的产生图片的能力。

 

为了更加形象,我们可以认为潜在变量是一种数据的转换。

 

我们假设我们有一堆实数在区间[0, 10]上,每个实数对应一个物体名字。比如,5.43对应着苹果,5.44对应着香蕉。当有个人给你个5.43,你就知道这是代表着苹果。我们能用这种方法够编码无穷多的物体,因为[0, 10]之间的实数有无穷多个。

 

但是,如果某人给你一个实数的时候其实是加了高斯噪声的呢?比如你接受到了5.43,原始的数值可能是 [4.4 ~ 6.4]之间的任意一个数,真实值可能是5.44(香蕉)。

 

如果给的方差越大,那么这个平均值向量所携带的可用信息就越少。

 

现在,我们可以把这种逻辑用在编码器和解码器上。编码越有效,那么标准差向量就越能趋近于标准高斯分布的单位标准差。

 

这种约束迫使编码器更加高效,并能够产生信息丰富的潜在变量。这也提高了产生图片的性能。而且我们的潜变量不仅可以随机产生,也能从未经过训练的图片输入编码器后产生。

 

VAE的效果:

我做了一些小实验来测试VAE在MNIST手写数字数据集上的表现:

 

这里有一些使用VAE好处,就是我们可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,但是GAN做不到。

 

另外,VAE的一个劣势就是没有使用对抗网络,所以会更趋向于产生模糊的图片。

 

这里也有一些结合VAE和GAN的工作:使用基本的VAE框架,但是用对抗网络去训练解码器。更多细节参考:https://arxiv.org/pdf/1512.09300.pdf 和http://blog.otoro.net/2016/04/01/generating-large-images-from-latent-vectors/

 

你可以从这里获得一些这篇博客的代码:https://github.com/kvfrans/variational-autoencoder 和一个整理好的版本: https://jmetzen.github.io/2015-11-27/vae.html

 

了解更多关于《计算机视觉与图形学》相关知识,请关注公众号:计算机视觉与图形学实战
【论文阅读】(VAE)Auto-Encoding Variational Bayes 阅读详情

相关推荐

VAE论文简单介绍(Auto-Encoding Variational Bayes)

VAE论文简单介绍

纸飞机的旅行的博客 3300

【论文译文】VAE

译文仅供参考! 原文是pdf,想下载的话可以戳:www.gwylab.com/download.html

a312863063的博客 1981

变分自编码器(Variational Autoencoder,VAE)的原理介绍与PyTorch实现

变分自编码器(Variational Autoencoder,VAE)是一种生成模型,结合了自编码器和概率图模型的思想,用于学习输入数据的潜在分布。在VAE中,假设输入数据x是由一个潜在变量z生成的,在编码器中,将输入数据x映射为潜在变量z的分布。变分自编码器引入了概率图模型的思想,对隐藏表示进行建模,并通过对潜在空间的采样来生成新的样本。与传统的自编码器不同,VAE不仅学习数据的低维表示,还学习隐藏表示的概率分布。其中,q(z|x)表示编码器生成的潜在分布,p(z)表示先验分布,KL表示KL散度。

Bsv___的博客 632

VAE(Variational Autoencoder) 原理

转载:https://www.cnblogs.com/huangshiyu13/p/6209016.html . Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013). 论文的理论推导见:https://zhuanlan.zhihu...

qq_30534935的博客 728

VAE:Variational Auto Encoders Tutorial with PyTorch

VAE(Variational Autoencoder)是2013年由Kingma和Welling提出的一种高效且可扩展的概率模型,主要用于学习数据分布,其编码器输出的隐变量能够捕捉到潜在的数据结构信息。通过最大化对数似然和最小化KL散度两个目标函数,将输入数据的复杂度降低为可解释性、数据重建能力和生成新样本的能力。本文基于PyTorch实现VAE算法的完整流程,包括模型搭建、训练、测试等全过程,并详细阐述了每一步中的关键步骤及数学推导,希望能够帮助读者更快、更清晰地理解和掌握VAE算法的工作机制。

AI天才研究院 1931

人工智能大模型原理与应用实战:从Autoencoder到Variational Autoencoder

1.背景介绍 人工智能(Artificial Intelligence, AI)是计算机科学的一个分支,研究如何让计算机模拟人类的智能。在过去的几年里,人工智能技术的发展非常迅速,尤其是在深度学习(Deep Learning)方面。深度学习是一种通过多层神经网络学习表示的方法,它已经取得了巨大的成功,例如在图像识别、语音识别、自然语言处理等领域。

AI天才研究院 447

[work] VAE(Variational Autoencoder)的原理

本篇博客转载自: VAE(Variational Autoencoder)的原理 OpenAI实习生讲解变分自编码机 以上两篇文章翻译自Kevin Frans的英文博客. 英文原文:Variational Autoencoders Explained 论文链接:Auto-encoding variational bayes 论文的理论推导:变分自编码器(VAEs) 以下为正文: 我曾经...

This is bill的专属博客 697

【迁移学习】域对抗迁移网络 DANN

Domain-Adversarial Training of Neural Networks

这个博客太懒了什么都没说 8418

VAE变分自编码器(Variational Autoencoder):原理详解,含数学推导

优点:具有完备的数学理论支撑;隐空间极其平滑,适合做渐变生成(Latent Walk);计算速度极快,一步到位生成。缺点:生成的图像往往非常模糊。原因:强烈的标准高斯分布假设与 MSE 损失倾向于取均值的特性,导致模型在面对复杂的边缘细节时选择了“敷衍的平滑”。VAE 完美的“隐空间压缩”思想被现代扩散模型全盘接收。现代落地:在中,第一阶段正是用一个预训练好的 VAE 将高维像素图片压入隐空间,才让后续的 Diffusion 过程省下了 90% 的算力。

xxx65183的博客 449

逆向拼多多长连接:Frida+Python协议还原实战

长连接是现代移动App实现低延迟、高并发通信的核心技术,其原理在于复用TCP通道避免HTTP频繁建连开销,并通过自定义二进制协议提升传输效率与安全性。在电商场景中,长连接不仅承载业务数据,更集成了动态密钥协商、设备指纹绑定、应用层加密等多重防护机制,显著提升数据窃取与自动化采集难度。本文聚焦真实商业级长连接逆向工程,以拼多多(PDD)v12.86.0为案例,详解如何利用Frida在JNI层精准Hook encrypt/decrypt函数捕获明文,结合Python构建协议解析器与会话管理器,实现对商品详情(I

weixin_30843121的博客 1121

解决ArcGIS-OpenStreetMap Toolbox-Load OSM File错误

在安装成功OpenStreetMap Toolbox后,首次运行Load OSM File工具,出现以下错误

Zjf的博客 8821

关于FV(Fisher Vector)和变分自编码VAE(Variational Autoencoder)的原理简介

1. FV(Fisher Vector)     FV的思想用一句话概括就是:用所有的聚类中心的线性组合去表示每个特征点     简单来说,假设样本各特征符合独立同分布(i.i.d)则样本的概率分布可以由各个特征维度的概率分布的乘积得到。对该式取对数的话,就可以将乘法运算转换为加法运算,即 Fisher vector就是对上式求偏导的结果归一化后构成的。具体数学推导过程请参考点击打开链接...

veronica的博客 2709

EGO_Plannerv2代码学习(一):栅格建图之V1 V2的区别

最近在尝试将高飞老师的集群规划器部署到真实无人机上跑一下,开这个新帖记录下学习过程中的问题和想法。

qq_41069236的博客 5754

tf中的Auto Encoder(AE和VAE)

tf中的Auto Encoder(VAE) 文章目录tf中的Auto Encoder(VAE)1. Auto Encoder(AE)2. Variational Auto Encoder(VAE)3. AE实战VAE实战 1. Auto Encoder(AE) 基本Auto Encoder Auto Encoder自编码器应用于无监督学习 监督学习,即训练数据含有标签,一般用于分类和预测任务 无监督学习,即训练数据不含有标签,一般用于聚类和数据生成任务 自编码器的基本结构如下所示,其中encoder的

鼠人的博客 564

STM32CUBEIDE调试中HardFault_Handler崩溃的故障分析器实战解析

本文详细解析STM32CUBEIDE调试中HardFault_Handler崩溃问题的实战处理方法。通过内置故障分析器自动诊断硬件异常原因,如内存越界、堆栈溢出等,提供图形化界面简化调试流程,并分享配置步骤、典型案例及高级调试技巧,帮助开发者快速定位和解决嵌入式系统崩溃问题。

night的博客 645

整理 钢琴 铃木钢琴教程(铃木)

铃木钢琴 超清PDF

TS的博客 1215

Auto Encoder(AE),Denoising Auto Encoder(DAE), Variational Auto Encoder(VAE) 区别

文章主要内容参考李宏毅老师的机器学习课程:https://www.bilibili.com/video/BV1Wv411h7kN?p=70 Auto Encoder: 是什么?有什么用? Auto Encoder 的思路特别简单,就是把高维信息编码为低维信息(encoder的工作),然后再尝试解码回原来的高维信息(decoder的工作),还要尽可能保证能恢复出原来的样子。其中,中间的低维信息被叫做 code, representation, bottleneck, Embedding等等,这里提一嘴,后

Haulyn5的博客 1751

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1173
上一篇: GAN网络调参经验
下一篇: 全景视频预测头部移动-Predicting Head Movement in Panoramic Video: A Deep Reinforcement Learning Approach
元宇宙MetaAI
博客等级 码龄10年 331粉丝 333原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值