【论文极速读】VQ-VAE:一种稀疏表征学习方法

news2024/11/15 8:25:30
【论文极速读】VQ-VAE:一种稀疏表征学习方法
FesianXu 20221208 at Baidu Search Team

前言

最近有需求对特征进行稀疏编码,看到一篇论文VQ-VAE,简单进行笔记下。如有谬误请联系指出,本文遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明并且联系笔者,谢谢 。

∇ \nabla 联系方式:

e-mail: FesianXu@gmail.com

github: https://github.com/FesianXu


图片,视频等视觉模态有充足的冗余信息,可以通过稀疏编码进行编码,以减少储存消耗。Vector-Quantised Variational AutoEncoder (VQ-VAE) 就是进行图片稀疏编码的工作[1]。 如Fig 1. 所示,VQ-VAE有三大部分组成,Encoder,Decoder和储存稀疏编码的Embedding Space字典。其中的Embedding space字典的形状为 E ∈ R K × D \mathcal{E} \in \mathbb{R}^{K \times D} ERK×D,其中的 K K K为字典的大小, D D D为字典的特征维度,字典中每一个样本 e i ∈ R D , i ∈ 1 , ⋯   , K e_{i} \in \mathbb{R}^{D}, i\in 1,\cdots,K eiRD,i1,,K表示了第 i i i个稀疏编码的特征表达。

framework

Fig 1. VQ-VAE的框架示意。

单从稀疏编码的角度看,如Fig 2.所示,整个工作中,将会考虑将中间特征图的 H × W × D H \times W \times D H×W×D,通过用离散的稀疏编码表示,形状为 H × W × 1 H \times W \times 1 H×W×1,进行稀疏编码的方式可以通过简单的最近邻方法得到,如公式(1-1)所示
q ( z = k ∣ x ) = { 1 f o r   k = arg ⁡ min ⁡ j ∣ ∣ z e ( x ) − e j ∣ ∣ 2 0 o t h e r w i s e (1-1) q(z=k|x) = \begin{cases} 1 & for \ k=\arg\min_{j} ||z_e(x)-e_j||_{2} \\ 0 & otherwise \end{cases} \tag{1-1} q(z=kx)={10for k=argminj∣∣ze(x)ej2otherwise(1-1)
其中的 x x x为原始的图片输入, z e ( x ) z_e(x) ze(x)表示图片输入经过编码器后得到的feature map,而 q ( z ∣ x ) q(z|x) q(zx)即是进行稀疏编码后的结果。通过式子(1-2),可以将稀疏编码后的结果恢复为feature map(当然这个过程是有损的,只保留最为重要的特征信息)。整个过程可见Fig 2.示意图,应该比较容易理解。
z q ( x ) = e k , w h e r e   k = arg ⁡ min ⁡ j ∣ ∣ z e ( x ) − e j ∣ ∣ 2 (1-2) z_q(x) = e_k, where \ k=\arg\min_j ||z_e(x)-e_j||_2 \tag{1-2} zq(x)=ek,where k=argjmin∣∣ze(x)ej2(1-2)

dense_sparse

Fig 2. 通过最近邻方法在字典里面查找稀疏令牌,作为稀疏编码的结果,然后通过反查字典可以对feature map进行恢复。

整个框架中有若干参数需要学习,分别是encoder,decoder网络参数和Embedding space字典的参数。然而稀疏编码的过程由于出现了最近邻方法,这个过程显然是无法传递梯度的,为了实现编码器的更新,可以考虑将解码器的梯度直接拷贝到编码器中。假设对于编码后恢复的 z q ( x ) z_q(x) zq(x)而言,其每个元素表示为 D i , j , k D_{i,j,k} Di,j,k,那么对于其中某个元素的梯度表示为 ∂ L ∂ D i , j , k \dfrac{\partial \mathcal{L}}{\partial D_{i,j,k}} Di,j,kL,同理,对于编码后的 z e ( x ) z_e(x) ze(x)而言,同样有 ∂ L ∂ E i , j , k \dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}} Ei,j,kL,令 ∂ L ∂ E i , j , k = ∂ L ∂ D i , j , k \dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}} = \dfrac{\partial \mathcal{L}}{\partial D_{i,j,k}} Ei,j,kL=Di,j,kL。那么对于编码器的梯度就可以表示为 ∂ L ∂ W E = ∂ E i , j , k ∂ W E ∂ L ∂ E i , j , k \dfrac{\partial \mathcal{L}}{\partial W_E} = \dfrac{\partial E_{i,j,k}}{\partial W_E} \dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}} WEL=WEEi,j,kEi,j,kL

grad_copy

Fig 3. 通过梯度拷贝,将decoder的梯度拷贝到encoder中。

最后的损失函数如(1-3)所示,其中的 s g ( ⋅ ) sg(\cdot) sg()为停止梯度函数,表示该函数无梯度传导。decoder的参数通过第一项损失项进行更新(这部分损失可通过MSE损失 L ( x , x ^ ) \mathcal{L}(\mathbf{x}, \hat{\mathbf{x}}) L(x,x^)建模),称之为重建损失。encoder参数通过第一项和第三项损失进行更新,其中第一项是重建损失,第三项是为了encoder编码产出和embedding space进行对齐而设计的,由于此时通过 s g ( ⋅ ) sg(\cdot) sg()函数停止了梯度,因此此时 E \mathcal{E} E的参数不会得到更新。Embedding space的参数通过第二项损失项进行更新,通过将encoder编码结果进行停止梯度,我们只对 E \mathcal{E} E进行参数更新。

L = log ⁡ ( p ( x ∣ z q ( x ) ) ) + ∣ ∣ s g [ z e ( x ) ] − E ∣ ∣ 2 2 + β ∣ ∣ z e ( x ) − s g [ E ] ∣ ∣ 2 2 (1-3) \mathcal{L} = \log(p(x|z_q(x))) + ||sg[z_e(x)]-\mathcal{E}||^2_2 + \beta ||z_e(x)-sg[\mathcal{E}]||^2_2 \tag{1-3} L=log(p(xzq(x)))+∣∣sg[ze(x)]E22+β∣∣ze(x)sg[E]22(1-3)

作者在原论文中贴了不少图片稀疏编码的结果,如Fig 4.所示,将 128 × 128 × 3 128 \times 128 \times 3 128×128×3的原始图片稀疏编码到 32 × 32 × 1 32 \times 32 \times 1 32×32×1(K=512),信息压缩比为 128 × 128 × 3 × 8 / ( 32 × 32 × 9 ) = 42.6 128 \times 128 \times 3 \times 8/ (32 \times 32 \times 9)=42.6 128×128×3×8/(32×32×9)=42.6。从效果上看,除了在高频细节,比如毛发等上有些模糊外,其他图片信息都得到了较好的保留。

exp_1

Fig 4. 将原始图片稀疏编码后,再解码出来的图片与原始图片的对比,可以发现对于高频信号(毛发细节等)有些损失。

Reference

[1]. Van Den Oord, Aaron, and Oriol Vinyals. “Neural discrete representation learning.” Advances in neural information processing systems 30 (2017).

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

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

相关文章

华为OD机试题,用 Java 解【矩阵扩散】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

java简单学习

Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象&#xff…

01-Maven基础-简介安装、基本使用(命令)、IDEA配置、(写jar,刷新自动下载)、依赖管理

文章目录0、Maven1、Maven 简介2、Maven 安装配置安装配置步骤3、Maven 基本使用Maven 常用命令Maven 生命周期IDEA 配置 MavenMaven 坐标详解IDEA 创建 Maven 项目IDEA 导入 Maven 项目配置 Maven-Helper 插件 (非常实用的小插件)依赖管理使用坐标导入 jar 包依赖范围0、Maven…

任何人均可上手的数据库与API搭建平台

编写API可能对于很多后端开发人员来说,并不是什么难事儿,但如果您主要从事前端功能,那么可能还是有一些门槛。 那么有没有工具可以帮助我们降低编写API的学习门槛和复杂度呢? 今天就来给大家推荐一个不错的开源工具:…

初识C++模板

文章目录前言1.模板概念2.函数模板1.示例用法1. 注意事项2.函数模板的原理3.函数模板的实例化4.模板参数的匹配原则3.类模板4.总结前言 本文主要围c中的模板进行介绍。模板是c中一个比较重要的概念,由于模板的存在,c才能进行泛型编程。模板的存在大大增…

针孔成像模型零基础入门(三)

2020年爆火的Nerf(神经辐射场)横空出世,据说只要用手机拍照,然后喂给模型,就可以生成3D模型了,我试过了,确有此事! 那我们有想过,为什么可以从二维的图片里面获取物体三…

【7】linux命令每日分享——cat查看文件内容

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

Linux网络配置(NAT)

在搭配好一台虚拟机的时候想要下载,安装些什么但一直失败这个时候就可以检查一下网络是否连接这里我们使用centos7举例子使用命令——ifconfig由此可见我们的系统中目前有3个网卡ens33——用于接入外网,该网卡默认关闭lo——用于访问本地网络&#xff0c…

[数据结构]:04-循环队列(数组)(C语言实现)

目录 前言 已完成内容 循环队列实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-QueueCommon.cpp 04-QueueFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是为了…

1.7校验码:校验码、规则校验码-奇偶校验、检验码-循环校验码CRC、模2除法、校验码-海明校验

1.7校验码:校验码、规则校验码-奇偶校验、检验码-循环校验码CRC、模2除法、校验码-海明校验校验码校验码-奇偶校验编码规则检验码-循环校验码CRC编码规则什么是模2除法如何计算校验码校验码-海明校验校验码 计算机在接收相应信息的时候能够识别的的都是一些电器信号…

【Spring6】| Spring的入门程序、集成Log4j2日志框架

目录 一:Spring的入门程序 1. Spring的下载 2. Spring的jar文件 3. 第一个Spring程序 4. 第一个Spring程序详细剖析 5. Spring6启用Log4j2日志框架 一:Spring的入门程序 1. Spring的下载 官网地址:https://spring.io/ 官网地址&…

数学建模 latex 图片以及表格排版整理(overleaf)

无论是什么比赛,图片和表格的格式都非常重要,这边的重要不只是指规范性,还有抓住评委眼球的能力。 那么怎样抓住评委的眼球? 最重要的一点就是善用图片和表格(当然撰写论文最重要的是逻辑,这个是需要长期…

CorelDRAW2023最新版序列号使用教程

CorelDRAW2023用起来非常顺手,旨在为用户解决因在工作上带来的问题,在业内可谓享有极高的声誉,是业内人士常用的一款工具,有了它,可以更好的帮助用户把握好各个方面的细节,减少其他方面的失误,让…

RabbitMQ交换机(Exchanges)

目录 一、概念 二、临时队列 三、绑定 四、Fanout(扇出交换机) (一)介绍 (二)实战 五、Direct(直接交换机) (一)介绍 (二)实…

【LeetCode】1255. 得分最高的单词集合

1255. 得分最高的单词集合 题目描述 你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。 请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 …

我看谁还敢说不懂git

文章目录一、Git介绍1.1、Git的作用1.2、Git的理念1.3、Git的特点1.4、Git对比SVN二、Git的概念2.1、Git基础概念三、Git的基本操作3.1、使用Git管理一个代码仓库的流程3.2、Git常用命令介绍四、Git状态的变化五、Git安装和配置5.1、Git的安装5.2、Git的配置六、Git的高级操作6…

【阅读笔记】SecureML: A System for ScalablePrivacy-Preserving Machine Learning

1. Motivation 针对机器学习中的出现的数据隐私泄露的风险,提出了线性回归、逻辑回归以及简单神经网络的隐私保护模型。 2. Contributions 2.1 为线性回归、逻辑回归以及神经网络设计安全计算协议 2.1.1.1 线性回归 线性回归损失函数为: , 采用SG…

数据分析:某电商优惠卷数据分析

数据分析:某电商优惠卷数据分析 作者:AOAIYI 专栏:python数据分析 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习,可…

单变量回归问题

单变量回归问题 对于某房价问题,x为房屋大小,h即为预估房价,模型公式为: hθ(x)θ0θ1xh_{\theta}(x)\theta_{0}\theta_{1}x hθ​(x)θ0​θ1​x 要利用训练集拟合该公式(主要是计算θ0、θ1\theta_{0}、\theta_{1}θ…

JavaScript DOM和BOM

目录 查找html元素 1.通过id 2.通过标签名 3.通过类名 DOM 1.创建动态的HTML内容 2.修改元素内容 3.改变HTML属性 4.改变css样式 DOM事件 DOM节点 1.添加HTML元素 2.删除HTML元素 浏览器对象 1.Window对象 2.Screen对象 3.History对象 4.Location对象 5.Navi…