首页 > 其他分享 >[基础] VAE原理

[基础] VAE原理

时间:2024-03-10 20:44:23浏览次数:17  
标签:AE 训练 基础 生成 分布 图像 原理 VAE

名称

VAE原文

TL;DR

这篇文章介绍了一种名为Auto-Encoding Variational Bayes (AEVB)的算法。AEVB算法通过引入随机变分推断和学习算法,解决了在大数据集和不可解后验分布情况下的推断和学习问题。文章的主要贡献有两个:首先,提出了一个可以直接使用标准随机梯度方法优化的下界估计器;其次,对于具有连续潜在变量的独立同分布数据集,通过拟合一个近似推断模型来预测潜在空间的后验分布,使得从该分布中采样出的特征也能解码出很好的生成效果。

Method

为什么需要VAE?

AE(AutoEncoder)是一种自监督重建图像的方法,AE训练完成后,给定latent feature,使用Decoder可以用来恢复该feature对应的原图。但这种方法存在以下问题:
a) 图像特征对应扰动的鲁棒性差。

例如,将一只猫的图像编码成latent feature后,小幅度扰动特征,解码出的图像效果就与原始图像偏离较大。

b) 特征空间不连续。

例如,按照如下方式插值latent feature之后,得到效果图也很差。

图像生成任务的数学建模

训练图像生成任务模型的目标是希望模型生成的样本分布与训练集分布尽可能一致,而这一目标可以用MLE(极大似然估计)来建模。

而这一目标等价于生成数据分布与训练数据分布的KL散度(越小表示两个分布差异越小,分布越接近)

生成数据与训练数据之间分布

基于AE这套框架,拉近两个分布之间距离,在实现层面会遇到以下问题:
a) 训练样本分布与生成样本的分布都不知道。
b) AE训练过程要求每个生成样本与训练样本有一一对应关系。
并且同时为了解决上述AE作为样本生成器遇到的问题,因此,VAE构建了下面训练模型:

精妙之处在于:
a) Encoder针对每一个训练数据预测其专属的均值与方差,同时生成模型Decoder也从该分布采样latent feature。

保证训练数据与生成数据在同一空间下有分布表示,并且在该空间下生成数据与训练数据分布接近。

b) latent空间下训练与生成数据的分布都向标准正态分布N(0, 1)对齐。

一方面可以防止encoder预测的方差坍缩到0使得正态分布收缩为常数。另一方面生成模型Decoder的推理过程也学习到抗扰动能力与特征空间连续性。

Loss设计

根据上述训练设计原理来看,主要需要两部分Loss:
1.继承自AE的重建Loss约束生成图像与对应训练图像一致性。
2.KL散度约束Encoder预测的N(mu, var)与N(0, 1)分布一致。

相关链接

变分自编码器(一):原来是这么一回事
Diffusion Model背后数据原理
VAE原文
https://blog.csdn.net/m0_63879480/article/details/135199276

标签:AE,训练,基础,生成,分布,图像,原理,VAE
From: https://www.cnblogs.com/fariver/p/18063010

相关文章

  • 计算机基础知识问答:操作系统篇
    进程和线程的区别?调度:进程是资源管理的基本单位,线程是程序执行的基本单位。切换:线程上下文切换比进程上下文切换要快得多。拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的资源。系统开销:创建或撤销进程时,系统都要为之分配或回收系统......
  • Django基础
    【一】web框架web框架本质上可以看成是一个功能强大的socket服务端,用户的浏览器可以看成是拥有可视化界面的socket客户端。两者通过网络请求实现数据交互,从架构层面上先简单的将Web框架看做是对前端、数据库的全方位整合【二】手撸web框架【1】原始版本(1)服务端#[一]......
  • 前端基础
    【一】什么是前端【1】什么是前端任何与用户直接打交道的操作界面都可以称之为前端比如电脑界面、手机界面、平板界面【2】什么是后端不直接与用户打交道的用于执行真正业务逻辑的代码比如C代码,Java代码,Python代码【3】前端基础【二】Web服务器【1】在浏览器......
  • HTML基础
    【一】HTML简介【1】什么是HTML超文本标记语言如果想要让浏览器能够渲染出写的页面,都必须遵从HTML语法我们浏览器看到的页面,内部其实都是HTML代码(所有的网站内部都是HTML代码)HTML是用来描述网页的一种语言。HTML指的是超文本标记语言:HyperTextMarkupLangu......
  • 网络开发基础客户端001
    在unity中的代码   暂时看来就是 首先需要定义一个 Socket 来接收  然后我们 需要定义byte【】来接收数据 以及一个string显示  第一步就是连接  这是一个异步 如果不用异步就会有阻塞  所有在里面首先先定义我们的socket然后设置连接......
  • 网络开发基础服务端001
    再服务端上    同上一期 客户端一样 也是定义Socket 绑定端口ip 然后进行监听  启动服务器 首先异步接收客户端  Console.ReadLine();是为了保证程序不会结束再异步应答中 其实就是一开始 先连接 然后在应答回调里面 进行接收回调 然后......
  • 三、MyBatis基础配置之映射文件Mapper.xml(均为单表查询示例)
    一)动态if需求:多条件组合查询。  二)动态foreach需求:多值查询。  三)动态抽取......
  • 电路分析基础----运放里的虚短虚断
    令人稀里糊涂的虚短虚断想必好多人在学习硬件电路分析时,都会听到虚短虚断这个专业术语,但是对于新手玩家,这个术语不好理解,比如我自己,经常将这两个概念混淆。最近刷到大佬的视频,讲解的非常简洁易懂,特意做个小笔记!1.电子小白学不会运放?一开始掌握这两个用法就够了!2.如何理解运放的......
  • MySQL基础篇快速记忆和查询
    查询语法:SELECT标识选择哪些列FROM标识从哪个表中选择去重(Distinct)在SELECT语句中使用关键字DISTINCT去除重复行SELECTDISTINCTdepartment_idFROMemployees;过滤(Where)语法:SELECT字段1,字段2FROM表名WHERE过滤条件使用WHERE子句,将不满足条......
  • 浅醉和的基础讲解
    什么是前缀和前缀和的逆它是前缀和的转变a[i]=pre[i]-pre[i-1]Code:#include<bits/stdc++.h>usingnamespacestd;constintN=105;intpre[N];intmain(){intN;cin>>N;for(inti=1;i<=N;i++){cin>>pre[i];......