FSQ(有限标量量化)
将中间表示投影到低维空间后对每个维度独立做有界舍入取整,替代向量量化(VQ),实现码本 100% 利用率且无需学习码本。
是什么
FSQ(Finite Scalar Quantization,有限标量量化)来自 Mentzer et al. (ICLR 2024),核心思想是”VQ-VAE 做简单就好”。它将输入投影到 D 维低维空间后,对每个维度独立量化到 [-K, K] 范围内的整数,然后投影回原维度。与 VQ 不同,FSQ 不需要维护和更新码本(codebook)。
为什么重要
- 100% 码本利用率:VQ 常出现码本崩塌(codebook collapse),大量码字从未被使用(CosyVoice 1 中 VQ 利用率仅 23%)。FSQ 天然利用所有可能的组合。
- 更丰富的信息保持:FSQ token 在 ASR 任务上的 WER 显著低于 VQ token(英文 CommonVoice: 10.67% vs 18.26%),说明保留了更多语义信息。
- 简化训练:无需 EMA 更新码本、无需处理死码字(dead codes),straight-through estimator 直接近似梯度。
- 下游 TTS 收益:更好的语义保持 → LM 对齐更容易 → 内容一致性更高。
工作原理
H = Encoder1(X) # 中间表示
H̄ = ROUND(Proj_down(H)) # 低维投影 + 逐维取整
Ĥ = Proj_up(H̄) # 投影回原维度
μ_i = Σ_j h̄_{i,j} · (2K+1)^j # 低维向量转为标量索引
- Proj_down: d → D 维(D << d)
- ROUND: 将每维值舍入到 [-K, K]
- 有效 token 数: (2K+1)
- CosyVoice 2/3 中使用 K=2, D=4 → 625 个有效 token
- 训练时使用 straight-through estimator 近似量化梯度
与 VQ 的对比
| 维度 | VQ | FSQ |
|---|---|---|
| 量化方式 | 找码本最近邻 | 逐维舍入取整 |
| 码本利用率 | 低(常<50%) | 100% |
| 码本学习 | 需要(EMA/梯度) | 不需要 |
| 死码字问题 | 有 | 无 |
| 信息瓶颈 | 由码本大小 | 由 D 和 K 控制 |
| 梯度近似 | Straight-through | Straight-through |
常见误解
- “FSQ 码本大小 (2K+1)^D 随 D 指数增长,会太大”:实际上 D 和 K 都很小(如 D=4, K=2 仅有 625),比 VQ 的 4096 还小,但利用率 100% 意味着有效信息更多。