015、量化感知训练(QAT)与后训练量化(PTQ)

015、量化感知训练(QAT)与后训练量化(PTQ) 015 量化感知训练(QAT)与后训练量化(PTQ)一、一个让我熬夜到凌晨三点的bug去年做一款AIoT芯片的NPU驱动时,客户反馈模型部署后精度从98.2%掉到了91.5%。我第一反应是“量化参数没对齐”——这种问题见多了。结果查了三天,发现量化参数完全正确,权重也老老实实做了对称量化,但推理结果就是不对。最后用JTAG一根一根抓中间层数据,发现某个卷积层的输出分布严重偏移——训练时激活值集中在[-1, 1]区间,量化后却跑到了[-3, 2]。问题出在哪?训练时用的伪量化节点(FakeQuantize)和实际硬件量化器的行为不一致。那个晚上我对着示波器和GDB,把量化感知训练(QAT)的数学本质重新推导了一遍。这个经历让我明白:量化不是简单的“把float转int”,而是要在训练阶段就让模型“学会”忍受量化噪声。今天这篇笔记,就聊聊QAT和PTQ这两种主流量化方案,以及它们背后那些容易让人翻车的细节。二、后训练量化(PTQ):看起来简单,坑都在暗处PTQ的思路很直接:模型训练完,拿着权重和激活值的统计分布,直接算量化参数。听起来像“先造车再铺路”,但实际做起来,路况远比想象复杂。2.1 校准数据集:别拿训练集糊弄很多人做PTQ时,随手从训练集抽1000张图做校准。结果部署后精度崩了——因为训练集和实际场景的数据分布有偏差。校准数据集应该覆盖推理时可能遇到的所有“极端情况”:低光照、过曝、运动模糊。我见过一个安防项目,校准集全是白天场景,结果晚上部署时