F8NET: FIXED-POINT 8-BIT ONLY MULTIPLICATION FOR NETWORK QUANTIZATION 论文学习

论文链接.

摘要

神经网络量化是一种很有前途的压缩技术,可以减少内存占用和节省能源消耗,并有可能导致实时推理。然而,在量化模型和全精度模型之间存在着性能差距。为了减少它,现有的量化方法需要高精度的INT32或全精度的乘法。这在内存、速度和所需能量方面引入了明显的成本。为了解决这些问题,我们提出了F8Net,一个新的量化框架,只包含固定点的8位乘法。为了推导我们的方法,我们首先讨论了使用不同格式的定点数的定点乘法的优点,并研究了相关定点数的统计行为。其次,基于统计和算法分析,我们对不同的定点格式应用于权重和不同层的激活。我们引入了一种新的算法来自动确定在训练过程中每一层的正确格式。第三,我们分析了之前的一种量化算法——参数化剪切激活(PACT),并使用定点算法重新表述它。最后,我们统一了最近提出的量化微调方法和我们的定点方法来显示我们的方法的潜力。我们在MomileNetV1/Net2和ResNet18/50。我们的方法不仅与现有的INT32乘法或浮点算法量化技术相比,而且实现了全精度的量化技术,取得了更好的性能,实现了最先进的性能。

1. 引言

在本工作中,我们采用了定点量化的方法。我们的工作在三个主要方面不同于之前的努力(Jainetal.,2019)。首先,为了确定最小误差量化阈值,我们对定点数进行了统计分析。其次,我们统一了参数化的剪切激活(PACT)和定点算法,以实现高性能和高效率。第三,我们讨论并提出了针对不同模型的量化微调方法。我们将我们的方法称为F8网,因为它只包含用于网络量化的定点8位乘法。我们深入研究了定点数的问题,其中只涉及INT8乘法,没有任何INT32乘法,既没有浮点类型,也没有定点类型。在本文中,我们主要关注8位量化,这是对不同设备的最广泛支持的情况,通常足以满足效率和性能要求。我们的贡献可以详细阐述如下。

  1. 我们表明,一旦正确选择了格式,8位固定点数能够表示一个大范围的相对误差可以忽略不计的值(见图3和图4)。这一关键特性使定点数比整数值具有更强的代表性能力。
  2. 我们提出了一种方法来确定定点格式,也称为小数长度,为权重和激活使用它们的方差。这是通过分析不同格式的定点值的统计行为来实现的,特别是那些由不同方差正态分布的随机变量进行量化的统计行为。分析揭示了相对量化误差和方差之间的关系,进一步帮助我们建立一个近似公式来确定方差的小数长度。
  3. 通过统一定点量化和PACT,我们开发了一种新的定点模型训练算法(Choi等人,2018年)。此外,我们还展示了小数长度共享的影响。
  4. 我们验证了我们针对各种模型的方法,包括MombileNetV1/V2和ResNet18/50用于图像分类,并展示了比现有的采用32位乘法的方法更好的性能。我们还集成了最近提出的微调方法,从预先训练好的全精度模型中训练量化模型,以供进一步验证。

2. 相关工作

为了解决精度下降有
1.fake 量化,BN还是浮点PF32乘法
2.只有整型量化,BN换为INT32乘法,位移
3.定点量化,INT8,IN4乘法,INT32移位
在这里插入图片描述

关于Integer-only quant的方法中,量化公式如下:所以有两个乘法。

在这里插入图片描述

3.对定点表示法的分析

3.1定点算法的优点

定点数的特点是其格式,包括表示数字的整个位宽的单词长度和表示所表示值的范围和分辨率的小数长度(FL)(Smithetal.,1997)。定点算法,特别是定点乘法,广泛应用于数字信号处理等(Smithetal.,1997;Tan&Jiang,2018)。与整数或浮点乘法相比,定点乘法有两个主要特征:第一,两个定点数的乘法比两个浮点数相乘更有效,特别是在DSP等资源受限的设备上。其次,由于它的通用性,它比整数型更强大,而且定点数表示能力更强。对于定点乘法,可以有几十种不同的实现,但对于整数和浮点乘法,只有一种实现。这种效率和多功能性使定点量化成为一种比纯整数量化更有吸引力的解决方案。具体来说,如图2a所示,在预先训练好的全精度模型中,不同层的权重尺度可以按顺序变化,从小于0.1到近4不等。只有整数的直接量化不可避免地会引入相当大的量化误差,除非涉及更高的精度和更多的操作,例如使用INT32乘法和位移来进行缩放,如图1c所示。另一方面,使用定点数有可能在不依赖高精度乘法的情况下减少量化误差,因为来自不同层的权重和激活在量化过程中具有使用不同格式的额外程度。事实上,如图2b所示,对于一个训练好的具有8位固定点数的MobileNetV2,权重和激活的小数长度因层而异。这就提出了如何确定每个层的格式的问题。下面,我们将对8位定点模型进行此研究。
在这里插入图片描述

3.2 定点格式的统计分析

对于一个预定义的位宽,整数,这是一个小数长度为零的定点数的一种特殊情况,它有一个预定义的值集,这严重限制了仅整数量化的潜力。另一方面,具有额外自由度的定点数,即小数长度,能够通过选择适当的格式来表示更大范围的全精度值,因此它们更适合量化。作为一个例子,图3显示了相对量化误差与8位定点值使用不同格式的一组随机变量,抽样从正态分布(有符号和无符号,后者处理ReLU量化前)与零均值和不同的标准差σ(Appx更多的实验细节。7.2).从实验中,我们得出了以下两个观察结果。在这里插入图片描述
Observation 1:
不同格式的定点数具有不同的最优表示区域,对于不同小数长度最小相对误差和最优标准差(标注为星号)也有所不同。(图3)。这是因为格式控制值大小和表示分辨率(最小重要位)。
Observation 2:
较大的小数长度更适合表示较小的数字,而较小的小数长度更适合表示较大的数字。对于给定的标准偏差,使用小的小数长度有下溢的风险,而大的小数长度可能会导致溢出问题。具体来说,整数(图4中的黑色曲线)更容易出现下溢问题,并且对于足够小的值来量化,有较大的相对误差。

3.3选择最佳的定点格式

根据上述观察结果,我们感兴趣的是回答两个问题:
(1) 我们能否通过始终使用最小相对误差对应的最优小数长度,在很大的全精度值范围内实现一个小的定点量化误差?
为了回答这个问题,我们首先绘制所有候选定点格式中最小的相对误差。如图4a和图4c中的红线所示,对于零均值正态分布,通过始终选择最优的定点格式,我们可以在至少3左右的标准差中实现相对量化误差小于1%。例如,对于有符号量化,标准偏差范围在0.1到约40之间,以达到小于1%的误差,而对于无符号量化,标准偏差范围从0.1到100。实验验证了我们的假设,即使用最优格式的定点值可以实现可忽略的量化误差。
(2)我们能有一个简单的方法来确定最优小数长度吗?
为了回答这个问题,我们根据全精度值的统计数据与标准偏差之间绘制出最优小数长度,如图4a和图4c中的蓝线所示。我们发现与起点对应的阈值σ值在标准差的对数尺度上几乎是相等的。这是预期的,因为不同格式的表示区域有2指数的因子。绘制阈值标准偏差(在对数尺度上)与相应的最优小数长度(图4b和图4d),我们发现它们的关系几乎是线性的,导致以下半经验近似公式来确定最优小数长度FL∗从标准偏差(更多的讨论在附录7.7):
在这里插入图片描述

在下面,除非特别说明,我们使用(1)来确定权重和激活量化的小数长度。请注意,我们只计算训练期间的标准差。

4. 方法

在本节中,我们将讨论我们提出的定点数神经网络量化训练技术,其中每一层的权重和激活格式都是在训练过程中基于(1)确定的。我们首先分析了如何统一PACT和定点量化。(Sec4.1).然后我们展示如何量化权重和激活,特别是更新BN运行统计数据和小数长度(Sec.4.2).最后,我们讨论了将相邻两层的比例因子关联起来来计算量化的有效权重的必要性,特别是对于一些层后面有几个层(Sec.4.3).

4.1均匀PACT和定点量化

为了用无符号定点数格式(WL,FL)量化一个正值x,其中WL和FL分别表示定点数的字长和小数长度,我们有量化函数固定quant为:
在这里插入图片描述

其中,剪辑是剪辑功能,0≤FL≤WL为无符号定点数。请注意,定点量化有两个限制:溢出则是由裁剪到其表示区域引起的,而下溢则是由舍入函数引入的。这两者都引入了近似误差。为了使误差最小化,我们根据Sec3.3.中的分析确定了每一层的最优小数长度。
为了实现使用定点数的模型的更好的量化方法,我们研究了最成功的量化技术之一PACT(Choietal.,2018),它在量化前使用可学习的剪切级α截断全精度值:在这里插入图片描述
其中,M是一个预定义的比例因子,将值从[0,1]映射到[0,M]。(2)和(3)之间形式上的相似性激励我们将它们相互联系起来(更多细节见Appx。7.3):在这里插入图片描述

4.2更新BN和小数长度

为BN双前向传播

为了量化只涉及8位定点乘法的整个模型,我们需要处理来自BN层的比例因子,包括权重和运行方差。具体来说,我们需要量化将卷积层的权重与来自BN的权重和运行方差相结合的有效权重(Jacob等人,2018;Yao等人,2021年)。这就提出了如何在训练期间确定运行统计数据的问题。为了解决这个问题,我们应用了两次前向计算。对于第一次前向传播,我们应用量化后的输入但全精度的卷积层的权重,并使用输出来更新BN的运行统计数据。这样,要量化的有效权重就是可用的。注意,此步骤没有反向传播。对于第二步,我们对组合有效权值进行量化,得到两层卷积和BN的最终输出,并进行反向传播。

更新小数长度

与现有的直接训练小数长度的工作不同(Jainetal.,2019),我们使用(1)从当前重量值推断来定义训练过程中动态体重的小数长度。对于激活的小数长度,我们使用一个缓冲区来存储和更新动量为0.1的值,类似于如何更新BN运行的统计数据。一旦在训练后确定了小数长度,我们就保持它们固定以进行推断。

4.3相邻层之间的比例因子关联

如(4)所示,在量化操作过程中还有两个额外的因子,我们将其表示为固定比例因子ηfix:
在这里插入图片描述

现在α是一个全精度的可训练参数,这意味着固定比例因子也是全精度的。为了消除不希望的额外计算,我们将其融合到上述有效权值中进行量化(Sec.4.2).然而,固定缩放因子发生了两次,一次用于量化后的重新缩放(ηfix),另一次用于量化前的缩放(1/ηfix)。为了完全融合它,我们需要将相邻的两层联系起来。事实上,对于一个包含卷积、BN和ReLU的映射(更多的细节将在Appx中显示。7.5),我们应用PACT量化方法将相邻两层之间的激活联系起来,如下:在这里插入图片描述
其中q为定点激活,W为卷积层的全精度权值,i和j为空间指针,n为总乘法数,上标(l)表示由卷积和BN组成的第l个块。γ、β、σ、µ分别为BN层的学习权值、偏差、运行标准差和运行平均值。此外,我们还为所有层设置了WL=8。从(6)中可以看出,为了获得定点量化的最终有效权重,对于第1个Conv-BN块,我们需要从它的下面第(l+1)块中访问固定比例因子,或者等价地,剪切级α和激活小数长度FL。为了实现这一点,我们应用了两种技术:

预先估计的小数长度

如上所述,我们从其标准偏差来确定激活小数长度。此外,(5)表明固定比例因子依赖于每一层的小数长度。然而,在(6)中,我们需要从下一层的固定比例因子来确定量化下的有效权重,但我们还没有更新。因此,在计算训练期间的有效权值时,我们使用存储在缓冲区中的激活小数长度,而不是用来量化下一层的输入。

剪切水平共享

如图5所示,对于残差块,有些层有以下两个层(我们也将其命名为子层)。由于我们需要来自子层的固定缩放因子来计算父层的有效权重(见(6)),因此所有子层之间不一致的固定缩放因子将是一个问题。为此,我们将一个层定义为主层,并强制它的所有兄弟层共享其剪切级别。事实上,最好的方法是在兄弟姐妹之间同时共享剪切级别和小数长度,但我们发现共享小数长度会导致相当大的性能下降,特别是对于像MobileNetV2和ResNet50这样的深度模型。这是因为小数长度在这里扮演两个角色:一个是用于固定缩放因子,另一个是用于表示区域(或等价的剪切级别)。使用不同的小数长度可以有效地实现不同的剪切级别(尽管仅相差2倍,请参见Appx。7.6),这可能是有益的,因为激活尺度可能会因每层而异。此外,打破共享激活小数长度的约束并不会带来太大的计算代价,因为值只在存储格式上不同,通常值存储在32位,即积累结果只量化为8位进行乘法。请注意,当计算在父层中有效权重时,我们只使用主子层的激活小数长度。对于每个子层的有效权值和其输入的定点量化,我们使用它自己的小数长度。

5.实验

常规训练

在这里插入图片描述
在这里插入图片描述
为了进一步理解我们的方法的重要性,我们绘制了每一层的权重和激活的小数长度。如图2b所示,对于MobileNetV2,我们发现重量和激活的小数长度因层而变化。具体来说,对于权重的量化,因为有些层的有效权值范围相对较大,特别是一些深度层,需要较小的小数长度来避免溢出问题。另一方面,对于小重量尺度的层,大小数长度对于克服下溢问题具有更多的优势。同样的结论也适用于激活的小数长度。事实上,对于在深度卷积层前面的一些早期层,激活的小数长度需要很小,但对于后期阶段,需要更大的小数长度。这进一步验证了我们的发现,即对于具有相同父层使用不同的小数长度对于良好的性能至关重要,因为不同深度的层可能是兄弟层,需要不同的小数长度(见图5)。

对全精度模型的微小微调

最近的工作(Yaoetal.,2021)集中于研究神经网络量化的潜力。为此,他们建议对一个经过精心训练的高精度全精度模型进行微小的微调。这样,它可能有助于避免由于弱全精度模型与强量化模型之间的比较不当而产生的误导性结论。为了进一步研究我们的方法的威力,并与这些先进的技术进行比较,我们还应用了我们的方法,并在几个高精度的全精度模型上进行了微调。此外,由于总的精细化步骤的数量非常少,我们应用网格搜索来确定该实验的最优分数长度。结果如表2所示,我们可以发现我们的方法能够比以前的方法获得更好的性能(Yaoetal.,2021),而无需耗时和能量的高精度乘法(即图1c所示的二元缩放)。
我们的方法揭示了高精度的重缩放,无论实现在全精度,或近似或量化的INT32乘法,然后移位(a.k.a.二元乘法),确实是不必要的,也不是量化模型具有良好性能的关键部分。这一点在以前的文献中并没有得到很好的理解。具体来说,我们证明了通过在每一层中正确地选择权重和激活的格式,我们能够通过8位定点数获得类似的甚至更好的性能,这可以在特定的硬件上更有效地实现,比如只支持整数操作的DSP。

6. 结论

以前关于神经网络量化的工作通常依赖于32位乘法,要么是全精度的,要么是INT32乘法,然后是移位(称为二元乘法)。这就提出了一个问题:高精度乘法对于保证量化模型的高性能至关重要,或者是否有可能消除它以节省成本。在这项工作中,我们通过彻底的统计分析和新的算法设计,研究了用8位的定点乘法量化新网络的机遇和挑战。我们在ResNet18/50和MomileNetV1/V2的MmageNet分类上验证了我们的方法。通过我们的方法,我们在不需要32位乘法的情况下实现了最先进的性能,量化模型能够实现与全精度模型相当甚至更好的性能。我们的方法证明了,用浮点乘法或二元缩放实现的高精度乘法,对于模型量化并不能获得良好的性能。未来的一个方向是对定点数进行深入的统计分析。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值