ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Any-Precision Deep Neural Networks

2021-08-03 22:02:15  阅读:204  来源: 互联网

标签:mathbf 训练 Neural 模型 Networks 量化 bit 我们 Any


文章目录


任意精度深度神经网络

3.1 预览

神经网络通常是一层一层地构造。 x i x_i xi​表示神经网络第 i i i层的输入。该层的权值为 w i w_i wi​偏差为 b i b_i bi​。则这一层的输出可以表示为:
在这里插入图片描述不失一般性,以全连接层的一个通道为具体例子,为简单起见,去掉下标 i i i。
在这里插入图片描述其中, y , w ∈ R D \mathbf{y}, \mathbf{w} \in \mathbb{R}^{D} y,w∈RD, b b b是一个标量。

为了提高计算效率,我们希望避免 D − d i m D-dim D−dim向量的浮点积。相反,我们使用 N − b i t N-bit N−bit定点整数将权重表示为 w Q \mathbf{w}_\mathbf{Q} wQ​,激活值表示为 x Q \mathrm{x}_{\mathrm{Q}} xQ​,此后,我们假设 w Q \mathbf{w}_\mathbf{Q} wQ​和 x Q \mathrm{x}_{\mathrm{Q}} xQ​以其按位格式存储为有符号整数。注意在一些相关工作中 (Courbariaux et al. 2016 )。 w Q \mathbf{w}_\mathbf{Q} wQ​和 x Q \mathrm{x}_{\mathrm{Q}} xQ​的元素可以表示为向量{−1,1},这两种格式之间的转换很简单。 N − b i t N-bit N−bit整数的权值和激活,如先前技术中所讨论的 (Zhou et al. 2016; Rastegariet al. 2016),计算可以通过利用位操作(和,xnorbit-count),甚至专用的DNN硬件来加速。

早期的工作(Tang, Hua, and Wang 2017)表明,通过添加逐层实值缩放因子 s s s,可以很大程度上减少输出范围的变化,从而获得更好的模型精度。由于比例因子在同一层内的通道之间共享,计算代价是小数。在这个设置之后,有了量化的权值和输入,就有
在这里插入图片描述然后将激活 y ′ \mathbf{y}^{\prime} y′量化为 N − b i t N-bit N−bit定点整数作为下一层的输入。

3.2 推理

我们将在下一节详细讨论量化函数。这里我们描述一个训练过的任何精度的深度神经网络的运行时间。
在这里插入图片描述

图1 将训练模型中的核权重量化为不同的精度级别:由于我们遵循统一的量化模式,当用带符号整数表示权值时,量化可以实现为简单的比特移位。

一但训练完成时,我们可以将权重保存在较的精度水平进行存储。如下图所示,我们可以通过比特移位简单地将权重量化为更低的位宽度。我们通过实验观察到,在提出的训练框架下,模型精度变化平稳且一致,与以相同位宽训练的专用模型不相上下,甚至优于专用模型。

3.3 训练 (Training)

在文献中已经分别提出了用于权重和激活的多个量化函数。给定一个预先训练的DNN模型,可以将其权重量化为低位,并相应地对激活应用一定的量化函数,然而,当比特数变小时,由于权重的粗略近似和激活的较大变化,准确度迅速下降,为获得低比特位模型最广泛采用的框架是量化感知训练。该方法遵循量化感知的训练框架。

我们以同样的完全连接层为例。在训练中,我们保持浮点值权重 w \mathbf{w} w作为实际层权重 w Q \mathbf{w}_{\mathbf{Q}} wQ​。在前馈传递中,给定输入 x Q \mathbf{x}_{\mathbf{Q}} xQ​,我们按照公式(3)计算原始输出 y ′ \mathbf{y}^{\prime} y′。现有技术表明了批归一化(BN) (Ioffe和Szegedy 2015)层在低精度DNN训练中的重要性,我们据此进行研究。然后将 y ′ \mathbf{y}^{\prime} y′传递到BN层,然后量化为 y Q \mathbf{y}^{\mathbf{Q}} yQ作为下一层的输入。

Weights. 我们使用类似于Zhou et al. 的统一量化策略,并使用比例因子来近似权重。我们首先应用tanh函数将其标准化 [ − 1 , 1 ] [−1,1] [−1,1],然后将其转化为 w ′ ∈ [ 0 , 1 ] \mathbf{w}^{\prime} \in[0,1] w′∈[0,1],即
在这里插入图片描述然后我们将标准化值量化为 N − b i t N-bit N−bit位整数 w Q ′ \mathrm{w}_{\mathbf{Q}}^{\prime} wQ′​和缩放因子 s s s,其中
在这里插入图片描述这里 M A X N \mathrm{MAX}_{\mathrm{N}} MAXN​表示 N − b i t N-bit N−bit位整数的上界, I N T ( ⋅ ) \mathrm{INT}(\cdot) INT(⋅)将浮点值转换为整数。

最后,这些值被重新映射回近似浮点值的范围,以获得在这里插入图片描述其中 E \mathbb{E} E是同一层中所有浮点值权重绝对值的平均值。最终,我们用 s ∗ w Q s * \mathbf{w}_{\mathbf{Q}} s∗wQ​来近似 w \mathbf{w} w,并用量化的权重执行前馈过程。如等式3所示,比例因子可以应用于所有整数向量的点积之后。

在后向春播中,将相对于基础浮点值变量 w \mathbf{w} w计算梯度,并将更新应用于 w \mathbf{w} w。以这种方式,将逐渐累积相对不可靠性和细微的信号,因此这将稳定整体训练过程。由于并非所有涉及的操作都是支持反向传播的平滑函数,我们使用直接通过估计器(STE) (Hinton 2012)来近似梯度。例如,方程5中的 r o u n d round round运算几乎处处导数为零。对于STE,我们分配 ∂ round ⁡ ( x ) / ∂ x : = 1 \partial \operatorname{round}(x) / \partial x:=1 ∂round(x)/∂x:=1。

Activations. 对于前行传播中的激活量化,我们首先将值裁剪到 [ 0 , 1 ] [0,1] [0,1]范围内,然后得到 N − b i t N-bit N−bit定点表示
在这里插入图片描述在实际中,我们只将整数部分计算为 y Q \mathbf{y}_{\mathbf{Q}} yQ​,将常数比例因子吸收到下一层的持久网络参数中,将恒定比例因子吸收到下一层的持久网络参数中。

设 L L L表示最终损失函数,则关于激活 y Q \mathbf{y}_{\mathbf{Q}} yQ​的梯度近似为在这里插入图片描述其中在这里插入图片描述 r o u n d round round函数的梯度用STE近似为1。

Dynamic Model-wise Quantization. 在以往的低精度模型中,位宽 N N N在训练过程中是固定的。在运行时,如果我们更改 N N N,则模型精度会急剧下降。为了促使产生的模型具有灵活性,在这里,提议在训练阶段动态改变 N N N,以使训练和推理过程保持一致。然而,激活的分布在不同的位宽N下不同,特别是当N很小时(例如,1位),如图3所示。因此,在没有特殊处理的情况下,动态变化的N在学习模型时会产生冲突,而该模型在我们的实验中无法收敛。在这里插入图片描述

图2 权重和输入在不同位宽下的激活分布:我们随机生成一个单通道全连接层和1000个16维输入;然后将权值和输入分别量化为1、2、4、8位,并总结了不同位宽下的激活分布;如图所示,与8位模型相比,1位量化导致了显著的分布漂移,2位下的差异也很明显。

调整内部特征/激活分布的广泛采用的技术之一是批量归一化(BatchNorm) (Ioffe and Szegedy 2015) 。它的工作原理是跨批次维度对图层输出进行归一化,如下所示:
在这里插入图片描述其中 B B B是批次大小, i i i表示当前批次内的索引, ϵ \epsilon ϵ是为避免数值问题而添加的小值, µ µ µ和 σ 2 σ^2 σ2分别定义为平均值和方差:
在这里插入图片描述在训练过程中,BatchNorm Layer不断计算 µ µ µ和 σ 2 σ^2 σ2的运行平均值,即
在这里插入图片描述其中 µ t µ_t µt​和 σ t 2 σ_t^2 σt2​是当前更新之前的值,衰减率 λ λ λ为先验超参数集。但是,即使使用BatchNorm层,由于图3示例中所示的值分布变化,动态变化的 N N N也会导致训练中的收敛失败。

在我们提出的框架中,我们采用动态变化的BatchNorm layer来处理训练中不同的 N N N。更具体地说,假设我们具有位宽候选列表 { n k } k = 1 K \left\{n_{k}\right\}_{k=1}^{K} {nk​}k=1K​,我们保留 ∣ K ∣ |K| ∣K∣副本的BatchNorm层参数和内部状态 Φ k = 1 K \Phi_{k=1}^{K} Φk=1K​。当当前的训练迭代在 N = n k N = n_k N=nk​下进行时,我们用来自 Φ k \Phi_{k} Φk​的数据重置BatchNorm层,并更新相应的副本。

Yu et al.等人 (Yu and Huang 2019) 在处理不同的网络架构时也采用了类似的技术。训练后保留所有BatchNorm层的参数,用于推理。注意,与网络参数的总数相比,BatchNorm层的附加数量可以忽略不计。我们在算法1中总结了所提出的方法。利用该算法,我们可以训练DNN具有灵活的运行时位宽调整能力。
在这里插入图片描述

算法1:对所提出的任意精度DNN进行训练
要求:给定的候选位宽 P ← { n k } k = 1 K P \leftarrow\left\{n_{k}\right\}_{k=1}^{K} P←{nk​}k=1K​

  1. 使用浮点值参数初始化模型 M \mathcal{M} M
  2. 初始化 K K K个BatchNorm层: Φ k = 1 K \Phi_{k=1}^{K} Φk=1K​
  3. for t = 1 , … , T i t e r s t=1, \ldots, T_{i t e r s} t=1,…,Titers​ do
  4.   采样批次数据集 ( x , y ) (x,y) (x,y)来自训练集 D t r a i n D_{train} Dtrain​
  5.   for n p n_p np​ in P P P do
  6.     设置量化位宽 N ← n p N \leftarrow n_{p} N←np​
  7.     前馈传递: y n p ← M ( x ) y_{n_{p}} \leftarrow \mathcal{M}(x) ynp​​←M(x)
  8.     设置Batchnorm层 M.replace ( Φ p ) \left(\Phi_{p}\right) (Φp​)
  9.      L ← L + loss ⁡ ( y n p , y ) L \leftarrow L+\operatorname{loss}\left(y_{n_{p}}, y\right) L←L+loss(ynp​​,y)
  10.    end for
  11. 返回传播以更新网络参数
  12. end for

我们方法中的另一个可选组件是在培训中添加知识蒸馏(Hinton、Vinyals and Dean 2015)。知识提炼的工作原理是匹配两个网络的输出。在训练网络时,我们可以使用一个更复杂的模型或一组模型来产生软目标,通过调整最终Softmax层的温度来产生软目标,然后用软目标来指导网络学习。

在我们的框架中,我们通过从高精度模型生成软目标来应用这一思想。更具体地说,在每次训练迭代中,我们首先将量化位宽设置为最高候选 n K n_K nK​,并运行前馈传递以获得软目标 y s o f t y_{soft} ysoft​。之后,我们不再对每个精度候选项累积交叉熵损失,而是使用模型预测的KL散度和 y s o f t y_{soft} ysoft​作为损失。在我们的实验中,我们观察到,一般来说,知识蒸馏在低位精度水平下会带来更好的性能。

4 实验

我们首先在几种网络结构和数据集上对我们的方法进行了验证。这些网络包括一个8层的CNN、AlexNet、MobileNetV2(、RESNET-8、RESNET-18、RESNET-20和RESNET-50。数据集包括Cifar-10、SVHN和ImageNet,我们也评价了我们的方法在图像分割任务,以证明其泛化。

4.2 Comparison to Dedicated Models

对于我们测试的每个位宽,我们都按照相同的训练管道专门训练一个低精度的模型,并为权重和激活设置固定的位宽。例如,在Cifar-10上,我们的1-bit基线达到了92.07%的准确率,而Ding et al. (Ding et al. 2019)最近的工作报告了89.90%。

标签:mathbf,训练,Neural,模型,Networks,量化,bit,我们,Any
来源: https://blog.csdn.net/lihuanyu520/article/details/118895690

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有