什么是残差量化(Residual Quantization)?一种逐级逼近向量的多码本量化方法
残差量化(RQ)是一种多码本向量量化方法:它用多个码本逐级量化上一步的量化误差,把每个向量表示成一串离散码字。本文说明它要解决的问题、逐级逼近的工作机制、RQ-VAE 与 QINCo 两个真实用例,以及它的适用边界与代价。
残差量化(Residual Quantization,RQ)是一种多码本(multi-codebook)向量量化方法:它把每个向量表示成来自若干个码本的一串码字,并且每一级只负责量化上一级留下的误差,也就是「残差」。它要解决的问题是:在码本规模有限、编码长度受限的前提下,如何用离散码字更精确地逼近原始向量,从而在数据压缩与向量检索中取得更好的率失真(rate-distortion)折中。
为什么重要
向量量化是数据压缩与向量搜索中的一项基础操作。若只用一个码本,每个向量只能被替换成码本中最接近的那一个码字,逼近精度受码本大小限制;而码本越大,存储与检索的代价也越高。为获得更高精度,多码本方法改用多个码本共同表示同一个向量,相当于在有限的编码长度内组合出远多于单个码本的候选组合。
残差量化正是这类方法中的一种。它的思路直观:第一级先做一次普通量化,第二级不再从零开始,而是去量化第一级没解释掉的那部分误差,第三级再量化第二级剩下的误差,如此逐级叠加。这样,即使每一级的码本都不大,多级码字叠加起来也能给出相当精细的逼近。
但传统残差量化有一个被指出的结构性局限。arXiv 论文《Residual Quantization with Implicit Neural Codebooks》指出:由于误差分布依赖于此前已经选定的码字,而传统 RQ 在每一个量化步骤都使用固定码本,这种依赖关系并没有被考虑进去。换句话说,无论前几级选了什么码字、当前残差长什么样,后续每一级面对的码本都是同一套。该论文把这一点作为改进的出发点。
工作机制
残差量化的核心做法可以按步骤拆开理解:
- 准备多个码本。 方法维护若干个码本,每个码本包含若干码字(码字即码本中的一个向量条目)。级数越多、每级码本越大,可组合出的编码就越多。
- 第一级量化。 对输入向量,在第一级码本中找出最接近的码字,记录该码字的编号,并计算量化后的误差,即残差。
- 逐级量化残差。 把上一步的残差送入下一级码本,同样选出最接近的码字并记录编号,再计算新的残差。如此重复,直到用完预定的级数。
- 拼接成码。 每一级选出的码字编号按顺序拼起来,就是该向量的离散编码;解码时把这些码字对应的向量相加,即可重建对原向量的近似。
这一机制带来两个直接后果。其一,编码长度与级数成正比,级数越多逼近越精细,但编码也越长。其二,重建结果是各级码字的累加,因此每一级只需专注于修正前面留下的偏差,而不必独立地表达整个向量。
针对传统做法「每级码本固定」的问题,前述论文提出了 QINCo,一种神经残差量化变体:它为每一个量化步骤构造专门的码本,而这些码本取决于此前各步对向量的近似结果。也就是说,后续码本不再是静态查表,而是随已选码字动态生成,从而把「误差分布依赖已选码字」这一事实纳入模型。
典型例子
素材中出现过两个具体的残差量化用例,分别位于向量检索与图像生成两个方向。
QINCo:面向向量检索的神经残差量化
arXiv 论文《Residual Quantization with Implicit Neural Codebooks》(作者为 Iris A. M. Huijben、Matthijs Douze、Matthew Muckley、Ruud J. G. van Sloun、Jakob Verbeek,该论文注明将发表于 ICML 2024)提出了 QINCo。该论文称,在多个数据集与码长设置上,QINCo 大幅优于当时的最先进方法;论文给出的一个例子是:在 BigANN1M 与 Deep1M 数据集上,QINCo 使用 12 字节编码所取得的最近邻搜索精度,优于当时最先进的 UNQ 使用 16 字节编码的结果。需要说明的是,这是该论文报告的结果,属于作者在其设定下的实验结论,而非独立复现的行业共识。
RQ-VAE 与 RQ-Transformer:面向图像生成的两阶段框架
arXiv 论文《Autoregressive Image Generation using Residual Quantization》(作者为 Doyup Lee、Chiheon Kim、Saehoon Kim、Minsu Cho、Wook-Shin Han,被 CVPR 2022 接收)提出了一个两阶段框架,由残差量化变分自编码器(Residual-Quantized VAE,RQ-VAE)与 RQ-Transformer 组成,用于高分辨率图像的自回归建模。
该论文的出发点是:自回归模型要把图像表示成离散码序列,序列越短,模型处理码之间长程交互的计算开销越小;但论文作者认为,以往的向量量化方法无法在率失真折中下同时做到缩短码序列与生成高保真图像。在其框架中,给定固定的码本大小,RQ-VAE 可以较精确地近似图像的特征图,并把图像表示成离散码的堆叠图;RQ-Transformer 则学习预测下一个位置的量化特征向量,方式是预测下一组码的堆叠。得益于 RQ-VAE 的精确近似,该论文可以把一张 256×256 的图像表示为 8×8 分辨率的特征图,从而降低计算开销。论文称,该框架在无条件与条件图像生成的多个基准上优于已有的自回归模型,采样速度也显著快于此前的自回归模型。
边界与常见误解
第一,残差量化不是「一次量化到位」,而是逐级修正。它的精度来自级数的叠加,因此编码长度、级数与精度之间存在取舍:级数增加会带来更长的编码和更多的解码累加操作。把它理解成「一个超大码本的单次查表」并不准确。
第二,传统 RQ 的固定码本假设是其已知局限之一。前述 QINCo 论文明确指出,传统 RQ 在每一步使用固定码本,未考虑误差分布对已选码字的依赖;QINCo 的改进正是针对这一点。因此,讨论 RQ 的效果时,需要区分「传统固定码本 RQ」与「依赖前序近似的神经 RQ 变体」,两者不是同一回事。
第三,关于性能的表述应回到出处。QINCo 在 12 字节下优于 UNQ 在 16 字节下的结果、RQ-VAE 与 RQ-Transformer 在图像生成基准上的优势与更快采样速度,都是各自论文作者报告的实验结论,涉及具体数据集、码长与评测设定;这些结论不应被泛化为「残差量化在任何场景都更优」。
第四,残差量化的适用面取决于任务对「离散化」的需求。它本质上是把连续向量替换为离散码字的近似表示,因此凡是需要无损还原原始数值、或对量化误差极其敏感的场景,都需要额外评估重建误差是否可接受。素材中的两个用例分别面向向量检索与图像生成,并不能据此推断它在其他数据类型或任务上同样适用。
第五,残差量化与「残差网络」中的残差概念名称相近但所指不同:前者指量化过程中逐级处理的误差,后者指神经网络中的跳跃连接结构,二者不应混为一谈。