(2017|NIPS,VQ-VAE,离散潜在)神经离散表示学习

Neural Discrete Representation Learning

公和众和号:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料)

目录

0. 摘要

3. VQ-VAE

3.1 离散潜在变量

3.2 学习

3.3 先验

4. 实验


0. 摘要

学习在无监督情况下获取有用的表示仍然是机器学习中的一个关键挑战。在本文中,我们提出了一个简单而强大的生成模型,该模型学习离散表示。我们的模型,矢量量化变分自动编码器(Vector Quantised-Variational AutoEncoder,VQ-VAE),与 VAEs 有两个关键区别:编码器网络输出离散的编码,而不是连续的编码;先验是学习的,而不是静态的。为了学习离散潜在表示,我们结合了矢量量化(VQ)的思想。使用 VQ 方法可以使模型规避 “后验崩溃” 的问题,即在 VAE 框架中通常观察到的潜在变量在与强大的自回归解码器配对时会被忽略。将这些表示与自回归先验配对,模型可以生成高质量的图像、视频和语音,以及进行高质量的说话人转换和无监督的音素学习,进一步证明了学到的表示的实用性。

3. VQ-VAE

也许与我们方法最相关的工作是 VAEs。VAEs 包括以下部分: 一个编码器网络,该网络参数化给定输入数据 x 的离散潜在随机变量 z 的后验分布 q(z|x),一个先验分布 p(z),以及一个具有分布p(x|z) 的解码器。

通常,VAEs 中的后验和先验被假定为具有对角协方差的正态分布,这允许使用高斯重新参数化技巧 [32, 23]。扩展包括自回归先验和后验模型 [14]、归一化流 [31, 10] 以及逆自回归后验 [22]。

在这项工作中,我们引入了 VQ-VAE,其中我们使用具有新的训练方式的离散潜在变量,灵感来自矢量量化(VQ)。后验和先验分布是分类的,并且从这些分布中抽取的样本索引一个嵌入表。然后将这些嵌入用作解码器网络的输入。

3.1 离散潜在变量

我们定义一个潜在嵌入空间 e ∈ ℝ^(K × D),其中 K 是离散潜在空间的大小(即,K-way 分类),D 是每个潜在嵌入向量 e_i 的维度。请注意,有 K 个嵌入向量 e_i ∈ ℝ^D,i ∈ 1; 2; ...; K。如图 1 所示,

  • 模型接收一个输入 x,通过编码器生成输出 z_e(x)。
  • 然后,通过在共享的嵌入空间 e 中使用最近邻查找,计算离散潜在变量 z,如方程 1 所示。
  • 解码器的输入是相应的嵌入向量 e_k,如方程 2 所示。

可以将这个正向计算流程视为具有将潜在变量映射到 K 个嵌入向量中的一个的特定非线性的常规自动编码器。模型的参数的完整集合是编码器、解码器和嵌入空间 e 的参数的并集。为简单起见,在本节中,我们使用一个随机变量 z 表示离散潜在变量,然而对于语音、图像和视频,我们分别提取 1D、2D 和 3D 潜在特征空间。

后验分类分布 q(z|x) 的概率被定义为 one-hot,如下所示:

其中 z_e(x) 是编码器网络的输出。我们将这个模型视为一个 VAE,我们可以用 ELBO 来限制 log p(x)。我们的提议分布 q(z = k|x) 是确定性的,通过在 z 上定义一个简单的均匀先验,我们得到一个 KL 散度常数,等于 logK。

表示 z_e(x) 经过离散化瓶颈,然后映射到嵌入 e 的最近元素,如方程 1 和 2 所示。

3.2 学习

请注意,对于方程 2,并没有定义真正的梯度,然而我们使用类似于直通估计器 [3] 的方法来近似梯度,并将梯度从解码器输入 z_q(x) 复制到编码器输出 z_e(x)。也可以通过量化操作的子梯度来进行估计,但这个简单的估计器在本文的初始实验中表现良好。 

在正向计算过程中,最近的嵌入 z_q(x)(方程 2)传递给解码器,在反向传播过程中,梯度 ▽_z L 未经修改地传递给编码器。由于编码器的输出表示和解码器的输入共享相同的 D 维空间,梯度包含了有关编码器如何改变其输出以降低重建损失的有用信息。

如图1(右)所示,梯度可以推动编码器的输出在下一个正向传递中以不同的方式进行离散化,因为方程 1 中的赋值将是不同的。

方程 3 指定了总体损失函数。它有三个组成部分,用于训练 VQ-VAE 的不同部分。第一项是重建损失(或数据项),它优化解码器和编码器(通过上面解释的估计器)。由于从 z_e(x) 映射到 z_q(x) 的直通梯度估计,嵌入 e_i 不接收来自重建损失 log p(z|z_q(x)) 的梯度。因此,为了学习嵌入空间,我们使用最简单的字典学习算法之一,矢量量化(VQ)。VQ 目标使用 𝑙_2 误差将嵌入向量 e_i 移向编码器输出 z_e(x),如方程 3 的第二项所示。由于这个损失项仅用于更新字典,因此还可以根据 z_e(x) 的移动平均更新字典项(在本文的实验中未使用)。有关更多详细信息,请参见附录 A.1。

最后,由于嵌入空间的体积是无维度的,如果嵌入 e_i 的训练速度不及编码器参数快,它可以任意增长。为了确保编码器致力于一个嵌入并且其输出不增长,我们添加了一个承诺损失(commitment loss),即方程 3 中的第三项。因此,总训练目标变为:

其中 sg 代表 stopgradient 运算符,该运算符在正向计算时定义为恒等,并且偏导数为零,因此有效地将其操作数约束为未更新的常数。解码器仅优化第一个损失项,编码器优化第一个和最后一个损失项,而嵌入由中间损失项优化。我们发现该算法对于 β 非常稳健,因为在 β 的值从 0.1 到 2.0 的范围内,结果并未发生变化。在所有实验中,我们使用 β = 0.25,尽管通常这取决于重建损失的尺度。 由于我们假设 z 的先验分布是均匀的,通常出现在 ELBO 中的 KL 项对于编码器参数是常数,因此在训练中可以忽略。

在我们的实验中,我们定义了 N 个离散潜在变量(例如,我们在 ImageNet 中使用了一个 32x32 的潜在变量域,或在 CIFAR10 中使用了一个 8x8x10 的潜在变量域)。得到的损失 L 是相同的,只是对于(每个潜在变量一个的) k-means 和承诺损失,我们得到了 N 个项的平均值。

完整模型的对数似然 log p(x) 可以如下评估:

由于解码器 p(x|z) 是使用来自 MAP 推理的 z = z_q(x) 进行训练的,一旦它完全收敛,当 z ≠ z_q(x) 时,解码器就不应该分配任何概率质量给 p(x|z)。因此,我们可以写成

我们在第 4 节中通过实证评估了这个近似。根据 Jensen's 不等式,我们还可以写成

3.3 先验

离散潜在变量上的先验分布 p(z) 是一个类别分布,并且可以通过依赖于特征映射中的其他 z 来使其成为自回归的。在训练 VQ-VAE 时,先验保持恒定且均匀。训练后,我们拟合了一个关于 z 的自回归分布 p(z),以便通过祖先抽样(ancestral sampling)生成 x。对于图像,我们使用离散潜在变量的 PixelCNN,对于原始音频,我们使用 WaveNet。共同训练先验和 VQ-VAE,这可能会增强我们的结果,这留作未来的研究。

4. 实验

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

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

相关文章

【QML COOK】- 000-创建Project

1. 文件->New Project... 2. Application(Qt)->Qt Quick Application(compat) 3. 填好【名称】和【创建路径】 4. 选择CMake 5. 选择QT6.2 6. 直接【下一步】 7. 直接下一步 8. 直接下一步 9. 出现工程文件 10. 点击运行 11. 出现窗口

10亿数据高效插入MySQL最佳方案

写在文章开头 你好,我叫sharkchili,目前还是在一线奋斗的Java开发,经历过很多有意思的项目,也写过很多有意思的文章,是CSDN Java领域的博客专家,也是Java Guide的维护者之一,非常欢迎你关注我的…

【性能】【算法】for循环,性能提高

目录 ■提高性能的方法 ・原理 1.1.java处理中,计算阶乘,为什么展开循环可以提高效率 1.2.从cpu的流水线角度,再说明一下 1.3.介绍一下 cup的指令流水线 ■实际运用 1.求和 代码 结果 2.求阶乘 (性能提高效果明显&…

Debezium发布历史56

原文地址: https://debezium.io/blog/2019/05/23/tutorial-using-debezium-connectors-with-apache-pulsar/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. 将 Debezium 连接器与 Apache Pulsar 结合…

笔试案例2

文章目录 1、笔试案例22、思维导图 1、笔试案例2 09)查询学过「张三」老师授课的同学的信息 selects.*,c.cname,t.tname,sc.score from t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc where t.tidc.cid and c.cidsc.cid and sc.sids…

简洁大气带进度条的URL跳转页面HTML源码

源码介绍 简洁大气带进度条的URL跳转页面HTML源码,记事本修改里面的内容即可,喜欢的同学可以拿去使用 获取方式: 蓝奏云:https://wfr.lanzout.com/ic1iZ1kj6yde CSDN免积分下载:https://download.csdn.net/download/huayula/88…

Java桶排序、基数排序、剪枝算法

桶排序算法 桶排序的基本思想是: 把数组 arr 划分为 n 个大小相同子区间(桶),每个子区间各自排序,最后合并 。计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。 1.找出待…

答疑解惑:核技术利用辐射安全与防护考核

前言 最近通过了《核技术利用辐射安全与防护考核》,顺利拿到了合格证。这是从事与辐射相关行业所需要的一个基本证书,考试并不难,在此写篇博客记录一下主要的知识点。 需要这个证书的行业常见的有医疗方面的,如放疗,…

黑马苍穹外卖学习Day3

目录 公共字段自动填充问题分析实现思路代码实现 新增菜品需求分析和设计接口设计代码开发开发文件上传接口功能开发 菜品分页查询需求分析和设计代码开发 菜品删除功能需求分析与设计代码实现代码优化 修改菜品需求分析和设计代码实现 公共字段自动填充 问题分析 员工表和分…

静态网页设计——崩坏3(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: 使用技术:HTMLCSSJS(静态网页设计) 主要内容:对游戏崩坏3进行简单介绍。 https://www.bilib…

【Linux进程】查看进程fork创建进程

目录 前言 1. 查看进程 2. 通过系统调用创建进程-fork初识 总结 前言 你有没有想过在使用Linux操作系统时,后台运行的程序是如何管理的?在Linux中,进程是一个非常重要的概念。本文将介绍如何查看当前运行的进程,并且讨论如何使用…

将项目同时提交到GitHub和码云Gitee上面,GitHub与Gitee同步

多个远程仓库同时使用 新建GitHub仓库 创建成功 在终端中创建仓库 如果你想在本地机器上创建Git仓库,或者想添加一个文件夹或文件到已经存在的Git仓库中,你应该在终端中创建你的Git仓库。在你可以通过终端来创建一个Git仓库。以下是在终端中创建Git仓…

java解析json复杂数据的第三种思路

文章目录 一、概述二、数据预览1. 接口json数据2. json转xml数据 三、代码实现1. pom.xml2. 核心代码3. 运行结果 四、源码传送 一、概述 接上篇 java解析json复杂数据的两种思路 我们已经通过解析返回json字符串得到数据,现在改变思路, 按照如下流程获取数据: #mermaid-svg-k…

AcrelCloud-3000环保用电监管云平台解决方案——安科瑞赵嘉敏

概述 国家全面推进打赢蓝天保卫战,打好碧水保卫战,打胜净土保卫战,加快生态环境保护、建设美丽中国。环保用电监管系统针对企业内的环保设施、设备运行状况进行检测,发挥环保设备的作用,提高监察效率,并为…

洛谷 P1217 [USACO1.5] 回文质数 Prime Palindromes 刷题笔记

P1217 [USACO1.5] 回文质数 Prime Palindromes - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 直接枚举 减枝优化判断 优化1 只有偶数才会是质数 优化2 回文数的判断次数要优于检查素数 先判断是否为回文数再检查是否为质数 if( hw(i)&&isprime(i)) 这里…

Springcloud Gateway网关

简介 SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。 Spring Cloud Gateway的目标提供统一的路由方式且基于 Filter链的方式提供了网关基本的功能,例如:安全,监控/指标&#xf…

lv14 IO模型:阻塞和非阻塞 7

1 五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞:不能操作就返回错误(通过轮询即才能实现阻塞的情况 ) 多路复用:委托中介监控 信号驱动:让内核如果能操作时发信号,在信号处理函数中操作 异步IO&a…

ES6(一部分)未完...

文章目录 ES61.ES6 let声明变量2.ES6 const声明常量3.变量解构赋值3-1解构对象3-2解构数组3-3字符串解构 4.模板字符串5.字符串扩展5-1 include函数5-2 repeat函数(重复) 6.数值扩展6-1二进制和八进制表示法6-2isFinite 与 isNaN方法6-3islnteger方法6-4…

Vue3+TS+Vite 构建自动导入开发环境

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 在一个使用 Vue 3、Vite 和 TypeScript 的项目中,配置 unplugin-auto-import 和 unplugin-vue-components 插件可以极大地提高开发效率,因为它们可以自动导入 Vue 相关的 API 和 Vue 组件,从而减少了手动导入的需要。 文章目…

FPGA UDP协议栈:基于88E1111,支持RGMII、GMII、SGMII三种模式,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本本协议栈的 25G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设…