4-bit量化几乎不掉分类准确率,检索top-1却换掉14%–46%

The Undetected Damage of Quantization on Retrieval and How to Fix It

Luca Zhou, Alessandro Zirilli, Daniele Solombrino, Roberto Dessì, Emanuele Rodolà

cs.LG, cs.AI

2026-09-21

同一套4-bit权重,分类top-1只变3%–9%,检索却换掉14%–46%。根因是第一名与第二名的分数间隔;检索几乎没有间隔。按间隔敏感度混精度,能收回多1 bit收益的60%–73%。

这篇在解决什么

后训练量化(PTQ)的验收习惯是看分类准确率:4-bit几乎不掉点,就当量化成功。检索、RAG、推荐、重排看的是排序。这篇把同一份checkpoint、同一套量化器拿去既做分类又做检索,发现准确率保住的时候,top-1检索结果已经换了一批。

标准指标还在帮这个损坏隐身。CLIP文搜图Recall@1只掉1.3%,但约四分之一的top-1变了,原先排对的查询里有十分之一把图丢掉。Qwen3-Embedding-8B的nDCG@10只掉3.1%,原先top-1是相关文档的查询里有约六分之一把它挤出第一名。

方法

把量化看成对每个分数最多扰动ε。第一名要保住,它和第二名的间隔g₂必须至少2ε,否则存在一个合法扰动把名次换掉。分类的交叉熵会把正确类的logit推远;检索的对比损失只把正例和配对负例分开,第一名和第二名之间没有间隔压力。这个间隔不需要标签:部署前用它预测哪些模型会被量化打穿,部署时用量化模型自己的top-1/top-2间隔,对照一次无标签校准得到的阈值,判断这条输入的答案能不能信。

检索几乎每条查询都在风险里,修法是全局的:在3.5 bit均预算下,把多出来的那半bit分给「单独量化时最会挪动g₂」的层。分类只有少数输入有风险,修法是按条路由:量化前向已经算出间隔,低于阈值的送回全精度。

实验覆盖ViT-B/16、ViT-L/16、Qwen3-Embedding 0.6B/4B/8B,外加GTE、BGE、E5和CLIP,量化器包括RTN、GPTQ、AWQ、HQQ、AdaRound,权重量化W4/W3。

结果

同一backbone、W4、group128、RTN:

Backbone分类top-1改变率检索top-1改变率倍数
ViT-B/166.2%45.5%7.3×
ViT-L/162.9%42.1%14.3×
Qwen3-Emb-0.6B4.3%33.4%7.8×

W4下检索改变率大约14%–46%,看模型和量化器。CLIP ViT-L/14在Flickr30k上Recall@1掉1.3%,top-1改变24.6%,原先排对的查询有10.9%把正确图丢掉。BEIR上Qwen3-Emb-8B的nDCG@10相对掉3.1%,gold文档离开top-1的比例是15.6%。翻掉且原top-1相关的案例里,66%(W4)/77%(W3)换成了不相关文档。

间隔把两类任务切开:分类输入有85.8%越过稳定阈值,检索查询只有3.5%;中位分离比g₂/2ε是5.73对0.081。这个比值和改变率的Spearman相关是−0.88(2118个配置)。更强量化器能降低改变率,例如ViT-B/16检索W4从RTN的45.5%降到GPTQ act-order的30.6%,但全部远低于稳定线。W3上检索改变率常在50%以上。

混精度:按间隔敏感度分配3.5 bit,在六个量化器上收回W3→W4收益的60.2%–73.4%, consistently压过重建误差(约40%–48%)。分类侧把25%低间隔输入路由到全精度,能挽回量化丢掉的准确率的85%–93%,算力大约是全精度的47%。

为什么重要

「准确率几乎不变」不能当检索量化的验收。nDCG@10对top-1换人也不敏感,因为被挤下去的文档往往还在前十里。对RAG来说,第一名换了,生成答案就换了;两台不同精度的服务器还会对同一查询给出不同文档。间隔可以无标签计算,能在上线前挑模型、上线后拒答或混精度。检索该把bit花在会挪动间隔的层上,分类该把少数危险输入送回全精度。挑检索模型时,间隔比参数量更有用:GTE-large(0.34B)在两个bit宽下top-1改变都少于Qwen3-Emb-4B。

局限与存疑

只做了3/4 bit的权重量化,激活量化没测。稳定检查默认校准分布和线上一致,分布一漂就失效。检索是有限语料上的精确余弦,ANN索引自己引入的排序误差不在范围内。top-k稳定性在检索里几乎用不上,因为第一名以下的间隔还要再小一个数量级。分类路由按验证集gq的25分位设阈值,换数据要重标定。论文没有证明训练目标改成直接拉大g₂就能让检索更耐量化,只在结论里把它列为开放问题。

术语

原文与代码

社区讨论

相关论文

全部论文解读