VQVAE:Neural Discrete Representation Learning

news2025/1/19 14:15:17

论文名称:Neural Discrete Representation Learning
开源地址
发表时间:NIPS2017
作者及组织:Aaron van den Oord,Oriol Vinyals和Koray Kavukcuoglu, 来自DeepMind。

1、VAE

  简单回顾下VAE的损失函数,ELBO的下界为:
L o w e r B o u n d = E q φ ( z ∣ x ) [ l o g p θ ( x ∣ z ) ] − D K L ( q φ ( z ∣ x ) ∣ ∣ p ( z ) ) \begin{equation} Lower Bound =E_{q_\varphi(z|x)}[logp_\theta(x|z)] - D_{KL}(q_\varphi(z|x)||p(z)) \tag{0} \end{equation} LowerBound=Eqφ(zx)[logpθ(xz)]DKL(qφ(zx)∣∣p(z))(0)
 其中第一项为解码器的重构损失(regression loss) ;第二项为正则项,用KL散度来使Encoder----后验概率 q φ ( z ∣ x ) q_\varphi(z|x) qφ(zx) 和 先验 p ( z ) p(z) p(z) 分布近似,通常 p ( z ) p(z) p(z) 假设为多元标准正太分布,该项主要防止VAE坍塌到一个点,毕竟是生成模型。
 而VQVAE和VAE主要不同:Encoder输出是离散的,而不是连续的隐变量z。

1、方法

1.1.模型结构

在这里插入图片描述

 为了实现离散化编码,VQVAE引入了一个可学习的codebook,即上图中的EmbeddingSpace。大概说下流程:输入一张图像,经过CNN得到 z e ( x ) ∈ R H ∗ W ∗ D z_e(x) \in \mathbb{R}^{H*W*D} ze(x)RHWD ,然后计算 z e z_e ze 中每条特征向量跟codebook的最接近的向量的索引,得到 q ( z ∣ x ) ∈ R H ∗ W q(z|x) \in \mathbb{R}^{H*W} q(zx)RHW , 然后用codebook中向量 e i e_i ei 来替换 z e ( x ) z_e(x) ze(x) 得到 z q ( x ) z_q(x) zq(x) 。最后经过Decoder得到 x x x

1.2.训练

 先说下总体损失函数,其实跟VAE的损失函数类似:
L = l o g p ( x ∣ z q ( x ) ) + ∣ ∣ s g [ z e ( x ) ] − e ∣ ∣ 2 2 + β ∣ ∣ z e ( x ) − s g [ e ] ∣ ∣ 2 2 \begin{equation} L = logp(x|z_q(x)) + ||sg[z_e(x)]- e|| ^2_2 + \beta||z_e(x)-sg[e]||^2_2 \tag{1} \end{equation} L=logp(xzq(x))+∣∣sg[ze(x)]e22+β∣∣ze(x)sg[e]22(1)

 其中第一项就是VAE中的重构损失,但有个问题:在用L2 Loss计算重构损失后,反向传播时,由于在codebook中argmin这个操作是不可导的,这样就优化不了Encoder,于是本文直接将 z q ( x ) z_q(x) zq(x) 节点的梯度拷贝给了 z e ( x ) z_e(x) ze(x) ,使得反向传播得以继续。具体的表达式如下:
l o g p ( x ∣ z q ( x ) ) = ∣ ∣ x − d e c o d e r ( z e ( x ) + s g ( z q ( x ) − z e ( x ) ) ) ∣ ∣ 2 2 \begin{equation} logp(x|z_q(x)) = ||x-decoder(z_e(x)+sg(z_q(x)-z_e(x)))||_2^2 \tag{2} \end{equation} logp(xzq(x))=∣∣xdecoder(ze(x)+sg(zq(x)ze(x)))22(2)
 式中的 s g sg sg 表示 .detach() 操作,由于VQVAE多了一个可学习的codebook,而重构损失并没有梯度传过去。因此损失第二项就是让 e e e 逼近 z e ( x ) z_e(x) ze(x) ,这项仅更新codebook。

  由于训练过程中,Encoder相较于codebook,肯定易于优化,也就是Encoder收敛快,而codebook收敛慢 ,为了让Encoder别距离codebook太远,于是增加了第三项损失,让 z e ( x ) z_e(x) ze(x) 逼近 e e e

 在回过头来跟VAE的式子比较下 ,发现缺少了KL散度项:这是因为在VQVAE中,在根据 x x x 取得 e e e 的概率非0即1: q ( z = e ∣ x ) = 1 , q ( z = o t h e r ∣ x = 0 ) q(z=e|x)=1,q(z=other|x=0) q(z=ex)=1,q(z=otherx=0) ,相当于二项分布,同时假设 p ( z ) p(z) p(z) 是均匀分布,两个均匀分布的KL散度是常数,在损失中可忽略。

1.3.生成

 在训练集上训练完VQVAE后,VQVAE学习到的是一个有效的低维度的离散表示。然后将VQVAE置为推理阶段,用自回归模型PixCNN来拟合 q ( z ∣ x ) q(z|x) q(zx) ,训练完成后,PixCNN就能生成有意义的索引矩阵,然后去codebook中拿到对应的张量,送去VQVAE的Decoder中解码生成图像。

2、实验

  生成的小图还是可以的。
在这里插入图片描述

思考

  替换更强的自回归模型Transformer也就是后来VQGAN的工作了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时,先将数据库文件打包,放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中,可以用7zip查看apk文件 2.在qt代码读取数据文件,注意在assets下的文件都是Read-Only,需…

初阶数据结构之堆讲解

本篇文章带大家学习的是堆,还请各位观众老爷给个三连 正片开始 堆的概念 如果有一个关键码的集合 K { , , , … , } ,把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满…

HarmonyOS开发实战:加密类组件使用方法-API

加密类组件 模块介绍RSA提RSA供生成密钥加解密验签等系列方法(基于HarmonyOS API)AES提供AES生成密钥加解密等系列方法(基于HarmonyOS API)DES提供3DES生成密钥加解密等系列方法(基于HarmonyOS API)SM2提供SM2生成密钥加解密等系列方法(基于HarmonyOS API)SM3提供SM3生成摘要,…

vue 自定义组件 实现跟使用

新建文件组件 选择器作用 ~ 波浪线这个是选择 li 后面的所有 a标签 调用 到使用的文件下引入 使用 效果

类似李跳跳的软件有什么,强烈推荐所有安卓手机安装!!!

今天阿星分享一款让安卓手机更顺滑的神器——智慧岛。你问我李跳跳?由于大家都知道的原因,那是个曾经让广告无处遁形的神兵利器,可惜现在它已经退休了。不过别担心,智慧岛接过了接力棒,继续为我们的安卓体验保驾护航。…

爱情再启:庄国栋笑谈“玫瑰人生”爱情觉悟

庄国栋,这位电视剧《玫瑰的故事》中的男主角, 最近在一次采访中坦言:“如果给我一次重来的机会, 我绝对会毫不犹豫地选择爱情!” 听到这话, 我不禁想,庄先生,您是不是被剧里的玫瑰…

42.HOOK引擎核心代码

上一个内容:41.HOOK引擎设计原理 以 40.设计HOOK引擎的好处 它的代码为基础进行修改 主要做的是读写寄存器 效果图 添加一个类 htdHook.h文件中的实现 #pragma once class htdHook { public:htdHook(); };htdHook.cpp文件中的实现: #include "…

Java并发编程基础知识点

目录 Java并发编程基础知识点1、线程,进程概念及二者的关系进程相关概念线程相关概念进程与线程的关系补充小知识点: 2、线程的状态Java线程的状态:Java线程不同状态之间的切换图示 3、Java程序中如何创建线程?①、继承Thread类②…

深入解析Java和Go语言中String与byte数组的转换原理

1.Java String与byte[]互相转换存在的问题 java中,按照byte[] 》string 》byte[]的流程转换后,byte数据与最初的byte不一致。 多说无益,上代码,本地macos机器执行,统一使用的UTF-8编码。 import java.nio.charset.S…

办理河南公司企业信用等级3A证书流程和条件

企业信用等级3A证书属于一种荣誉资质,是提升企业公信力和影响力保障的一项资质。信用等级是信用 (资信)评估机构根据企业资信评估结果对企业信用度划分的等级类别,它反映了企业信用度的高低。AAA信用等级是一种等级划分。代指企业的信用经过行业、机构评…

【Chapter4】汇编语言及其程序设计,《微机系统》第一版,赵宏伟

一、汇编语言概述 **指令:**指使计算机完成某种操作的命令。 **程序:**完成某种功能的指令序列。 **软件:**各种程序总称。 **机器语言:**计算机能直接识别的语言。用机器语言写出的程序称为机器代码。 **汇编语言&#xff1…

【Python】已解决ModuleNotFoundError: No module named ‘tensorflow‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决ModuleNotFoundError: No module named ‘tensorflow‘ 一、分析问题背景 ModuleNotFoundError: No module named ‘tensorflow’ 是一个常见的错误,通常在Pytho…

2024.6.30周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、模型架构 四、文章解读 一、Introduction 二、创新点 三、RBM 四、贪心算法 五、实验 六、结论 二、代码复现 总结 摘要 本周我阅读了一篇题目为Generative Pre-Trained Physics-Informed Neural Netwo…

SA 注册流程

目录 1. UE开机后按照3GPP TS 38.104定义的Synchronization Raster搜索特定频点 2.UE尝试检测PSS/SSS,取得下行时钟同步,并获取小区的PCI;如果失败则转步骤1搜索下一个频点;否则继续后续步骤; 3.解析Mib,…

密室逃脱——收集版

一、原版修改 1、导入资源 Unity Learn | 3D Beginner: Complete Project | URP 2、设置Scene 删除SampleScene,打开UnityTechnologies-3DBeginnerComplete下的MainScene 3、降低音量 (1) 打开Hierarchy面板上的Audio降低音量 (2) 打开Prefabs文件夹&#xf…

分享画布绘制矩形

简介 实现功能&#xff0c;在画布上绘制矩形&#xff0c;移动矩形。 在线演示 绘制矩形 实现代码 <!DOCTYPE html><html><head> <title>绘制矩形</title> </head><body><div style"margin: 10px"><input typ…

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

Redis持久化(RDB AOF)

Redis持久化 MySQL的事务&#xff0c;有四个比较核心的特性&#xff1a; 原子性一致性持久性&#xff08;和持久化一样&#xff09;&#xff0c;将数据存储在硬盘上&#xff0c;重启主机之后数据仍然存在隔离性 redis是一个内存数据库&#xff0c;把数据存储在内存中&#xff0…

基于SpringBoot的超市进销存系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;MyEclipse、Tomcat 系统展示 首页 首页界面图 个人中心 个人中心…

Kafka~特殊技术细节设计:分区机制、重平衡机制、Leader选举机制、高水位HW机制

分区机制 Kafka 的分区机制是其实现高吞吐和可扩展性的重要特性之一。 Kafka 中的数据具有三层结构&#xff0c;即主题&#xff08;topic&#xff09;-> 分区&#xff08;partition&#xff09;-> 消息&#xff08;message&#xff09;。一个 Kafka 主题可以包含多个分…