99POS
全部 73 场景方案 7 方案白皮书 3 防损 1 计价实践 1 品类方案 1 品牌与机型 3 收银选型 16 收银指南 3 算力平台 18 外设与扫码 2 运维与验收 18
首页/ 运维与验收/ 模型压到 4 位,掉的那点精度补在哪

模型压到 4 位,掉的那点精度补在哪

2026-10-27 运维与验收 约 828 字

一个容易被放过的数字

供应商报量化结果:模型从 16 位压到 4 位,体积降到四分之一,推理速度快了,整体准确率掉 0.6 个百分点。

数字大概率是真的。上线之后,收银员开始抱怨某一类东西总认错——深色包装的咖啡、透明袋装的散装零食、堆在一起看不出边界的生鲜。

整体掉 0.6 个点,说明不了错在哪。4 位量化的误差不是均匀撒开的噪声,它有方向:少数通道的数值特别大,把量化区间撑开,同层其它通道就挤在很窄的格点上;误差集中在少数几个方向上,其它方向几乎无损。

结果就是:整体指标还行,局部系统性错。

为什么不能直接把权重调回来

最直觉的修法是微调——把量化后的权重往原来的值上拉一点。

问题是拉完就不标准了。硬件跑 4 位是为了那条快路径:标准的低位宽格式、固定的对齐、专门的指令。权重里一旦混进浮点尾巴,快路径用不上,省下来的时间又还回去,压了半天等于没压。

另一种修法是误差反馈:每一列舍入产生的残差传给下一列。这在同一层内部有效,但要按顺序算,破坏并行,也修不了整个矩阵层面的结构性偏差。

arXiv 上 2026 年 10 月的一篇工作(编号 2610.32243,方法名 BiLoCo)走的是第三条路:主权重保持标准 4 位不动,另外存一个低秩的修正项——两个很小的矩阵相乘得到一个补偿矩阵,推理时加回去。标题里「Binary」说的是这两个因子本身也是二值化的,让这次额外计算便宜到几乎不占时间。

这对门店意味着什么

这意味着「压缩」和「修补」可以分开做。 主模型还是标准 4 位,硬件照旧走快路径;修补是附加的一层,只补那些误差集中的层,参数量很小。

这也意味着修补是有前提的:它见过什么,就补什么。 修正项是在一批校准图上算出来的,参数极少,拟合的就是那批图上的误差结构。校准用的是供应商样机拍的标准图,补上的就是标准图上的偏差。门店的灯光、货架、包装变了,这个修正项不一定还成立。

所以问题从「掉多少」变成了「在谁的图上掉的」。 这是选型和验收时真正要问的一句。

什么情况下值得补

不是所有掉点都值得上这套东西。

值得补的: 错误集中在特定品类,而且有方向性——同一类商品总是被认成同一个错的东西,或者深色、反光、透明包装成片出错。这类误差结构明显,低秩项能抓住。

不值得补的: 错误分散在各个品类、没有系统性方向,整体只掉一点点。这时候能榨出的空间很小,投入产出比不如补样本。

补也补不了的: 新品认不出来。那是模型没见过,不是被压糊了。补正项修的是「见过的东西被压坏」,对「没见过」无能为力。这一条要分清,否则会拿着量化方案去解决覆盖问题。

验收怎么做

量化上线前的验收,和普通模型上线不太一样。三件事:

要品类乘品类的混淆表,不要总数。 一张表,行是真实品类,列是识别结果,看错在哪几对之间。整体掉 0.6 个点可能意味着「平均下来还行」,也可能意味着「三个品类彻底崩了,被其它品类平均回来」。

单独看高单价和称重品类。 一袋散装坚果认错,损失按重量算;一瓶酒认错,损失按单价算。这两类出错最贵,也最容易被整体指标掩盖。

用自己的图,按最难的光照时段。 从自家货架、自家秤台取几百张,包含叠放、反光包装、散装称重、刚换的新包装。测试放在下午生鲜区阳光斜射的时段,别在上午做。

该问供应商的五句话

  1. 4 位模型是纯量化,还是加了修正项?修正项有多少参数,额外计算占多少?
  2. 修正项是在哪批图上拟合的?我们自己店里的图能不能参与?
  3. 换一家门店、换一批包装之后,修正项要不要重算?重算要谁来做、多久?
  4. 这个带修正项的模型,在我们的采购型号上能跑满速吗?还是只有特定芯片支持?
  5. 品类乘品类的混淆表能提供吗?掉点集中在哪几类?

第三问最容易被含糊过去。修正项是跟着校准分布走的,如果答案是「要重算」,那它就不是一次交付,而是一个需要维护的环节——这笔运维成本要提前算进去。

最后一句

量化不是一次性的技术动作,是一条需要持续校准的链路。压下去的是位宽,剩下的是「在谁的图上验、按什么口径看」这两个问题。