当前位置: 首页 > news >正文

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

【论文极速读】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∈RK×D\mathcal{E} \in \mathbb{R}^{K \times D}ERK×D,其中的KKK为字典的大小,DDD为字典的特征维度,字典中每一个样本ei∈RD,i∈1,⋯,Ke_{i} \in \mathbb{R}^{D}, i\in 1,\cdots,KeiRD,i1,,K表示了第iii个稀疏编码的特征表达。

framework

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

单从稀疏编码的角度看,如Fig 2.所示,整个工作中,将会考虑将中间特征图的H×W×DH \times W \times DH×W×D,通过用离散的稀疏编码表示,形状为H×W×1H \times W \times 1H×W×1,进行稀疏编码的方式可以通过简单的最近邻方法得到,如公式(1-1)所示
q(z=k∣x)={1fork=arg⁡min⁡j∣∣ze(x)−ej∣∣20otherwise(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)
其中的xxx为原始的图片输入,ze(x)z_e(x)ze(x)表示图片输入经过编码器后得到的feature map,而q(z∣x)q(z|x)q(zx)即是进行稀疏编码后的结果。通过式子(1-2),可以将稀疏编码后的结果恢复为feature map(当然这个过程是有损的,只保留最为重要的特征信息)。整个过程可见Fig 2.示意图,应该比较容易理解。
zq(x)=ek,wherek=arg⁡min⁡j∣∣ze(x)−ej∣∣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字典的参数。然而稀疏编码的过程由于出现了最近邻方法,这个过程显然是无法传递梯度的,为了实现编码器的更新,可以考虑将解码器的梯度直接拷贝到编码器中。假设对于编码后恢复的zq(x)z_q(x)zq(x)而言,其每个元素表示为Di,j,kD_{i,j,k}Di,j,k,那么对于其中某个元素的梯度表示为∂L∂Di,j,k\dfrac{\partial \mathcal{L}}{\partial D_{i,j,k}}Di,j,kL,同理,对于编码后的ze(x)z_e(x)ze(x)而言,同样有∂L∂Ei,j,k\dfrac{\partial \mathcal{L}}{\partial E_{i,j,k}}Ei,j,kL,令∂L∂Ei,j,k=∂L∂Di,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∂WE=∂Ei,j,k∂WE∂L∂Ei,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)所示,其中的sg(⋅)sg(\cdot)sg()为停止梯度函数,表示该函数无梯度传导。decoder的参数通过第一项损失项进行更新(这部分损失可通过MSE损失L(x,x^)\mathcal{L}(\mathbf{x}, \hat{\mathbf{x}})L(x,x^)建模),称之为重建损失。encoder参数通过第一项和第三项损失进行更新,其中第一项是重建损失,第三项是为了encoder编码产出和embedding space进行对齐而设计的,由于此时通过sg(⋅)sg(\cdot)sg()函数停止了梯度,因此此时E\mathcal{E}E的参数不会得到更新。Embedding space的参数通过第二项损失项进行更新,通过将encoder编码结果进行停止梯度,我们只对E\mathcal{E}E进行参数更新。

L=log⁡(p(x∣zq(x)))+∣∣sg[ze(x)]−E∣∣22+β∣∣ze(x)−sg[E]∣∣22(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×3128 \times 128 \times 3128×128×3的原始图片稀疏编码到32×32×132 \times 32 \times 132×32×1(K=512),信息压缩比为128×128×3×8/(32×32×9)=42.6128 \times 128 \times 3 \times 8/ (32 \times 32 \times 9)=42.6128×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).

相关文章:

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

【论文极速读】VQ-VAE:一种稀疏表征学习方法 FesianXu 20221208 at Baidu Search Team 前言 最近有需求对特征进行稀疏编码,看到一篇论文VQ-VAE,简单进行笔记下。如有谬误请联系指出,本文遵循 CC 4.0 BY-SA 版权协议,…...

Flask-Blueprint

Flask-Blueprint 一、简介 概念: Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求 。 好处: 其本质上来说就是让程序更加松耦合…...

png图片转eps格式

下载latex工具后 在要转换的png图片文件夹路径下,打开命令行窗口,输入以下命令: bmeps -c fig图片名.png 图片名.eps...

English Learning - L2 语音作业打卡 Day2 2023.2.23 周四

English Learning - L2 语音作业打卡 Day2 2023.2.23 周四💌 发音小贴士:💌 当日目标音发音规则/技巧:🍭 Part 1【热身练习】🍭 Part2【练习内容】🍭【练习感受】🍓元音[ ɔ: ]&…...

低频量化之 可转债 配债 策略数据 - 全网独家

目录历史文章可转债配债数据待发转债(进展统计)待发转债(行业统计)待发转债(5证监会通过,PE排序)待发转债(5证监会通过,安全垫排序)待发转债(4发审…...

论文阅读_DALLE-2的unCLIP模型

论文信息 name_en: Hierarchical Text-Conditional Image Generation with CLIP Latents name_ch: 利用CLIP的层次化文本条件图像生成 paper_addr: http://arxiv.org/abs/2204.06125 doi: 10.48550/arXiv.2204.06125 date_read: 2023-02-12 date_publish: 2022-04-12 tags: [‘…...

软件测试5年,历经3轮面试成功拿下华为Offer,24K/16薪不过分吧

前言 转眼过去,距离读书的时候已经这么久了吗?,从18年5月本科毕业入职了一家小公司,到现在快5年了,前段时间社招想着找一个新的工作,前前后后花了一个多月的时间复习以及面试,前几天拿到了华为的…...

【软件工程】课程作业(三道题目:需求分析、概要设计、详细设计、软件测试)

文章目录:故事的开头总是极尽温柔,故事会一直温柔……💜一、你怎么理解需求分析?1、需求分析的定义:2、需求分析的重要性:3、需求分析的内容:4、基于系统分析的方法分类:5、需求分析…...

05 DC-AC逆变器(DCAC Converter / Inverter)简介

文章目录0、概述逆变原理方波变换阶梯波变换斩控调制方式逆变器分类逆变器波形指标1、方波变换器A 单相单相全桥对称单脉冲调制移相单脉冲调制单相半桥2、方波变换器B 三相180度导通120度导通(线、相的关系与180度相反)3、阶梯波逆变器独立直流源二极管钳…...

带你深层了解c语言指针

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨今天…...

2-MATLAB APP Design-下拉菜单栏的使用

一、APP 界面设计展示 1.新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、下拉菜单栏、坐标区,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:下拉菜单栏的使用,调整背景颜色,字体的颜色为黑色,字体的大小调为26. 2.在左侧组件库常用栏…...

七、HTTPTomcatServlet

1,Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 在我们日常的生活中,经常会使用浏览器去访问百度、京东、传智官网等这些网站,这些网站统称为Web网站。如下就是通…...

LeetCode 热题 C++ 198. 打家劫舍

力扣198 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存…...

C语言学习笔记——程序环境和预处理

目录 前言 一、程序环境 1. 翻译环境 1.1 主要过程 1.2 编译过程 2. 运行环境 二、预处理 1. 预定义符号 2. #define 2.1 #define定义标识符 2.2 #define定义宏 2.3 命名约定和移除定义 3. 条件编译 4. 文件包含 结束语 前言 每次我们写完代码运行的时候都…...

「JVM 高效并发」Java 内存模型

Amdahl 定律代替摩尔定律成为了计算机性能发展的新源动力,也是人类压榨计算机运算能力的最有力武器; 摩尔定律,描述处理器晶体管数量与运行效率之间的发展关系;Amdahl 定律,描述系统并行化与串行化的比重与系统运算加…...

C语言刷题(2)——“C”

各位CSDN的uu们你们好呀,今天小雅兰来复习一下之前所学过的内容噢,复习的方式,那当然是刷题啦,现在,就让我们进入C语言的世界吧 当然,题目还是来源于牛客网 完完全全零基础 编程语言初学训练营_在线编程题…...

第一个 Spring MVC 注解式开发案例(初学必看)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

openresty学习笔记

openresty 简介 openresty 是一个基于 nginx 与 lua 的高性能 web 平台,其内部 集成了大量精良的 lua 库、第三方模块以及大数的依赖项。用于 方便搭建能够处理超高并发、扩展性极高的动态 web 应用、 web 服务和动态网关。 openresty 通过汇聚各种设计精良的 ngi…...

微信小程序DAY3

文章目录一、页面导航1-1、声明式导航1-2、编程式导航1-3、声明式导航传参1-4、编程式导航传参1-5、获取导航传递的参数二、页面事件2-1、下拉刷新事件2-1-1、启用下拉刷新2-1-2、配置下拉刷新2-1-3、监听页面下拉刷新事件2-2、上拉触底事件2-2-1、事件触发2-2-1、事件配置三、…...

【CAN】手把手教你学习CAN总线(一)

CAN总线一、CAN总线概念二、CAN的差分信号三、CAN总线的通信协议1、 帧起始2、仲裁段3、控制段4、数据段5、CRC段6、ACK段7、帧结束四、CAN的位时序1、同步段(SS)2、传播时间段(PTS)3、相位缓冲段(PBS)4、再…...

JUC 体系的基石——AQS

—— AQS(AbstractQueuedSynchronizer) 概念 抽象队列同步器;volatile cas 机制实现的锁模板,保证了代码的同步性和可见性,而 AQS 封装了线程阻塞等待挂起,解锁唤醒其他线程的逻辑。AQS 子类只需要根据状…...

Qt中信号与槽的使用

Qt中信号与槽的使用 Qt当中一个重要的东西是信号和槽,它被用于对象之间的通信。 在Qt中,例如“点击按钮”这个事件就是发送信号的对象,接收信号的是某一个窗口,响应信号的是一个处理,可以是隐藏窗口或者是关闭窗口。…...

力扣-销售员

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:607. 销售员二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 …...

HTML综合案例练习

一、展示简历内容 可以首先看一下我们的效果,之后再思考怎么实现 总的来说,这个练习不算难。 这里关于这个简历的代码编写我们不说太多,只注意以下几个内容即可: 注意及时查看我们的代码是否符合预期,即一段一段测 …...

MySQL运维

目录 1、日志 1、错误日志 2、二进制日志 3、查询日志 4、慢查询日志 2、主从复制 搭建 1、主库配置 2、从库配置 3、分库分表 1、简介 ​编辑 1、垂直拆分 2、水平拆分 3、实现技术 2、MyCat 3、MyCat使用和配置 配置 4、MyCat分片 1、垂直拆分 2、水平拆分…...

【网络原理10】构造HTTP请求、HTTPS加密

目录 一、构造HTTP请求 ①使用form表单构造HTTP请求: form表单是如何提交的 form提交的缺点 ②基于ajax构造http请求 如何使用Jquery框架 二、HTTPS 运营商劫持 HTTP的加密版本:HTTPS ①对称加密:客户端和服务端使用同一把密钥&…...

Allegro如何锁定报表界面操作指导

Allegro如何锁定报表界面操作指导 用Allegro做PCB设计的时候,进行测量的时候,比如测量器件两个PIN中间的间距,如下图,会有一个报表显示 但是当运行下一个命令的时候,报表会被自动关闭掉。 但是有时我们需要报表界面仍被保留 下面介绍如何将报表界面进行锁定,不受下一个…...

基于STM32的微型电子琴设计

基于STM32的微型电子琴设计报告中的图片和文字太多了,全部一个一个把搬过来太麻烦了,需要完整文本和代码自行q我963160156 第一章 总体设计1.1 系统功能1.2 主要技术性能指标第二章硬件设计2.1 整体硬件图2.2 按键模块2.3 扬声器模块2.4 显示模块2.5 主控模块第三章…...

Shell输入输出重定向

一、文件描述符 文件描述符是一个非负整数。它是一个索引值,指向进程打开的文件。 Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。 每个文件描述符会与一个打开的文件相对应 不同的文件描述符也可能指向同一个文件 在L…...

华为OD机试-运维日志排序

文章目录题目描述输入描述输出描述:示例Java 代码实现题目描述 运维工程师采集到某产品线网运行一天产生的日志n条,现需根据日志时间先后顺序对日志进行排序,日志时间格式为H:M:S.N。 H表示小时(0~23) M表示分钟(0~59) S表示秒(0~59) N表…...