最后更新:2020-04-29 11:31:04 手机定位技术交流文章
机器心脏报告
机器编辑部之心
对于通常几百米大小的神经网络,模型压缩可以减少它们的内存占用、通信带宽和计算复杂性,以便更好地部署应用程序。最近,脸书人工智能的研究人员提出了一种新的模型量化压缩技术Quant-Noise,它可以在不降低性能的情况下将神经网络的内存占用减少90%以上。

我们都知道,对于神经网络,参数的数量越多,层数越多,输出结果就越好。当然,这也意味着许多性能优越的神经网络将非常庞大。例如,当前的标准机器翻译架构转换器可能在一个级别上包含数百万个参数。即使一些具有优化性能和参数效率的模型(如高效网络)仍然需要几十到几百兆字节。这限制了它们在机器人或虚拟助手中的应用。
所以在我们部署应用程序之前,我们必须面对一个问题:如何压缩模型?
剪枝和提取是模型压缩中两种常用的方法。通过减少网络权重的数量来减少参数。另一种方法是“量化”。不同之处在于,它通过减少每个权重的位数来压缩原始网络。
流行的后处理量化方法(如标量量化)让训练网络的浮点权重用低精度表示(如固定宽度整数)来表示。这些后处理量化方法的优点是压缩效率非常高,并且可以加速支持硬件上的推理。然而,缺点是由这些近似引起的误差将在正向传播的计算过程中不断累积,最终导致显著的性能下降。
现在,脸谱网的研究人员提出了一种新的量化模型压缩技术Quant-Noise,它可以在实际应用部署中最大限度地压缩模型,同时保持高性能。
论文地址:https://arxiv.org/abs/2004.07320项目地址:HTTPS://Github . com/Pytorch/Fairseq/Tree/Master/Examples/Quantum _ Noise在这项研究中,研究人员提出了一种压缩方案,该方案只量化权重子集,而不是整个网络。在每个前向传播中,只有网络的随机部分被量化,并且大多数权重使用无偏梯度来更新。
该方法可以在训练过程中采用更简单的量化方案,这对于具有可训练参数的量化模块非常有用,例如乘积量化(PQ)算法。

总的来说,这种方法的亮点是:
名为“Quant-Noise”的量化噪声被应用于权重的随机子集,以学习更适合各种量化方法的网络,例如int4、int8和PQ算法。在PQ算法中加入量化噪声,以达到SOTA水平的精度和模型尺寸综合结果。使用该方法压缩后,在自然语言处理压缩到14MB的前提下,RoBERTa在MNLI上取得了82.5%的准确率。在计算机视觉方面,B3效率网在压缩到3.3兆字节的前提下,在图像网上达到80.0%的前1名精度。将量子噪声训练的网络与PQ算法和int8相结合,量化网络的权值和激活度,得到在固定精度计算条件下的极限压缩效果。实现了在ImageNet数据集上79.8%的top-1准确率和在WikiText-103数据集上21.1的混淆。
此外,量子噪声压缩后的模型性能几乎与原模型相同,内存消耗减少到原模型的十分之一甚至二十分之一。这大大超过了PyTorch和Tensorflow中使用的int8的4倍压缩。目前,相关法规也已出台。
原理:定量神经网络
在这一章中,研究者介绍了量化原理和几种标准的量化方法,并详细说明了如何将标量量化和乘积量化结合起来。应该注意的是,为了定义清楚,研究者主要集中在固定实矩阵w ∈ r n× p的例子上,并且假设这个矩阵被分成m×q块(b_kl):

这些块的属性由量化方法确定,并且码本是一组k个向量,即,C = {c
所以b _ kl = c
上图显示了研究人员如何在训练过程中将量化噪声应用于权重子集,从而提高量化模型的性能(参见完整视频的链接)。
定点标量量化
定点标量量化用低精度定点表示代替浮点表示。通过在兼容硬件上使用定点操作,达到了减少模型内存占用、加快推理速度的效果。
如何实现量子噪声
量化漂移引起的噪声在深度网络训练过程中不会暴露出来,导致性能不佳。如何使网络对量化具有鲁棒性?解决方法是在训练过程中引入量化噪声。
量化感知训练(QAT)通过量化前向传播过程中的权重来实现这一点。这种转换是不可微分的,并且使用直通估计器(STE)来近似梯度。STE在梯度中引入了偏移,这取决于权重的量化级别,因此也取决于压缩率。
因此,研究人员提出了一种简单的修正方法——量子噪声,通过随机改进量子信道估计来控制偏差。其思想是量化权重的随机部分,而不是像QAT那样量化整个网络,这样未量化的权重使用无偏梯度。该方法的一般形式可以模拟训练过程中的量化和修剪效果。
使用定量噪声训练网络
仍然以实矩阵w为例。在培训期间,定量噪声方法的工作原理如下:
首先,计算与目标量化方法相关的块B _ KL然后,在每个正向传播过程中,随机选择这些块的子集,并添加一些失真。在反向传播过程中,利用STE对失真权重进行近似,然后计算所有权重的梯度值。换句话说,给定索引元组j {(k,l)},其中1≤k≤m,1≤l≤q,并且失真或噪声函数被应用于该块,研究者定义了运算符ψ ( | J),并且对每个块b_kl应用以下变换:

量子噪声有多有效?
量子噪声对不同量化方法的影响
如下表1所示,研究人员首先在语言建模和图像分类任务中演示了Quant-Noise对int4、int8和iPQ三种不同量化方案的影响。结果表明,量子噪声对iPQ等高性能量化方案有很好的影响,而量子信道估计通常会导致性能下降,即使与量化是后处理步骤的情况相比也是如此。

表1:在QAT和量子噪声设置下,语言建模和图像分类任务中int4、int8和iPQ的量化结果比较。对于语言建模任务,研究人员在Wikitext-103基准上训练变压器,得到了测试混淆(PPL)。对于图像分类任务,研究者在ImageNet-1k基准上训练了效率网-B3,得到了前1名的验证精度。
研究人员的分析表明,量子噪声可以与修剪和权重分配方法兼容并互补。如下表2所示,研究人员分别展示了维基百科文本-103上的语言建模、MNLI上的预训练句子表示和ImageNet-1k上的目标分类的结果。这些结果在不同的任务和基准上高度一致:Quant-Noise在强大的iPQ基线方法上实现了显著的性能改进。

表2:在语言建模、句子表示和图像分类任务中,几种不同的压缩方法(权重分配、修剪和量化噪声)对非量化模型和量化模型性能的影响。
与SOTA方法的比较
研究人员在同一项任务中比较了量子噪声和当前的SOTA方法。他们将最佳量化设置应用于竞争模型,并在结合权重分配和修剪方法时,将这些模型的内存占用量减少到原始模型的1/91/20,从而为高性能模型提供极端压缩。
如下图2所示,研究人员已经在语言建模、MNLI和ImageNet中获得了性能和模型大小之间的折衷。

图2:模型性能随模型大小的变化。
控制变量测试
如下表3所示,研究人员分别展示了三种不同设置下自适应输入架构的混淆程度和RoBERTa的准确率的变化,即不使用量子噪声训练、使用量子噪声微调和使用量子噪声训练。可以看出,直接使用量子噪声训练可以达到最低的混淆度和最高的准确度。

表3:三种不同设置下混淆和准确度的比较:不使用定量噪声训练、使用定量噪声微调和使用定量噪声训练。
如下图3所示,不同的Quant-Noise值对语言建模模型Transformer性能的影响。对于iPQ,高噪声值对模型性能有很大影响。然而,对于int8量化及其噪声函数,较高的噪声值对模型性能有轻微的负面影响,但不如前者严重。

图3:量化参数的影响。
本文由 在线网速测试 整理编辑,转载请注明出处。