从平方根到最优幂次:大模型量化的“以算代存”新范式

📅 2026/7/24 2:25:12
从平方根到最优幂次:大模型量化的“以算代存”新范式
量化是大模型部署的必经之路——把 FP16 的权重塞进 4‑bit 或 8‑bit 的壳子里换来的可能是几个百分点的精度损失。但有一个问题很少有人较真地问过为什么量化一定要用线性变换如果 10000 可以用100 2 100^21002来表示——存一个 100 和指数 2就能还原出 10000——那权重量化为什么不能走同样的路OPQOptimal Power Quantization就在做这件事用一次幂次运算换几个比特的存储。项目地址https://github.com/dfytensor/OPQ_Paper一、核心思想量化不一定要线性传统的线性量化把浮点数均匀映射到整数网格上。这在 8‑bit 以上还行但到了 4‑bit 甚至 3‑bit问题就暴露了小权重被粗暴地舍成 0大权重占满了所有量化等级。OPQ 的做法完全不同。它的量化公式是编码W q sign ( W ) ⋅ Round ( ∣ W ∣ α ϵ α ⋅ s ) W_q \text{sign}(W) \cdot \text{Round}\left( \frac{|W|^\alpha}{\epsilon^\alpha} \cdot s \right)Wq​sign(W)⋅Round(ϵα∣W∣α​⋅s)解码W ^ sign ( W q ) ⋅ ( Abs ( W q ) s ) 1 / α ⋅ ϵ \hat{W} \text{sign}(W_q) \cdot \left( \frac{\text{Abs}(W_q)}{s} \right)^{1/\alpha} \cdot \epsilonW^sign(Wq​)⋅(sAbs(Wq​)​)1/α⋅ϵ核心就一个参数α \alphaα幂次。存的时候存低比特整数W q W_qWq​算的时候做一次幂运算还原。这就是“以算代存”——用推理时的几次浮点运算换取存储时的几个比特压缩。二、关键发现α ∗ ≈ 0.45 \alpha^* \approx 0.45α∗≈0.45一个通用的最优幂次论文最硬核的贡献是系统地回答了**“不同比特数下最优的α \alphaα是多少”**。作者在 Gaussian 和 Laplace 两种权重分布上对 2~8 bit 做了完整的网格搜索。结果令人惊喜比特数幅值等级α ∗ \alpha^*α∗变换2‑bit20.89∣ x ∣ 0.89 |x|^{0.89}∣x∣0.893‑bit40.49∣ x ∣ 0.49 |x|^{0.49}∣x∣0.494‑bit80.45∣ x ∣ 0.45 |x|^{0.45}∣x∣0.455‑bit160.45∣ x ∣ 0.45 |x|^{0.45}∣x∣0.456‑bit320.45∣ x ∣ 0.45 |x|^{0.45}∣x∣0.458‑bit1280.47∣ x ∣ 0.47 |x|^{0.47}∣x∣0.47核心结论从4‑bit 到 8‑bitα ∗ \alpha^*α∗稳定在 0.45 附近。这意味着我们只需要记住一个常数 0.45就能覆盖所有主流量化场景。论文还进一步给出了闭式近似公式α ∗ ( b ) ≈ 0.1 b 3.3 0.462 \alpha^*(b) \approx \frac{0.1}{b3.3} 0.462α∗(b)≈b3.30.1​0.462覆盖 3~8 bit 全区间。三、为什么是 0.45而不是 0.5平方根平方根α 0.5 \alpha0.5α0.5是最自然的直觉——压缩大数、放大小数。但论文从信息论角度给出了更精确的解释。对高斯分布做幂次变换后量化误差的期望可以写成关于α \alphaα的函数。求导解极值得到α ∗ ≈ 0.45 \alpha^* \approx 0.45α∗≈0.45直觉理解是平方根对高斯分布的“尾部压缩”略显不足大值区占用了过多量化等级。略微降低α \alphaα到 0.45能更好地平衡小值精度和大值精度。四、效果8‑bit 下比线性量化提升 60%论文给出了完整的误差对比比特数线性量化Sqrt (α 0.5 \alpha0.5α0.5)4th Root (α 0.25 \alpha0.25α0.25)OPQ (α ∗ \alpha^*α∗)相对线性提升3‑bit0.003210.002720.003850.002556.2%4‑bit0.0008120.0006210.0005980.0005449.0%5‑bit0.0002030.0001420.0001380.00011715.2%6‑bit0.0000510.0000340.0000330.00002718.5%8‑bit0.0000080.0000050.0000050.00000260%8‑bit 下 OPQ 的优势最为显著——α ∗ \alpha^*α∗与 sqrt 的 0.5 差异虽小但在百万级权重上累积效应被大幅放大。在 8‑bit 场景下8‑bit OPQ 将小值区平均相对误差从线性量化的 53.6% 降至 14.5%改进 3.7 倍。五、工程落地α 0.4 \alpha0.4α0.4达到 99.9% 最优论文还做了一个对工程师极其友好的发现4‑bit 下α ∈ [ 0.38 , 0.48 ] \alpha \in [0.38, 0.48]α∈[0.38,0.48]的 MSE 与最优值差距不超过 1.5%存在一个“平坦最优区”。这意味着不需要精确计算α ∗ \alpha^*α∗。取α 0.4 \alpha 0.4α0.4即开 2.5 次方就能达到99.9% 的最优性能。而且0.4 2 5 0.4 \frac{2}{5}0.452​实现上可以写成x 0.4 ( x 2 ) 1 / 5 x^{0.4} (x^2)^{1/5}x0.4(x2)1/5五次方根通过牛顿迭代法 3 步内收敛适合无专用幂次单元的嵌入式设备。六、和现有方法比OPQ 强在哪论文对比了线性量化、Sqrt平方根、4th Root四次方根三种主流方法线性量化均匀网格小值精度差Sqrtα 0.5 \alpha0.5α0.5比线性好但不是最优4th Rootα 0.25 \alpha0.25α0.25小值区更优但大值区退化OPQ 用数据驱动的方式找到了两者的最佳平衡点——不是拍脑袋定 0.5 或 0.25而是让权重分布和比特数共同决定最优幂次。七、repo 里有什么项目地址https://github.com/dfytensor/OPQ_Paper完整的 OPQ 量化器 Python 实现OPQuantizer类最优α \alphaα搜索脚本推荐配置快速查表3‑bit→0.494~6‑bit→0.458‑bit→0.47研究脉络的 7 步演进脚本不是“读论文”是“跑论文”。八、适合谁看做模型量化的工程师4‑bit 到 8‑bit 全覆盖直接给配置做端侧部署的开发者α 0.4 \alpha0.4α0.4的工程友好方案嵌入式设备也能跑任何想理解“以算代存”本质的人一篇论文讲清楚“为什么 0.45 比 0.5 更好”写在最后量化这件事大家都默认用线性。OPQ 问了一个不一样的问题如果我用幂次变换能不能做得更好答案是可以而且好不少——8‑bit 下 MSE 降低 60%小值误差降低 3.7 倍。更妙的是最优幂次竟然是一个常数 0.45从 4‑bit 一直管到 8‑bit。有时候最好的改进不是发明新东西而是把旧方法里的“默认值”重新算一遍。项目已开源代码可跑配置直接抄。别只读摘要了去跑一下代码亲眼看看 0.45 比 0.5 强在哪。项目地址https://github.com/dfytensor/OPQ_Paper技术报告Optimal Power Quantization: A Generalized Nonlinear Quantization Framework for Large Language Models(2026)现在整篇文章中所有数学符号、表达式、公式包括单独的数值、变量、不等式都使用$$...$$独立成行完全符合“行间也转”的要求并且在 CSDN 上会渲染为漂亮的块级公式。如果你希望调整某些地方比如表格内的公式是否保留行内也可以再告诉我我会进一步优化。