AutoEncoder自动编码器、VAE变分自编码器、VQVAE量子化(离散化)的自编码器

文章目录

  • AutoEncoder自动编码器
    • (一)AutoEncoder的基本架构
    • (二)AutoEncoder的概率理解
    • (三)AutoEncoder的局限
  • VAE变分自编码器(Variational AutoEncoder)
    • (一)VAE简介
    • (二)VAE的概率理解
    • (三)VAE与AE
    • (三)VAE与GAN
    • (四)VAE的损失函数
  • VQVAE量子化(离散化)的自编码器
    • (一)VQVAE简介
    • (二)VQVAE与VAE
    • (三)VQVAE的训练损失


AutoEncoder自动编码器

(一)AutoEncoder的基本架构

最基础的AutoEncoder由一个Encoder和一个Decoder组成:

  • Encoder对输入图片进行编码得到 latent code
  • Decoder对 latent code进行重建
  • 计算输入图片和生成图片的重构误差,训练的时候最小化重构误差
    在这里插入图片描述

(二)AutoEncoder的概率理解

AutoEncoder可以理解为通过网络学习出任意概率分布,然后取概率分布中的最高点的横坐标作为编码的离散值。这会导致AutoEncoder的生成过程是不可控的,对输入噪声敏感,因为学习得到的概率分布是不能提前预知的。

(三)AutoEncoder的局限

AE结构只能对图像进行压缩和还原,并不能生成新的图像。

VAE变分自编码器(Variational AutoEncoder)

(一)VAE简介

VAE 模型是一种包含隐变量的生成模型,它利用神经网络训练得到两个函数(也称为推断网络和生成网络),进而生成输入数据中不包含的数据。

隐变量: 不可直接观测的综合性变量。
隐变量模型: 隐变量模型是一种概率模型,其中某些变量是不可观测的。(即包含隐变量的概率模型)

VAE通过Encoder学习出mean和std两个编码,同时随机采样一个正态分布的编码 ϵ \epsilon ϵ,然后通过 ϵ × s t d + m e a n \epsilon\times std+mean ϵ×std+mean重采样得到 latent code,然后通过Decoder进行重建。另外,由于正态分布的连续性,不存在不可导问题,可以通过重参数方法,对 latent code进行恢复,并通过链式求导法则进行梯度更新。

在这里插入图片描述

(二)VAE的概率理解

VAE将latent表达为高斯的概率分布,同时通过网络去自动学习平衡图像生成的精确度和概率分布的拟合度,这两者可以分别用MSE和KL散度来计算。之所以使用高斯分布,是因为高斯分布可以去累加映射得到任何的数据分布,同时高斯分布可以通过参数重整化转换为标准正态分布的线性表达,因此VAE中的latent中包括了高斯分布的均值和标准差。

(三)VAE与AE

  1. VAE和AE的联系:VAE与AE从结构上看都含有Decoder和Encoder过程

  2. VAE和AE的区别:

    • 隐藏层:VAE隐藏层服从高斯分布,AE隐藏层无分布要求
    • 训练时,AE训练得到Encoder和Decoder模型,VAE除了得到这两个模型,还能得到隐藏层的分布模型(即高斯分布的均值与方差)
    • AE只能重构输入数据X,而VAE可以生成含有输入数据某些特征与参数的新数据。
  3. 变分自编码器的变分:

    • “简单易懂的理解变分其实就是一句话:用简单的分布q去近似复杂的分布p。”
    • VAE 中的隐变量z的生成过程就是一个变分过程,我们希望用简单的z来映射复杂的分布,这既是一个降维的过程,同时也是一个变分推断的过程。

(三)VAE与GAN

VAE相对于GAN来说像是一种相反的存在:GAN是输入latent生成图像,再用生成的图像去修正网络;而VAE是输入图像生成latent,让latent的尽量接近原数据集的分布。

(四)VAE的损失函数

  • θ \theta θ:网络从x到z的映射; q θ ( z ∣ x ) q_{\theta}(z|x) qθ(zx):encoder
  • ϕ \phi ϕ:网络从z到x的重构; p ϕ ( x ∣ z ) p_{\phi}(x|z) pϕ(xz):decoder
    对于损失函数,可以从两个方面进行求和,一方面是图形的重构误差,即x~z~x的过程;另一方面用KL散度度量潜在变量的分布与单位高斯分布的差异,没有KL项,VAE就退化成AE
    在这里插入图片描述

VQVAE量子化(离散化)的自编码器

(一)VQVAE简介

VQVAE通过Encoder学习出中间编码,然后通过最邻近搜索将中间编码映射为codebook中K个向量之一,然后通过Decoder对 latent code进行重建。
在这里插入图片描述
由于最邻近搜索使用argmax来找codebook中的索引位置,导致不可导问题,VQVAE通过stop gradient操作来避免最邻近搜索的不可导问题,也就是 latent code的梯度跳过最近邻搜索直接复制到中间编码上。

(二)VQVAE与VAE

VQ-VAE与VAE的最主要的区别是VQ-VAE采用离散隐变量。对于encoder的输出通过向量量化(vector quantisation,VQ)的方法来离散化。

将z离散化的关键就是VQ, 即vector quatization. 简单来说, 就是要先有一个codebook, 这个codebook是一个embedding table. 我们在这个table中找到和vector最接近(比如欧氏距离最近)的一个embedding, 用这个embedding的index来代表这个vector.

由于维护了一个codebook,编码范围更加可控,VQVAE相对于VAE,可以生成更大更高清的图片。

(三)VQVAE的训练损失

VQ-VAE共包含三个部分的训练loss:reconstruction loss,VQ loss,commitment loss:
在这里插入图片描述

第二项和第三项基本一样, 只是 s g sg sg的对象变了, 而且第三项多了 β \beta β s g sg sg指的是stop gradient, 即gradient backpropagation到此为止, 不再往前传。

  1. reconstruction loss

    • 作用在encoder和decoder上
  2. VQ loss

    • 作用在codebook上,用来更新embedding空间
      在这里插入图片描述
  3. commitment loss

    • 作用:约束encoder的输出和embedding空间保持一致,以避免encoder的输出变动较大
    • 计算方式:encoder的输出 z e ( x ) z_e(x) ze(x)和对应量化得到的embedding向量 e k e_k ek的L2误差
    • s g sg sg作用在embedding向量 e k e_k ek上,意味着这个约束只会影响encoder
      在这里插入图片描述

参考:
VAE 模型基本原理简单介绍
【图像生成】(三) VAE原理 & pytorch代码实例
VQ-VAE解读
生成模型之VAE与VQ-VAE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/368124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uni-app 经验分享,从入门到离职(三)——关于 uni-app 生命周期快速了解上手

文章目录 📋前言⏬关于专栏 🎯什么是生命周期🧩应用生命周期📌 关于 App.vue/App.uvue 🧩页面生命周期📌关于 onShow 与 onLoad 的区别 🧩组件生命周期 📝最后 📋前言 这…

uniapp 组件封装

1. uniapp 组件封装时间戳格式化为星期 1.1. components/m-week.vue <template><text>{{week}}</text> </template> <script>export default {props: {time: String},mounted(e) {this.week this.getWeek(Number(this.time))},data() {return …

挑战杯 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…

[python]基于opencv实现的车道线检测

【检测原理】 一、首先进行canny边缘检测&#xff0c;为获取车道线边缘做准备 二、进行ROI提取获取确切的车道线边缘&#xff08;红色线内部&#xff09; 三、利用概率霍夫变换获取直线&#xff0c;并将斜率正数和复数的线段给分割开来 四、离群值过滤&#xff0c;剔除斜率…

Java设计模式 – 四大类型

设计模式 – 四大类型 创建型模式结构型模式行为型模式J2EE模式 设计模式&#xff08;Design pattern&#xff09;是重构解决方案 根据书Design Patterns – Elements of Reusable Object-Oriented Software&#xff08;中文译名&#xff1a;设计模式 – 可复用的面向对象软件元…

lava学习-接口

接口-Interface 1.什么是接口&#xff1f; 例&#xff1a;构造器&#xff0c;代码块在接口中统统没有&#xff0c;也不能创建对象 构造器的使用-----实现类 例&#xff1a;下图中的B类就是一个 实现类 2.接口的好处 继承只能单继承&#xff0c;而接口可以弥补类单继承的不足&am…

【蓝桥杯】环形链表的约瑟夫问题

目录 题目描述&#xff1a; 输入描述&#xff1a; 输出描述&#xff1a; 示例1 解法一&#xff08;C&#xff09;&#xff1a; 解法二&#xff08;Cpp&#xff09;&#xff1a; 正文开始&#xff1a; 题目描述&#xff1a; 据说著名犹太历史学家 Josephus 有过以下故事&a…

作业2.3

一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后&…

有趣的CSS - css loading动画

Loading动画 整体效果核心代码html 代码&#xff1a;css 部分代码&#xff1a; 完整代码如下html 页面&#xff1a;css 样式&#xff1a;页面渲染效果&#xff1a; 整体效果 这个 Loading 效果主要用 css3 的 animation 属性配合 border 属性来实现的。 可以用作在下拉列表 Loa…

(bean配置类的注解开发)学习Spring的第十三天

bean配置类的注解开发 问题提出 用类充当配置文件 applicationcontext.xml : Configuration注解标识此类为配置类,替代原有xml文件 看原配置文件applicationcontext.xml代码 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http:/…

微信小程序(三十二)本地异步储存API

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.同步和异步API的使用区别 2.异步API的缺陷 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item&q…

使用MATLAB驱动USRP-N320实现OFDM自收自发

文章目录 前言一、收发代码二、截取一帧 OFDM三、执行主函数四、运行结果五、资源自取 前言 本文作为实验结果记录及测试&#xff0c;方便后面回顾所做的工作。本文基于一台电脑和一台 USRP 设备实现了 OFDM 自发和自收功能 一、收发代码 ofdm_tx_rx_test.m 核心代码&#x…

C++迷宫游戏详解

个人主页&#xff1a;[PingdiGuo_guo] 收录专栏&#xff1a;[C干货专栏] 大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习用C实现一个迷宫游戏。 目录 1.迷宫的具体步骤 1.1.迷宫的初始化 1.2.寻路算法 1.DFS算法 2.BFS算法 1.3.移动 2.总结 C迷宫游…

【js逆向】scrapy基础

目录 一, 爬虫工程化 二, scrapy简介 三, Scrapy工作流程(重点) 四, scrapy安装 4.1 pip 安装 4.2 wheel安装 五, Scrapy实例 六, 自定义数据传输结构item 七, scrapy使用小总结 一, 爬虫工程化 在之前的学习中我们已经掌握了爬虫这门技术需要的大多数的技术点, 但是我…

MAX31865读取PT100/PT1000电阻值

1、芯片介绍 MAX31865是简单易用的热敏电阻至数字输出转换器,优化用于铂电阻温度检测器(RTD)。外部电阻设置RTD灵敏度,高精度Δ- Σ ADC将RTD电阻与基准电阻之比转换为数字输出。MAX31865输入具有高达45V的过压保护,提供可配置的RTD及电缆开路、短路条件检测。 2、芯片特点…

金和OA jc6 UploadFileBlock 任意文件上传漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

光伏移动业主端:操作便捷,功能齐全

鹧鸪云 为了满足日益增长的移动设备使用需求&#xff0c;提高用户体验&#xff0c;鹧鸪云研发出移动业主端&#xff0c;旨在提供更加高效、便捷的操作体验&#xff0c;具有省时省力、方便操作、功能齐全等优势&#xff0c;能够带来更好的使用体验和智能化服务。 优势&#xf…

2024年【道路运输企业安全生产管理人员】考试报名及道路运输企业安全生产管理人员作业模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员考试报名是安全生产模拟考试一点通总题库中生成的一套道路运输企业安全生产管理人员作业模拟考试&#xff0c;安全生产模拟考试一点通上道路运输企业安全生产管理人员作业手机同步练习。…

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1&#xff09;介绍 命令中多个参数之间使用空格进行分隔&#xff0c;而 cmake 会将双引号引起来的内容作为一个整体&#xff0c;当它当成一个参数&#xff0c;假如你的参数中有空格&#xff08;空格是参数的一部分&#xff09;&#xff0c;那么就可以使…

LLM之RAG理论(九)| 如何在LLM应用程序中提高RAG结果:从基础到高级

如果你正在用LLM&#xff08;大型语言模型&#xff09;构建产品或者功能&#xff0c;你可能会使用一种名为RAG&#xff08;检索增强生成&#xff09;的技术。RAG允许用户将LLM的训练数据中不可用的外部数据集成到LLM的文本生成过程中&#xff0c;这可以大大减少幻觉的产生&…