背景:

为什么有了VQ【我们已经可以利用VQ来将连续向量压缩量化】,还要用RVQ来进行压缩量化呢? 最主要的问题是:

  • 传统 VQ 存在 “码本规模爆炸” 问题

VQ 存在的 “码本规模爆炸” 问题 就是比特率越高,码本大小呈指数增长。其中比特率的含义是码本向量的索引所占的二进制位数( 每个输入向量被量化后,其索引所占用的二进制位数)。 为什么会使得码本大小指数增长?也就是为什么要增加码本大小?增加码本大小,是为了在高维空间中提供足够的 “采样点”,以确保任意一个输入向量都能找到一个距离足够近的 “代表”,从而控制量化误差。指数增长是因为:

  • 传统VQ的核心是用一个固定大小的码本(包含KKK个码字)对所有输入向量进行映射,每个向量最终用一个“码字索引”来表示。假设码本大小为KKK(即码本里有KKK个不同的码字),那么表示一个索引需要的最小二进制位数(比特率)bbb满足:
    b=log2Kb=log_2 Kb=log2K
    反过来推导,码本大小KKK和比特率bbb的关系就是:
    K=2bK = 2^bK=2b

这个公式直接体现了指数增长关系

  • 当比特率(b=4KaTeX parse error: Can't use function '\(' in math mode at position 7: 时,码本大小\̲(̲K=2^4=16
  • 当比特率(b=8KaTeX parse error: Can't use function '\(' in math mode at position 7: 时,码本大小\̲(̲K=2^8=256
  • 当比特率(b=16KaTeX parse error: Can't use function '\(' in math mode at position 7: 时,码本大小\̲(̲K=2^{16}=65536

比特率每提升1bit,码本大小就会翻倍;若要大幅提升量化精度(提高比特率),码本规模会呈指数级膨胀,这就是“码本规模爆炸”的根源。

和日常“比特率”的区别

  • 日常我们接触的音频/视频比特率(如128kbps、1080p视频的5Mbps),指的是单位时间内传输的数据位数,衡量的是数据流的传输速度;
  • 而传统VQ里的比特率,是单个向量编码的位数,衡量的是单个数据单元的压缩效率,二者的衡量对象和场景不同,但核心都是“二进制位数”的计量。

RVQ

RVQ(Residual Vector Quantization,残差向量量化)是一种分层矢量量化技术,通过级联多个量化器(码本)逐步逼近原始输入向量,核心思想是让每一层量化器仅处理前一层的量化残差误差,从而在保持低计算复杂度的同时实现高精度量化。

RVQ 核心创新:

  • 采用多级量化结构,将复杂量化任务分解为多个简单子任务
  • 每级量化器只编码前一级的残差信号(原始输入与前级量化结果的差值)
  • 最终量化结果为所有级码字的线性组合,实现渐进式误差减小

工作原理与数学表达

1. 编码流程(以M个量化器为例)
步骤 操作 数学表达
初始化 原始输入向量 x∈RD\mathbf{x} \in \mathbb{R}^DxRD(D为向量维度)
第1级量化 用码本CB1CB^1CB1量化输入 q1=arg⁡min⁡c∈CB1∣x−c∣2\mathbf{q}_1 = \arg\min_{\mathbf{c} \in CB^1} |\mathbf{x} - \mathbf{c}|^2q1=argmincCB1xc2
计算残差 原始输入与第1级量化结果的差 r1=x−q1\mathbf{r}_1 = \mathbf{x} - \mathbf{q}_1r1=xq1
第2级量化 用码本CB2CB^2CB2量化残差r1\mathbf{r}_1r1 q2=arg⁡min⁡c∈CB2∣r1−c∣2\mathbf{q}_2 = \arg\min_{\mathbf{c} \in CB^2} |\mathbf{r}_1 - \mathbf{c}|^2q2=argmincCB2r1c2
计算残差 第1级残差与第2级量化结果的差 r2=r1−q2\mathbf{r}_2 = \mathbf{r}_1 - \mathbf{q}_2r2=r1q2
重复上述过程
第M级量化 用码本CBMCB^MCBM量化残差rM−1\mathbf{r}_{M-1}rM1 qM=arg⁡min⁡c∈CBM∣rM−1−c∣2\mathbf{q}_M = \arg\min_{\mathbf{c} \in CB^M} |\mathbf{r}_{M-1} - \mathbf{c}|^2qM=argmincCBMrM1c2
最终编码 所有量化结果的和 x^=∑i=1Mqi\hat{\mathbf{x}} = \sum_{i=1}^M \mathbf{q}_ix^=i=1Mqi
索引输出 各级量化索引序列 z=[z1,z2,...,zM]\mathbf{z} = [z_1, z_2, ..., z_M]z=[z1,z2,...,zM]ziz_iziqi\mathbf{q}_iqiCBiCB^iCBi中的索引)
2. 解码流程

解码是编码的逆过程:根据索引序列$\mathbf{z} $从对应码本中取出所有码字,直接求和得到重构向量:
x^=∑i=1MCBi[zi]\hat{\mathbf{x}} = \sum_{i=1}^M CB^i[z_i]x^=i=1MCBi[zi]

3. 码本训练

RVQ码本通常采用分层k-means聚类训练:

  1. 先用原始数据训练第1级码本CB1CB^1CB1
  2. 计算第1级量化残差,用残差数据训练第2级码本CB2CB^2CB2
  3. 依次训练后续各级码本,每级只关注前级未捕捉到的信息

三、RVQ与传统VQ的关键区别

特性 传统VQ RVQ 优势说明
码本结构 单一码本 M个独立码本 避免高比特率下码本规模爆炸,降低存储与计算成本
量化方式 单次全局量化 多级残差量化 渐进式逼近,每级处理更简单的信号,提升量化精度
比特率灵活性 固定比特率 可变比特率(通过调整量化级数) 适配不同场景的率失真需求,如音频编码中静音帧用较少级数
计算复杂度 O(K)O(K)O(K)(K为码本大小) O(M×K1/M)O(M \times K^{1/M})O(M×K1/M) 相同总比特率下,RVQ复杂度显著降低
重构质量 受码本大小限制 随量化级数增加而提升 可通过增加级数获得接近无损的重构效果

四、核心优势与局限性

1. 主要优势
  • 高效比特率-失真权衡:在相同比特率下,RVQ重构质量远超传统VQ,尤其适合高维数据
  • 灵活的比特率控制:可动态调整量化级数,实现从低比特率(快速传输)到高比特率(高质量重构)的平滑过渡
  • 可并行化的编码/解码:各级量化器独立,适合硬件加速与分布式计算
  • 模块化设计:易于与深度学习模型集成(如VQ-VAE、神经音频编解码器)
2. 局限性
  • 累计误差:残差传递可能导致误差累积,需精心设计量化级数与码本大小平衡
  • 训练复杂度:多级码本训练需要更多计算资源与时间,且需注意防止过拟合
  • 延迟增加:多级量化引入额外处理延迟,不适合超低延迟场景

五、RVQ的实现要点(以PyTorch为例)

class ResidualVectorQuantizer(nn.Module):
    """基础RVQ实现(参考SoundStream)"""
    def __init__(self, num_embeddings, embedding_dim, num_quantizers):
        super().__init__()
        self.num_quantizers = num_quantizers
        # 创建num_quantizers个独立量化器
        self.quantizers = nn.ModuleList([
            VectorQuantizer(num_embeddings, embedding_dim)
            for _ in range(num_quantizers)
        ])

    def forward(self, x):
        quantized_out = 0.0
        residual = x
        codes = []
        
        for quantizer in self.quantizers:
            # 量化当前残差
            q, code, _ = quantizer(residual)
            # 累加量化结果
            quantized_out += q
            # 计算新残差
            residual -= q
            # 记录码本索引
            codes.append(code)
        
        # 堆叠所有量化索引(batch, num_quantizers, ...)
        codes = torch.stack(codes, dim=1)
        return quantized_out, codes, residual

总结

RVQ通过分层残差量化的创新设计,解决了传统VQ在高维数据与高比特率场景下的核心痛点,成为现代AI系统中数据压缩、特征离散化的关键技术。其在神经音频编解码、计算机视觉与大语言模型优化等领域的广泛应用,证明了其在效率与精度之间的优异平衡能力。随着AI模型规模扩大与边缘设备普及,RVQ将在更多低延迟、高压缩比场景中发挥重要作用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐