全文概括
本文目的是将 activation 和 weight 一起量化,其结果能量化 activation 和 weight 到 4-bit 大小,且准确度能和 full precision 媲美(在一系列流行的模型和数据集上)。
该方法是提出一个新的**函数,即PACT(PArameterized Clipping Activation),其作用在训练阶段,即该方案是从头开始训练的。
提出该**函数的背景是作者发现:“在运用权重量化方案来量化 activation 时,传统的RELU的量化结果和全精度结果相差较大,在分类任务上”。作者发现是量化时,activation的量化误差能很大(相较于 weight 基本在 ,activation的值是无限大的,这是RELU的结果),所以提出 截断式RELU 的**函数。该截断的上界,即文中的 是可学习的参数,这保证了每层都能有不一样的量化范围。
新添的参数 ,在训练时使用 正则化,使其快速收敛的同时,保持一个较小的值,以限制量化时产生的量化误差。
结果展示:
- 对于极端小的bit(),PACT表现得比已提出其他量化方法要好;
- PACT的 4-bit 量化结果表现得和原 floating point版本差不多。PACT的 4-bit 量化结果表现得和原 floating point版本差不多。
该方法,对大的网络,如ResNet-50效果很好,和baseline差不多。
该方法是从头开始训练的,暂时不知道其是不是在训练网络的同时,使用量化方案,如果不是同时使用量化方案的话,是不是可以使用 pre-trained model ,然后使用PACT进行“微调”,再进行量化。
**量化的挑战
量化传统的 activation,不像量化 weight 一样,可以通过学习去补偿,其量化的误差结果只能加重 weight 的补偿学习。
传统的 RELU 是无界的,这代表着其结果能有很大的范围。通过截断式RELU,给 activation 添加一个上界,可以部分环节量化误差的损失,但其结果仍显著不如全精度版本。
PACT
PACT工作流程
PACT**函数:
该**函数的输出,量化到 k-bits上的结果为: 是 step-size 。
反向传播学习 的过程: 其中,梯度通过"straight-through estimator(STE)"随机离散化神经元来进行梯度计算和反向传播工作,作者将估计为。
PACT工作的理解
作者使用带参数的截断式RELU,即PACT来模拟RELU,来看其作用(在作用于某一层时,我们只需看这一层的的效果,其他的参数,如其它层的、所有的参数weight和bias,BacthNorm参数都保持不变)
可以发现,除了第一层和最后一层,其它层导致的交叉熵损失函数变化都是随着的增大而降低,这表示着:若没有应用量化方案时,RELU是一个好的**函数。但也可以发现,在全精度版本中,并不是所有层都是喜欢“较大的上界”的(比如上面的act0、act6)。
在量化时,可以发现,所有的层都喜欢一个较低的,这意味着无上界的 RELU 在量化过程不太合适:
我们也可以发现,不同层的最优上界都不同,所以这激励着我们去学习上界
但可以从上图看出,在activation上应用量化时,调整的振荡幅度较大,这激励着适用正则化方案使其加速收敛:
PACT额外参数的设定
该方案多了两种参数:每层的上界,以及正则化参数。
作者将每层的都初始化为一个较大的数(让其减小收敛),每层的正则化参数都使用同一个超参数。
在应用方案时,和很多其他CNN量化方案一样,第一层和最后一层不进行量化,因为量化这两层会造成很大的精确度损失。这两层,一个是基础、低级特征提取,一个是直接影响预测
实验结果
以下实验全部是重头开始训练的
PACT与其他几个量化方法在AlexNet、ResNet18、ResNet50上的对比:
DoReFa与PACT的对比: