ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

turbovec 原理篇(三):Lloyd-Max 量化器如何逼近香农失真-率极限

2026/8/29 13:55:53 拓冰建站 浏览量
turbovec 原理篇(三):Lloyd-Max 量化器如何逼近香农失真-率极限 turbovec 原理篇三Lloyd-Max 量化器如何逼近香农失真-率极限【免费下载链接】turbovecA vector index built on TurboQuant, written in Rust with Python bindings项目地址: https://gitcode.com/GitHub_Trending/tu/turbovecturbovec 是一个用 Rust 编写、带 Python 绑定的向量索引库它的核心是用 Lloyd-Max 标量量化器把每个坐标压到 2~4 bit。这篇文章原理篇第三篇回答一个问题这个量化器的失真到底能逼近理论极限多少结论先行实测失真低于香农失真-率下界的 3 倍官方口径约 2.7 倍而且整个过程不需要任何训练数据——码本完全由数学推导得出这是它最反直觉、也最优雅的地方。为什么需要压到极限的量化先看量化带来的收益一个 1536 维的 FP32 向量占6,144 字节压成 2-bit 后只剩384 字节16 倍压缩。1000 万文档的语料从 31 GB 内存缩进 4 GB这就是 turbovec 的卖点。但压得狠和搜得准是矛盾的——量化失真会直接拖累召回率。所以真正的问题是每 bit 能容忍的最小失真到底是多少我们离它有多远信息论给出了答案的地板香农失真-率极限Shannon distortion-rate limit。对均值为 0、方差归一的高斯型坐标R bit/坐标的量化失真存在一个理论下界$$D_{\min} \frac{2^{-2R}}{d}$$任何量化器都打不破这个下界能逼近它的才算最优级量化器。turbovec 的 Lloyd-Max 码本就站在这个地板上不远处。前提随机旋转让分布可预测Lloyd-Max 能算出最优码本前提是知道坐标服从什么分布。turbovec 的聪明之处见turbovec/src/rotation.rs归一化把每个向量拆成长度 单位方向只量化方向随机正交旋转所有向量乘以同一个随机正交矩阵。旋转之后有一个漂亮的数学事实单位超球面上的向量其任意一个坐标都精确服从$$\mathrm{Beta}\left(\tfrac{d-1}{2},\ \tfrac{d-1}{2}\right) \quad \text{定义在 } [-1, 1] \text{ 上}$$且维度 d 足够大时趋近高斯 N(0, 1/d)。关键在于这个分布与你的数据长什么样完全无关。无论嵌入是 GloVe 还是 OpenAI旋转后坐标分布都可预测——这就是 TurboQuant 论文所说的>比特数论文理论 MSE每坐标turbovec 实测2-bit0.1175 / d偏差 5%3-bit0.03454 / d偏差 5%4-bit0.009497 / d偏差 5%② 卡香农下界对 d ∈ {256, 768, 1536}、bits ∈ {2, 3, 4} 共 9 个组合断言MSE / (2^{-2bits} / d) 3.0——失真不到下界的 3 倍MSE / 下界 1.0——确实没跌破理论极限跌破说明算错了。README 给出的更精确口径失真约为香龙失真-率下界的 2.7 倍以内。对免训练、免调参、在线写入的量化器来说这是几乎贴着理论地板在走的水平。补一刀消除内积估计的系统性偏差光失真接近最优还不够。标量量化有个隐蔽副作用重建出来的单位向量比原向量略短会系统性低估内积分数低比特时收缩最严重直接吃掉召回率。turbovec 的修法turbovec/src/encode.rs改编自 RaBitQ编码时为每个向量算一个标量‖v‖ / ⟨u, x̂⟩原向量与其重建的内积的倒数补偿随压缩向量一起存下检索时打分内核在插入堆之前乘上这个标量——零检索开销、零额外存储把有偏估计拉回无偏。召回收益在 2-bit 档最明显。另外可选开启TQ 校准index.calibrate(sample)用约 1024 行随机样本为每个坐标拟合一个平移和缩放把有限维度下与 Beta 形状的漂移对齐目标分布。不调用就退化为标准 TurboQuant调用后在最易漂移的 2-bit 场景上 recall1 最高 2.2pp。自己动手5 分钟验证逼近极限pip install turbovecfrom turbovec import TurboQuantIndex index TurboQuantIndex(dim1536, bit_width2) # 2-bit 档 index.add(vectors) # float32, shape (n, 1536) scores, indices index.search(query, k10)想核对失真数据直接读仓库源码即可Lloyd-Max 求解器turbovec/src/codebook.rs编码与长度重归一化turbovec/src/encode.rs随机旋转与 Beta 分布推导turbovec/src/rotation.rs失真-率对拍测试turbovec/src/kernel_tests.rs码本确定性测试turbovec/tests/codebook_determinism.rs小结一句话记住这一篇关键点结论码本从哪来纯数学推导Beta 分布 200 轮 Lloyd-Max 迭代零训练数据失真水平香农失真-率下界的2.7 倍以内偏差修正每向量一个标量内积估计无偏化工程代价每形状 25~100 ms进程级记忆化turbovec 的 Lloyd-Max 量化器 已知分布下的免费最优分布由随机旋转保证码本由数学给出失真贴着香龙地板走——这正是在线写入、免训练、近最优失真三者能同时成立的底层原因。下一篇预告bit-pack 布局与 SIMD 查表内核——384 字节的向量是怎么被 NEON/AVX-512 打爆 FAISS 的。【免费下载链接】turbovecA vector index built on TurboQuant, written in Rust with Python bindings项目地址: https://gitcode.com/GitHub_Trending/tu/turbovec创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考