Trained Quantization Thresholds

2021-09-27  本文已影响0人  加油11dd23

一、摘要

我们提出了一种使用标准反向传播和梯度下降的均匀对称量化器训练量化阈值(TQT)的方法。与先前的工作相反,我们表明,对阈值梯度的直通估计器的仔细分析允许自然的范围-精度权衡,导致更好的优化。我们提出了对我们方法的一般稳健性的分析支持,并在ImageNet分类的各种CNN上对其进行了经验验证。我们能够在传统的困难网络(如MobileNets)上实现ear-floating-point的准确度,而量化(8位)的再训练不到5个epochs。最后,我们提出了Graffitist,一个能够对TQT的TensorFlow图进行自动量化的框架。

三、方法

虽然仿射量化器可以将浮点值直接映射到整数上(不需要lookuptables),但是由于要对零点和实值标度因子进行特殊处理,所以会增加成本,如附录A所示。为了实现高效的定点运算,我们将量化方案限制为使用

1、量化器限制

2、线性量化器 --- 前向

张量x的量化函数q(x;s)仅由它的标度因子确定,它取决于张量2的阈值和位宽。q(x;s)通过应用四个明智的点操作(按顺序)来执行量化:缩放、圆整、饱和和去量化。

3、线性量化器 --- 后向

为了用梯度下降法训练量化网工作的权重和阈值,我们得出量化器q(x;s)相对于输入x和标度因子的局部梯度。

4、梯度的解释

为了定性地理解阈值梯度∇(log2t)q(x;s)和输入梯度∇xq(x;s)在反向传播过程中的作用,让我们考虑以下玩具问题:一个使用最小平方误差损失L=(q(x;s)-x)2/2优化的单一量化器。


image.png

图1显示了我们量化器的前向和后向传递曲线。如前所述,实域的精确剪切阈值为xn=s-(n-0.5)和xp=s-(p+ 0.5)

总而言之,阈值梯度有助于训练最佳阈值,以剪切权重和激活,而输入梯度则将权重和激活推向更严格的界限。通过反向传播同时训练剪切阈值和量化网络的权重,我们采用联合(相互)优化全局损失

5、与剪切的阈值梯度的比较

相比之下,某些量化器的实现通过简单地剪切饱和阈值的上游梯度来定义阈值-年龄梯度。 例如,TensorFlow的FakeQuant(用于QAT)将阈值的梯度定义为一个剪辑函数

在前向传递中,FakeQuant操作(TensorFlow,2016a)在数学上等同于我们的表述(除零点外),定义为


image.png

然而,在后向传递中,他们将(11)中的圆形函数视为同一性,将(11)还原为具有剪切梯度的剪切函数。 也就是说,相对于阈值(n,p)的梯度在(n,p)内的x被琐碎地剪切为零,正如图3中FakeQuant的转移曲线和它的内核定义(TensorFlow, 2016b)所见。因此,整体梯度只向外推动极限(n,p),训练到输入分布的最小/最大,并且严格偏向于范围而不是精度。我们相信这种行为可以被纠正,以允许有效的范围-精度权衡,如图2中的玩具L2模型,通过仔细使用STE,使∂xbxe=1,但bxe6=xin的后向通道。虽然实际的损失情况并不复杂,但我们在第 5.3 节中观察到与我们的玩具 L2 模型类似的定性行为。

另一个流行的剪切阈值方法(适用于ReLU激活)是PACT,它的行为与TensorFlow的FakeQuant相似。从(1)中可以看出,相对于剪切阈值α的梯度取值为0或1,取决于量化器输入x是在α的左边还是右边。这就导致了α倾向于训练到x分布的最大极限。为了消除这种趋势,在损失函数中应用了一个关于α的大小的正则器。 然而,这需要一个额外的参数λα来手动调整,并且对损失景观或量化位宽没有认识。

四、TQT的形式化表述

我们发布了Graffitist6,这是一个建立在TensorFlow之上的端到端软件栈,使用TQT对深度神经网络(DNN)进行量化和再训练,以便在定点硬件上进行精确和高效的推断。从根本上说,Graffitist是一个灵活的、可扩展的框架,用于处理DNN的低级图形描述,包括一个(不断增长的)变换库,以实现各种神经网络的优化。每个图形变换由独特的模式匹配和操作算法组成,当顺序运行时产生一个优化的输出图形。它仍然处于实验阶段,我们将继续增加对更多操作类型、层拓扑结构、网络风格、图形优化和压缩技术的支持。Graffitist站在巨人的肩膀上,其界面的灵感部分来自TensorFlow的早期工具。

1、图优化

Graffitist在量化之前对输入图进行了若干优化。例如,将批量归一化层折叠到前面的卷积或全连接或深度卷积层的权重中。我们采用(Jacob等人,2017;Krish-namoorthi,2018;TensorFlow,2017a)的以下最佳做法。 (a) 确保训练和推理图中的折叠批次规范在数学上是等同的(即。训练期间看到的分布与推理期间的分布相匹配);(b)应用批量规范修正,在批量和移动平均统计之间切换,以减少因批量更新不稳定而导致的训练折叠权重的抖动;(c)在收敛后冻结批量规范移动平均和变量更新以提高准确性。 其他优化包括将concat层的并集折叠成单一的并集,将不涉及控制边的身份节点进行拼接,将平均池层转化为以reciprocal7multiplier为权重的纵深conv层,以及明确合并输入规模以进行规模保护操作,如concat、bias-add、eltwise-add和maximum(用于leakyrelu)。

2、量化模式

Graffitist允许在静态或再训练模式下进行量化。

3、层精确度

虽然Graffitist支持可配置位宽的权重和激活,但在本文的范围内,我们使用两种模式。 选择4/8而不是4/4主要是考虑到4x8乘法器的可用性;即使没有这个,INT4模式仍然可以实现50%的权重压缩(每字节双倍打包权重),并减少获取权重的内存足迹。不同的层拓扑结构的内部精度定义如下。标记为q′的量化层表示它们的标度因子是隐式合并/共享的。为了避免重复量化,除了明确量化的主要输入(占位符)外,输入张量被假定为已经被前一层量化了。

4、used Kernel Implementation

如图4所示,(4)和(6)中定义的量化层可以使用本地TensorFlow操作和tf.stopgradient来实现。然而,这种低级别的实现在训练期间有很大的内存占用,因为需要在后向通道中存储梯度计算的中间张量。 这影响了单个GPU所能容纳的最大批量大小。为了克服这个问题,Graffitist将融合的量化计算内核打包,这些内核是为CPU/GPU预先编译的。融合的实现方式是高效的,有助于避免内存开销,并且与当时的实现方式相比,允许使用更大的批处理规模进行训练。

上一篇下一篇

猜你喜欢

热点阅读