在量化感知训练(QAT, Quantization-Aware Training)中,Observer和伪量化节点是两个关键组件,它们分别用于模型校准阶段和感知训练阶段,各自有不同的作用和实现方式。以下是它们的区别和联系:
1. Observer(校准阶段)作用:Observer 的主要作用是统计模型权重或激活值的分布,以确定量化的参数(如量化范围 min 和 max)。它通常在模型校准阶段使用,目的是为后续的量化操作提供合理的动态范围。特点仅观察,不修改数据:Observer 只记录输入数据的统计信息(如最小值、最大值、均值、方差等),不会对数据进行量化或修改。动态范围估计:通过观察输入数据的分布,Observer 可以动态调整量化的范围,避免因范围设置不当导致的量化误差。离线或在线:Observer 可以在离线校准阶段使用(如使用校准数据集),也可以在训练过程中动态更新。常见实现MinMaxObserver:记录输入数据的最小值和最大值。MovingAverageMinMaxObserver:使用滑动平均记录最小值和最大值。HistogramObserver:通过直方图统计输入数据的分布。
2.伪量化节点(感知训练阶段)作用:伪量化节点的主要作用是在训练过程中模拟量化操作,让模型感知量化带来的误差,从而调整权重以减少量化后的精度损失。
特点:
模拟量化:在正向传播时,伪量化节点会对输入数据进行量化和反量化操作,引入量化噪声。
梯度传递:在反向传播时,伪量化节点通过直通估计器(STE)传递梯度,使得量化操作对梯度计算透明。
动态调整:伪量化节点的量化参数(如 min 和 max)可以在训练过程中动态更新。
常见实现FakeQuantize:在正向传播时模拟量化,反向传播时传递梯度。QuantStub 和 DequantStub:在模型输入和输出处插入伪量化节点。