乐趣区

关于ai开发:解读业界5种主流的深度网络模型

摘要:介绍目前业界次要的模型优化的办法,而后对模型量化进行重点论述,介绍量化的基本原理,办法分类,将来倒退,以及对前沿论文进行解读。

本文分享自华为云社区《模型量化综述及利用》,作者:Alan_wen。

前言

随着深度学习的一直倒退,神经网络广泛应用于不同的畛域,获得远超以往的性能,然而深度网络模型的参数也越来越大,重大制约着深度网络在业界的利用,因而本文行将介绍目前业界次要的模型优化的办法,而后对模型量化进行重点论述,介绍量化的基本原理,办法分类,将来倒退,以及对前沿论文进行解读。

1. 模型优化的办法

1.1 设计高效的网络结构

设计紧凑的网络结构能够实现模型的优化,比方提出的 MobileNet 系列网络,其中简洁的 Depth-Wise Convolution 和 Point-Wise Convolution。然而目前手工设计的神经网络已逐步被 AutoML 和网络结构搜寻取代,通过网络结构搜寻能够失去高精度而构造又紧凑的网络。

1.2 模型剪枝

应用手工设计的网络结构个别能够取得较高的精度,然而微小的网络参数很难间接利用到工业界的产品中,个别会对模型进行剪枝,模型剪枝分为结构化剪枝和非结构化剪枝,非结构化剪枝个别很难实现底层减速,而模型剪枝也逐步被网络结构搜寻取代。

1.3 常识蒸馏

除了剪枝能够将一个大模型放大为小模型外,常识蒸馏同样能够实现该性能。常识蒸馏将原先大模型作为 Teacher 模型,而设计的小模型 Student 模型,通过 soft-target 疏导 Student 模型训练,实现 Teacher 模型的常识迁徙。

1.4 稠密

稠密次要是通过对网络权重或者特色进行稠密,能够通过正则化训练的形式实现稠密化,而网络权重稠密后个别通过与模型剪枝的形式联合,对不沉闷的权重进行裁剪,以压缩网络结构。

1.5 模型量化

模型量化是目前工业界最无效的模型优化办法之一,如 FP32–>INT8 能够实现 4 倍的参数压缩,在压缩内存的同时能够实现更疾速的计算,进行极其的二值量化实践上甚至能够实现 32 倍的压缩,然而适度的压缩会导致模型的精度疾速降落。下文将对模型量化进行具体介绍。

2. 模型量化综述

2.1 什么是量化?

在信息系统中量化是将信号的间断取值近似为无限多个离散值的过程 (能够认为是一种信息压缩的办法)。

在计算机系统中,量化是指定点与浮点等数据之间建设一种数据映射关系,使得以较小的精度损失代价取得了较好的收益,可简略了解为用“低比特”数字示意 FP32 等数值。

在开始介绍量化的原理之前先问三个问题:

为什么量化有用?

  • 因为卷积神经网络对噪声不敏感,量化相当于对原输出退出了大量的噪声。

为什么用量化?

• 模型太大,比方 VGG19 大于 500MB 的参数量,存储压力大;
• 每个层的 weights 范畴根本都是确定的,且稳定不大,适宜量化压缩;
• 此外,量化既缩小访存又可缩小计算量

为什么不间接训练低精度的模型?

  • 因为训练须要反向流传和梯度降落,int8 为离散数值,举个例子就是咱们的学习率个别都是零点几零点几的,int8 不匹配无奈反向流传更新。

2.2 量化原理

量化是指将信号的间断取值近似为无限多个离散值的过程。可了解成一种信息压缩的办法。在计算机系统上思考这个概念,个别用“低比特”来示意。

模型量化为定点与浮点等数据之间建设一种数据映射关系,使得以较小的精度损失代价取得了较好的收益。具体如下:

R 示意实在的浮点值,Q 示意量化后的定点值,Z 示意 0 浮点值对应的量化定点值,S 则为定点量化后可示意的最小刻度。由浮点到定点的量化公式如下:

浮点到定点的量化:

2.3 量化根底概率

平均与非平均量化:

如上图所示,量化可分为平均量化和非平均量化,上图左图的平均量化即为公式 (1) 形式的线性量化。而网络权重或者特色散布不肯定是平均的,简略的线性量化可能导致原网络显著的信息失落,因而还能够进行非平均量化,如应用 Kmeans 对网络权重进行聚类,失去不同的聚类核心,而后将聚类核心作为同一簇权重的量化代表。

对称与非对称量化:

在现实的状况下,如上图左图所示,特色散布比拟平均,因而能够对模型进行对称量化,即以 0 点值左右两边绝对值相等进行量化。然而很多状况下模型权重或特色是散布不平均的,不肯定在 0 点值两边对称,如上图右图所示,间接进行对称量化会某一侧的特色被重大压缩,大量失落网络信息,因而可为了尽可能以的放弃原网络示意的信息,可进行非对称量化。

动静与动态量化:

有不同的校准办法来确定上图 [α,β] 的剪切范畴。量化办法的另一个重要辨别因素是裁剪范畴的确定。能够动态地计算权重的范畴,因为在大多数状况下,参数在推断期间是固定的。然而,每个输出样本的激活映射是不同的。因而,有两种量化激活的办法: 动静量化和动态量化。

在动静量化中,在运行时期间为每个激活映射动静计算此范畴。这种办法须要实时计算信号统计信息(最小值、最大值、百分位数等),这些统计信息可能具备十分高的开销。然而,动静量化通常能取得更高的精度,因为信号范畴是准确计算每个输出的。

另一种量化办法是动态量化,其中剪裁范畴是事后计算的,在推理期间是动态的。这种办法在推理过程不会减少任何计算开销,但与动静量化相比,它通常会导致更低的精度。预计算的一种风行办法是运行一系列校准输出以计算典型激活范畴。

总的来说,动静量化动静计算每个激活的裁切范畴,通常可实现最高精度。然而,动静计算裁切的范畴十分耗费计算,因而,业界最常应用动态量化,其中所有输出的裁切范畴都是固定的。

不同量化粒度:

在计算机视觉工作中,每层的激活输出有许多不同的卷积滤波器卷积,如图上所示。这些卷积滤波器的每个都能够具备不同的值范畴。因而,量化办法的一个区别是如何为权重计算裁切范畴 [α,β] 的粒度。可将它们分类为层量化,分组量化和通道量化:

a)层量化:在这种办法中,裁切范畴是通过思考层卷积滤波器中的所有权重来确定的,如上图的第三列所示。通过该层中整个参数的统计信息 (如最小、最大和百分位数等),而后对整层卷积滤波器应用雷同的裁切范畴。尽管这种办法实现非常简单,但它通常会导致次优解,因为每个卷积滤波器的范畴可能会有很大的变动,会使某些参数范畴绝对较窄的卷积核失去量化分辨率。
b) 分组量化:能够将层内的多个不同通道分组,以计算裁切范畴(激活或卷积核)。这对于单个卷积 / 激活中参数散布变化很大的状况可能会有所帮忙,分组量化能够在量化分辨率和计算开销之间建设一个很好的斗争。
c)通道量化:裁切范畴的一个通常抉择是为每个卷积滤波器应用固定值,独立于其余通道,如上图最初一列所示。也就是说,每个通道都被调配了一个专用的缩放因子。这确保了更好的量化分辨率,并通常导致更高的精度,通道量化是目前用于量化卷积核的规范办法。

随机量化

在推理过程中,量化计划通常是确定性的。然而,这并不是惟一的可能性,一些工作曾经摸索了随机量化用于量化感知训练以及升高精度训练。高层次的直觉是,与确定性量化相比,随机量化可能容许 NN 进行更多摸索。人们通常认为小的权重更新可能不会导致任何权重变动,因为四舍五入操作可能总是返回雷同的权重。然而,启用随机舍入可能会为 NN 提供转变的机会,从而更新其参数。上面公式为在 Int 量化和二值量化的随机舍入形式。

微调的办法

量化后,通常须要调整神经网络 (NN) 中的参数。这能够通过 retraining 模型来执行,该过程称为量化感知训练(QAT),也能够在不 retraining 的状况下实现,该过程通常称为训练后量化(PTQ)。上图显示了这两种办法之间的示意性比拟(左图为量化感知训练,右图为训练后量化),并在下文进一步探讨。

  • 量化感知训练(伪量化)

给定一个训练好的模型,量化可能会对训练好的模型参数引入扰动,这可能会将模型偏离以浮点精度训练时收敛到的点。能够通过应用量化参数从新训练 NN 模型来解决这个问题,以便模型可能收敛到具备更好损失的点。一种风行的办法是应用量化感知训练(QAT),其中通常的正向和反向传递是在浮点中对量化模型执行的,但模型参数在每次梯度更新后都会量化。特地是,在以浮点精度执行权重更新后,执行此投影十分重要。应用浮点执行向后传递十分重要,因为在量化精度中累积梯度可能会导致零梯度或具备高误差的梯度,特地是在低精度中。

反向流传中的一个重要奥妙之处是如何解决不可微量化算子(公式 1)。在没有任何近似的状况下,这个运算符的梯度简直在任何中央都是零,因为在公式中的舍入操作是分段立体运算符。解决这个问题的一种风行办法是通过所谓的直通预计器(STE)近似该运算符的梯度。STE 基本上疏忽了舍入操作,并应用标识函数近似它,如下图所示。

只管 STE 是粗略近似的,但 QAT 已被证实无效。然而,QAT 的次要毛病是从新训练 NN 模型的计算成本。这种从新训练可能须要执行几百个 epoch 来复原精度,特地是对于低位精度量化。如果量化模型要在很长一段时间内部署,如果效率和准确性特地重要,那么在从新训练方面的投资可能是值得的。然而,状况并不总是这样,因为有些模型的寿命绝对较短。

  • 训练后量化

代替低廉的 QAT 办法是训练后量化(PTQ)执行量化和权重调整,不进行任何微调。因而,PTQ 的开销非常低,而且往往能够忽略不计。与 QAT 不同,QAT 须要足够数量的训练数据进行再培训,PTQ 还有一个额定的劣势,即它能够利用于数据无限或未标记的状况。然而,与 QAT 相比,这通常是以更低的精度为代价的,尤其是对于低精度量化。

  • Zero Shot(即 data-free)

如目前所探讨的,为了在量化后实现最小的精度降落,咱们须要拜访整个或者局部训练数据。首先,咱们须要晓得激活的范畴,以便咱们能够剪裁值并确定适当的缩放因子(文献中通常称为校准)。其次,量化模型通常须要微调来调整模型参数并复原精度降落。然而,在许多状况下,在量化过程中,不可能拜访原始训练数据。这是因为训练数据集要么太大,无奈散发,要么是独有的(例如 Google 的 JFT-300M),要么是因为平安或隐衷问题(例如医疗数据)而敏感的。目前提出了几种不同的办法来解决这一挑战,咱们称之为 Zero Shot 量化(ZSQ)。依据高通的一个工作的启发[2],能够形容两个不同级别的 Zero Shot 量化:

第 1 级:无数据,无微调(ZSQ+PTQ)。
第 2 级:无数据,但须要微调 (ZSQ +QAT).
级别 1 容许更快、更容易的量化,而无需任何微调。微调通常很耗时,而且通常须要额定的超参数搜寻。级别 1 可通过权重平衡或者 BatchNorm 的统计参数实现校对,无需微调。
然而,级别 2 通常会导致更高的精度,因为微调有助于量化模型复原精度降落,特地是在超低位精度设置中。级别 2 微调的输出数据次要通过 GAN 生成,可依据量化前的模型,应用 GAN 生成近似的散布数据,而无需再拜访内部数据。

Zero Shot(又名 date-free)量化执行整个量化,而不拜访训练 / 验证数据。这对于心愿放慢客户工作负载部署而无需拜访其数据集的提供商来说尤其重要。此外,这对于平安或隐衷问题可能限度对训练数据的拜访的状况十分重要。

2.4 量化进阶概念

  • FP32, 伪量化和定点量化

部署量化 NN 模型有两种常见的办法,模仿量化(又名伪量化)和仅整数量化(又名定点量化)。在模仿量化中,量化的模型参数存储在低精度中,但操作(如矩阵乘法和卷积)是用浮点算法执行的。因而,量化参数须要在浮点运算之前反量化,如图上图(两头)所示。因而,人们不能齐全受害于疾速高效的低精度逻辑与模仿量化。然而,在纯整数量化中,所有操作都应用低精度整数算术执行,如上图(右)所示。这容许整个推理能够用无效的整数算法执行,而不须要对任何参数或激活进行任何浮点反量化。

一般来说,应用浮点算法在全精度下执行推理可能有助于最终量化精度,但这是以无奈从低精度逻辑中受害为代价的。低精度逻辑在提早、功耗和区域效率方面与全精度逻辑相比具备多重劣势。与模仿 / 假量化相比,仅整数量化和二进量化更可取。这是因为仅整数应用较低精度的逻辑进行算术,而模仿量化应用浮点逻辑来执行运算。然而,这并不意味着伪量化永远没有用途。事实上,伪量化办法对带宽限度而不是计算限度的问题是无益的,例如在举荐零碎中,对于这些工作,瓶颈是内存占用空间和从内存加载参数的老本。因而,在这些状况下,执行伪量化是能够承受的。

  • 混合精度量化

很容易看到,随着咱们应用较低精度量化,硬件性能失去了进步。然而,将模型平均量化到超低精度可能会导致精度显著降落。能够通过混合精度量化来解决这个问题。在这种办法中,每个层都以不同的位精度量化,如上所示。这种办法的一个挑战是,抉择此位设置的搜寻空间在层数上是指数级的。
目前提出了不同的办法来解决这一微小的搜寻空间。
a)为每个层抉择这种混合精度实质上是一个搜寻问题,并且曾经提出了许多不同的搜寻办法。

b)另一类混合精度办法应用周期函数正则化来训练混合精度模型,通过主动辨别不同层及其在精度方面的变动重要性,同时学习它们各自的位宽。

c)HAWQ 引入了一种基于模型二阶灵敏度的主动办法来查找混合精度设置。
混合精度量化已被证实是一种无效的硬件高效办法,用于不同神经网络模型的低精度量化。在这种办法中,NN 的层被分组为对量化敏感 / 不敏感,每个层应用高 / 低位。因而,人们能够最大限度地缩小精度降落,并依然受害于缩小内存占用和低精度量化更快的减速。

  • 硬件感知量化

量化的指标之一是进步推理时延。然而,并非所有硬件在量化某个层 / 操作后都提供雷同的速度。事实上,量化的益处取决于硬件,片上内存、带宽和缓存层次结构等许多因素都会影响量化速度。

思考这一事实对于通过硬件感知量化实现最佳效益十分重要。因而须要模仿硬件提早,在硬件中部署量化操作时,需测量不同量化位精度的每层的理论部署提早。

  • 蒸馏辅助量化

量化中一个乏味的工作路线是联合模型蒸馏以进步量化精度。模型蒸馏是一种应用精度较高的大模型作为老师,帮忙训练紧凑型学生模型的办法。在学生模型的训练过程中,模型蒸馏提出利用老师产生的软概率,而不是仅仅应用 ground-true 类标签,该软概率可能蕴含更多输出信息。也就是说,总体损失函数包含学生损失和蒸馏损失。

  • 极致量化

二值化是最极其的量化办法,其中量化值被限度为 1 位示意,从而将内存需要大幅升高 32×。除了内存劣势外,二进制(1 位)和三元(2 位)操作通常能够应用位算术无效计算,并能够在更高精度(如 FP32 和 INT8)上实现显著的减速。然而,简略的二值化办法将导致精度显著降落。因而,有大量工作提出了不同的解决方案来解决这一问题,次要分为以下三类:

a. 量化误差最小化(应用多个二值矩阵组合模仿近似,或者应用更宽网络)
b. 改良损失函数(例如退出蒸馏损失)
c. 改良训练方法(如反向流传时用更润滑的函数取代 sign)

极低位精度量化是一条十分有前途的钻研方向。然而,与基线相比,现有办法通常会导致高精度降落,除非执行十分宽泛的调谐和超参数搜寻。但这种精度降落对于不那么要害的利用可能是能够承受的。

2.5 将来量化方向

在这里,咱们简要探讨了将来量化钻研的几个挑战和时机。这分为量化工具、硬件和 NN 架构的独特设计、联结多种压缩办法和量化训练。

量化工具:
应用以后的办法,将不同的 NN 模型量化并部署到 INT8 是很简略的,而不会显著失去准确性。有几个软件包可用于部署 INT8 量化模型(例如,Nvidia 的 TensorRT、TVM 等),每个软件包都有良好的文档。然而,用于低位精度量化的软件并不宽泛可用,有时也不存在。例如,Nvidia 的 TensorRT 目前不反对 INT8 以外的量化。此外,对 INT4 量化的反对直到最近才被增加到 TVM 中。应用 INT4/INT8 进行低精度和混合精度量化在实践中无效和必要的,因而,开发用于低精度量化的高效软件 API 将产生重要影响。
硬件和 NN 架构联结设计:
如上所述,低精度量化的经典工作与机器学习的最新工作之间的一个重要区别是,神经网络参数可能具备十分不同的量化值,但依然能够很好地泛化近似。例如,通过量化感知训练,咱们可能会收敛到一个不同的解,远离繁多精度参数的原始解,但依然取得良好的准确率。人们能够利用这种自由度,也能够在 NN 架构被量化时调整它。例如,扭转 NN 架构的宽度能够缩小 / 打消量化后的泛化间隙。将来的工作之一是在模型被量化时联结调整其余体系结构参数,如深度或单个内核。将来的另一项工作是将这种独特设计扩大到硬件体系结构。
联结多种压缩办法:
如上所述,量化只是无效部署 NN 的办法之一。其余办法包含高效的 NN 架构设计、硬件和 NN 架构的协同设计、剪枝和常识蒸馏、网络框架搜寻等。量化能够与这些其余办法联合应用。然而,目前很少有工作摸索这些办法的最佳组合。例如,NAS 联结量化、剪枝和量化能够一起利用于模型,以缩小其开销,了解结构化 / 非结构化剪枝和量化的最佳组合十分重要。同样,将来的另一个方向是钻研这些办法与上述其余办法之间的联结。
量化训练:
兴许量化最重要的用处是以半精度减速 NN 训练。这使得应用更快、更节能的低精度逻辑进行训练。然而,要把这一点进一步推到 INT8 准确训练是十分艰难的。尽管在这一畛域存在一些乏味的工作,但所提出的办法通常须要大量的超参数调整,或者它们只实用于一些绝对容易的学习工作的 NN 模型。根本的问题是,在 INT8 精度的状况下,训练可能会变得不稳固和发散。解决这一挑战可能会对多个应用程序产生很大影响,特地是对于前沿的训练。

3. 量化论文解读

3.1Data-Free 量化

Data-Free Quantization Through Weight Equalization and Bias Correction[2]. (ICCV2019)

这是高通提出的一篇文章,提出 Data-Free 实现训练后量化,文章中的次要翻新点是提出了权重平衡和偏移纠正的办法。

如下图 (左) 所示,同一层的卷积核值范畴散布极不平衡,而每通道量化又实现绝对简单和耗费额定的工夫,因而提出对权重进行均衡化,如下图 (右) 所示,通过均衡化后,整体值范畴散布绝对平衡。

而权重平衡次要是利用了等价伸缩的原理,如公式

的等价,在卷积核全连贯层中,对前一层权重的缩放能够通过缩放因子传递到下一层。

偏移纠正是因为在模型量化过程中数据会产生整体的偏移,因而通过计算偏移的误差,而后对误差进行对消可实现更精确的量化成果。如下表所示,文章中提出的两种办法在层量化的形式中能够实现与每通道量化靠近的后果。

Post training 4-bit quantization of convolutional networks for rapid-deployment[3]. (NIPS2019)

该文章应用 4bit 精度实现了训练后量化,提出了剖析计算最佳剪辑范畴 (ACIQ) 和通道位宽设置。ACIQ 提出以最小量化误差为优化指标,通过优化的形式失去不同精度量化的最优裁断值,同时还提出了在总 bit 精度固定的状况下,不同通道设置不同的精度进行量化,能够实现更加适合和精确的量化,然而不同通道设置不同的 bit 进行量化难以实现工业减速。下表展现了失去的试验后果,在 4bit 量化下,模型降落 2% 左右的准确率。

Differentiable Soft Quantization: Bridging Full-Precision and Low-Bit Neural Networks[4].(ICCV2019)

对于低比特量化,如二量化能够无效地减速推理,同时升高深度神经网络的内存耗费,这对于在资源无限的设施(如嵌入式设施)上部署模型至关重要。然而,因为低比特量化的离散性,现有的量化办法往往面临训练过程不稳固和性能重大降落的问题。为了解决这一问题,该文章提出了一种可微软量化(DSQ)办法来补救全精度网络和低比特网络之间的差距。DSQ 能够在训练过程中主动进化,逐渐迫近规范量化,如下图所示。因为 DSQ 的可微性,在适当的限幅范畴内,DSQ 能够在后向流传中跟踪准确的梯度,缩小前向过程中的量化损失。

DSQ 采纳一系列双曲正切函数逐渐迫近阶梯函数进行低比特量化(如 1 比特状况下的符号函数),同时放弃平滑性,便于梯度计算。该文章针对一个近似特色变量从新结构了 DSQ 函数,并相应地倒退了一种进化训练策略来逐渐学习微分量化函数。在训练过程中,DSQ 和规范量化之间的近似值能够由特色变量管制,特色变量和限幅值能够在网络中主动确定。DSQ 缩小了由极低比特量化引起的偏差,从而使训练中的前向和后向过程更加统一和稳固。

下表能够看到该办法在较低比特量化的状况下,与 FP32 相比,根本没有准确率进化。

Mixed Precision Quantization of ConvNets via Differentiable Neural Architecture Search[5].(ICLR2019)

如上图所示,该论文提出了可微分 NAS(DNAS),该 NAS 办法将候选操作以概率 θ 随机激活,而非间接的 softmax 进行加权,并且概率 θ 作为搜寻过程中能够优化的参数。因为 DNAS 后期初始化以相等的概率进行随机激活操作,而在训练前期概率 θ 会呈现显著的差异化,因而 DNAS 在后期训练时似 DARTS,而前期似 ENAS。

为了实现混合精度的量化,该论文在 DNAS 的根底上,将不同 bit 量化作为不同的构造(如下图所示),搜寻优化失去不同层不同的量化精度。

通过可微分搜寻失去混合精度量化,如下表所示,在 Cifar10 数据集上,能够做在 10 倍以上减速的条件下,量化后准确率还略高于 FP32。

APQ: Joint Search for Network Architecture, Pruning and Quantization Policy[6]. (CVPR2020)

该论文提出了 APQ,用于在资源受限硬件上高效的深度学习推理。与以前别离搜寻神经架构、剪枝策略和量化策略的办法不同,该论文以联结的形式优化它们。为了应答它带来的更大的设计空间,提出训练一个量化感知的精度预测器,以疾速取得量化模型的精度,并将其反馈给搜索引擎,以抉择最佳拟合。

然而,训练这种量化感知精度预测器须要收集大量量化的模型、精度配对,这波及量化感知微调,因而十分耗时。为了应答这一挑战,该论文提出 将常识从全精度(即 fp32)精度预测器转移到量化感知(即 int8)精度预测器,这大大提高了样本效率 。此外,收集 fp32 精度预测器的数据集只须要通过从事后训练的 once-for-all[7] 网络中采样来评估神经网络,而不须要任何训练老本,这是高效的。下图为从全精度预测器迁徙训练量化感知的准确率预测器的过程。

下表为在 ImageNet 数据集上的后果:

参考文献:

  1. A Survey of Quantization Methods for Efficient Neural Network Inference.
  2. Data-Free Quantization Through Weight Equalization and Bias Correction, ICCV2019.
  3. Post training 4-bit quantization of convolutional networks for rapid-deployment, NIPS2019.
  4. Differentiable Soft Quantization: Bridging Full-Precision and Low-Bit Neural Networks, ICCV2019.
  5. Mixed Precision Quantization of ConvNets via Differentiable Neural Architecture Search, ICLR2019.
  6. APQ: Joint Search for Network Architecture, Pruning and Quantization Policy, CVPR2020.
  7. Once for all: Train one network and specialize it for efficient deployment,ICLR2020.
  8. Binary Neural Networks: A Survey, Pattern Recognition, 2020.
  9. Forward and Backward Information Retention for Accurate Binary Neural Networks, CVPR2020.

点击关注,第一工夫理解华为云陈腐技术~

退出移动版