RepQ带来重参结构新突破 | RepVGG结构真的没办法进行QAT训练吗?

2023-11-14 17:07:19 浏览数 (1)

现有神经网络在计算资源和计算能力上消耗大量内存,这使得在资源受限的环境中部署它们变得具有挑战性。然而,有多种方法可以提高它们的效率。这两种方法是量化,这是一种众所周知的方法,用于网络压缩,以及重参化,这是一种新兴技术,旨在提高模型性能。 虽然这两种技术分别得到了研究,但关于它们同时应用的研究却非常有限。为了解决这个问题,作者提出了一种新颖的方法,称为RepQ,它将量化应用于重参化的网络。 作者的方法基于一个洞察,即任意重参数化层的测试权重可以表示为可训练参数的不同可微函数。作者通过在函数上应用量化来实现量化感知的训练。RepQ对各种重参数化模型有很好的泛化能力,并且在所有实验中超过了基线LSQ量化方案。

1 引言

多年来,神经网络(NN)中的参数数量不断增加,这使得基于NN的应用在计算资源受限的设备上部署变得不切实际,例如移动设备。许多研究旨在设计计算效率更高的NN。

这一领域的一些非 exhaustive 想法包括知识蒸馏,模型剪枝,矩阵分解,神经架构搜索,量化,重参数化。在这里,作者主要关注重参化和量化作为主要研究领域。

重参数化是一种新兴技术,最近使得在ImageNet上训练一个普通的非残差VGG模型能够达到80%的惊人准确度。

2 相关工作

2.1 重参数化

早期的重参数化是由于批标准化和残差连接研究而出现的。受到批标准化 [] 的启发,作者们提出了一种权重规范化技术。这种技术可以被视为一种重参数化,通过引入一个额外的参数,该参数负责权重规范化,将权重向量的方向和长度解耦。DiracNets []的作者们寻找一种无需显式残差连接来训练深度网络的方法。

他们提出了将卷积与卷积结合,并引入跳跃连接进行重参数化的方法。这使得非常深的单分支架构也能达到良好的质量。ACNets和 RepVGG通过引入多个卷积和批标准化来将重参数化提升到一个新的水平,重新审视了著名的架构如VGG和 ResNet 并显著提高了它们的质量。

更先进的重参数化策略通常会使用更多的卷积和更多样的分支在它们的块中。除了在分类任务中广泛应用外,重参数化最近在目标检测和超分辨率等其他计算机视觉任务中也有所帮助,减少了计算负担。

Re-parameterization 得到了理论上的支持;作者证明了在某些特定理论假设下,重参数化可以导致更快地收敛。作者们证明了在某些情况下,重参数化可以等价于具有某种梯度缩放策略的常规网络训练。

2.2 量化

通常,NN参数以浮点数形式存储。然而,32位参数表示对于保持网络质量是冗余的。旨在寻找最佳低位整数参数表示的研究领域被称为神经网络量化。

从理论上讲,量化涉及到舍入,导致网络在几乎所有地方都具有零梯度。为了解决这个问题,QAT算法通过以一种可微分的方式模拟量化,允许网络适应随后的量化。

例如,有研究建议在全精度网络训练中注入伪量化噪声。另一方面,使用直截估计器来近似连续量化函数在反向传播过程中的梯度。

此外,列出的基础方法还可以通过使用知识蒸馏、渐进量化、随机精度、批标准化重估计、额外的正则化和各种非均匀量化扩展来改进。

3 背景

量化可以通过降低卷积或全连接层中矩阵乘法因子的精度来减少推理时间和功耗。量化可能导致质量下降,因此QAT被用来恢复质量并确保模型的鲁棒性。

在QAT过程中,原卷积操作

X*W

,其中

X

为输入,

W

为权重,被转换为

Q(X)*Q(W)

,其中

Q

是一个允许反向传播的伪量化函数,

*

表示卷积运算符。当前最先进的伪量化函数LSQ也被作者在实验中使用。

在量化重参数化的模型时,有几个可用的选项:

  1. 依次应用重参数化和Post-Training Quantization (PTQ)。研究结果显示,重参数化可能导致PTQ-不友好的分布,导致在应用PTQ后出现显著的质量下降。
  2. 依次应用重参数化和QAT。训练好的重参数化全精度块被转换为单层,然后每个单层都应用标准QAT。
  3. 同时应用重参数化和QAT,如下所示。独立地对一个重参数化块内的每个层进行量化,然后在QAT之后将它们合并为一个单独的量化层。然而,这种选项是不切实际的,因为合并有较高位宽的量化卷积会导致具有更高位宽的卷积,而二进制或八进制量化比四位或八进制量化更具挑战性。 考虑一个简单的乘法函数
f(x)=xw

,它被重参化如下

R(x)=xw_{1}w_{2}

,其中合并的权重

w=w_{1}w_{2}

。当

w_{1}

w_{2}

都是FP32时,它们的乘法通常会导致可忽略的精度损失。然而,如果

w_{1}

w_{2}

都被量化到2位,由范围在[0, 3]中的整数表示,它们的乘法结果是一个范围在[0, 9]中的整数,需要至少4位进行存储。

  1. 作者介绍了一种新颖的方法,其中同时应用了QAT和重参数化,通过在合并的重参数化块上执行伪量化来实现。

选项1-3是基于公认的模型量化方法,而选项4是作者的新颖方法,专为重参数化模型的量化而设计。由于选项1和3要么不是通用的,要么已知会导致重参数化模型产生不满意的结果,因此作者排除了这两个选项。在实验中,作者将选项2与作者的RepQ方法(选项4)进行比较,以证明其有效性。

4 提出的方法

在第4.1节中,作者描述了没有BN层的重参化块的量化策略,并引入了一个通用的RepQ训练框架。对于具有BN层的块,作者在第4.2和4.3节中提供了两种不同的扩展。

4.1 RepQ:带重参化的量化感知训练

让作者先考虑这样一个场景,即在重参数化块中没有使用BN。作者们注意到,可以将没有BN的重参化块合并为一个单卷积,同时仍然优化由重参数化引入的扩展一组权重,从而通过合并训练来减少训练时间。这部分展示了这种合并训练如何使QAT受益。

为了说明重参数化的概念,作者使用图1中给出的简单示例:

R(X,W)=X*W_{1}*W_{2} X*W_{3}
R(X,W)

表示在训练中替换单卷积的一个重参数化块。作者可以通过推断将这个块简化为一个带权重

M

的单卷积:

R(X,W)=X*(W_{1}*W_{2} W_{3})=X*M(W_{1},W_{2},W_{3})

更广义地说,

M

是一个将块的可训练参数映射到最终转换卷积权重上的不同可微函数。这个例子很容易推广到其他重参数化策略,在这些策略中,重参数化块的形状为

R(X,W)=X*M(W_{1},ldots,W_{n})

或更粗略地说,不使用BN的重参数化。介绍新重参化块的文献通常提供计算

M

所需的公式,所以作者在这里不再重复它们。

值得注意的是,合并训练不会影响梯度流动,因为在正向和反向传播过程中,等式两边的数值是相等的。然而,合并的权重

M

在右侧明确计算。现在很容易看出,伪量化函数可以应用于

M

X*M(W_{1},ldots,W_{n})to Q(X)*Q(M(W_{1},ldots,W_{n})). tag{1}

因此,函数

Q(M(W_{1},ldots,W_{n}))

将等于在推理时使用的量化权重。由于

Q

M

都是可微函数,梯度将平滑地传播到

W_{1},ldots,W_{n}

这些权重。将重参数化与引入

M

和伪量化函数

Q

相结合,构成了RepQ方法,并使训练具有端到端的可量化感知。这是所有RepQ实验中使用的主要算法。

4.2 RepQ-BN:合并批标准化

许多最先进的重参化方法使用批标准化。几篇论文表明,批标准化是它们块中的一个必要组成部分。如果移除批标准化,会导致显著的性能下降。由于作者旨在提供一个适用于各种重参化的通用量化策略,作者研究如何在QAT中处理批标准化。

第一个选项是在训练期间将BN与前一个卷积层融合,如本节所述。 [20, 21]中也提出了一种类似的程序来实现仅使用整数算法的量化。在作者的情况下,折叠BN将任务简化为第4.1节中描述的无BN情况。

mathcal{BN}(X*W)=frac{X*W-mathbb{E }Big{[}X*WBig{]}}{sqrt{mathbb{V}Big{[}X*WBig{]} varepsilon}}gamma beta\ =X*frac{W}{sqrt{mathbb{V}Big{[}X*WBig{]} varepsilon}}gamma -frac{mathbb{E}Big{[}X*WBig{]}}{sqrt{mathbb{V}Big{[}X*WBig{]} varepsilon}}gamma beta=X*M(X,W) b(X,W).tag{2}

方程(2)表明,一个带有批标准化(BN)的卷积等价于一个单一的卷积运算符。然而,它的参数依赖于输入

X

通过批统计量、均值和方差。更具体地说,带有BN的重参数化具有以下形式:

R(X,W)=X*M(X,W_{1},ldots,W_{n})

算法1展示了如何计算

M

并实际应用量化,对于

R(X,W)=mathcal{BN}(X*W)

的一个简单案例。通过将BN与前一个卷积层融合,作者减少了将合并权重任务简化为第4.1节中描述的无BN情况。作者称这种变体为作者的RepQ-BN。

算法1:卷积与批标准化融合进行量化 1:

R(X,W)=mathcal{BN}(X*W)

:在卷积之后的一个简单的重参数化BN 2:

Y=X*W

3:

mu,V=mathbb{E}left[Yright],mathbb{V}left[Yright]

:计算Y的批统计量、均值和方差 4:

hat{mu}=(1-m)cdothat{mu} mcdotmu

:更新累积移动均值(

m

表示动量) 5:

hat{V}=(1-m)cdothat{V} mcdot V

:更新累积移动方差 6:

M(X,W)=frac{W}{sqrt{V varepsilon}}cdotgamma

:计算合并权重 7:

b(X,W)=-frac{mu}{sqrt{V varepsilon}}cdotgamma beta

:计算合并偏差 8:

R_{q}(X,W)=Q(X)*Q(M(X,W)) b(X,W)

:量化重参数化层

4.3 RepQ-BNEst:批量归一化估计

有观察性的读者可能会注意到,在算法1中,卷积运算符被计算了两次,第一次是在第1行,然后又在第7行。虽然第1行中的额外计算用于计算批统计量

mu

V

,但这个问题产生了一个疑问,即是否需要执行这样一种计算代价高昂的卷积来确定输出数据的均值和方差。

这里作者提出了一种新方法,基于输入和权重估计批标准化统计量,而不需要计算卷积。为了简单起见,让作者考虑一个

1times 1

卷积的情况。

1times 1

卷积可以看作是一个大小为

[Bcdot Hcdot D, IN]

的输入

X

和大小为

[IN, OUT]

的权重

W

的矩阵乘法。其中

B

是批量大小,

H

是图像高度,

D

是图像宽度,

IN

是输入通道数,

OUT

是输出通道数。考虑计算批标准化均值统计。

mathbb{E}left[XWright]=mathbb{E}left[Xright]W. tag{3}

方程建议作者可以先计算在批、高度和宽度维度上的每个通道的平均值,然后将结果乘以权重矩阵。这种方法在计算复杂度上为

mathrm{O}(Bcdot Hcdot Dcdot IN)

,比直接在

mathrm{O}(Bcdot Hcdot Dcdot INcdot OUT)

的复杂度高的 naive 解决方案更优,此外,BN 估计使作者能够避免在 GPU 上存储特征图

XW

对于精确方差计算,由于需要计算输入协方差矩阵,因此无法进行类似的约简。为了解决这个问题,作者提出了一种近似协方差矩阵为对角形式的方案。

mathbb{V}left[XWright]=mathcal{D}left[W^{T}mathrm{Cov}(X,X)Wright] approxmathcal{D}left[W^{T}mathcal{D}left[mathrm{Cov}(X,X)right]Wright] =mathbb{V}left[Xright]W^{2}, tag{4}

其中

W^{2}

W

的逐元素平方,

mathrm{Cov}

是样本协方差矩阵,

mathcal{D}

是只保留对角元素的归一化算子。由于BNestimation,方差被替换为一个估计方差但计算上更高效的关于权重和输出的另一个二次统计量。上述公式可以推广到任意权重形状如下, 请将前面这段文本出公式以外的所有内容翻译为中文,尽量不要删减内容,公式就原始输出公式

mathbb{E}Big{[}X*WBig{]}approxhat{mathbb{E}}Big{[}X*WBig{]}=mathbb{E} Big{[}XBig{]}cdotsum_{h,d}W_{h,d}, tag{5}
mathbb{V}Big{[}X*WBig{]}approxhat{mathbb{V}}Big{[}X*WBig{]}=mathbb{V} Big{[}XBig{]}cdotsum_{h,d}W_{h,d}^{2}. tag{6}

总之,为了BN估计,作者在算法1的第2行中分别用

hat{mathbb{E}}

hat{mathbb{V}}

替换计算均值

mu

和方差

V

,并在第1行中跳过计算

Y

。作者称这种变体为作者的RepQ-BNEst方法。

5 实验

5.1 实验设置

架构

作者在三个架构上评估RepQ的性能:ResNet-18,VGG和ECBSR。对于ResNet-18,作者采用了两种重参化技术,即众所周知的ACNets和最近发布的OREPA,作者分别称之为AC-ResNet-18和OREPA-ResNet-18。

对于VGG,作者采用了最新的RepVGG方法进行重参化,其中两个网络深度变体分别为RepVGG-A0和RepVGG-B0。ECBSR是一种针对超分辨率问题开发的重参数化方法。作者评估RepQ与SOTA架构的轻量级版本在移动设备上的适用性。

对比

作者将RepVGG的量化结果与QARepVGG进行了比较,QARepVGG是引入的友好的量化版本的VGG。据作者所知,除了RepVGG之外,没有对重参化架构进行量化研究。为了进一步支持作者文章的主要论点,作者设计了一些基准,如下所述。

基准

量化模型训练包括两个连续阶段:(1) 常规的全精度(FP)预训练和(2)QAT。在第二阶段开始时,使用FP阶段预训练的权重来初始化量化模型。作者将作者的重参数化量化感知训练RepQ与不使用重参数化在QAT阶段进行的基准进行了比较。特别地,作者将RepQ与表格1中概要描述的简单和合并的基准进行了比较。

Plain

常规训练的模型,在两个阶段都没有使用重参数化。

Merged

在FP阶段训练重参数化的模型。将重参数化的块合并回单个卷积,并使用合并的权重初始化量化模型。这种初始化对后续量化可能是有益的,因为重参数化的模型通常具有比常规模型更好的指标。

训练流水线

通常,重参数化只会改变模型架构。例如,假设所有的卷积都被替换为以下重参数化块

R(X)=BN(X*W) X

。此块的简化伪代码如下所示。

一旦全精度训练收敛,将"self.quantize"参数设置为True,并在补充文件中描述的微小超参数变化下重复训练。

实现细节

作者按照重参数化文章的设置使用官方仓库训练全精度模型。这就是为什么对于相同模型架构,不同重参数化块的基准会有轻微差异。作者使用与全精度模型相同的超参数设置来训练有量化的模型,除了学习率调整。

量化模型初始化

所有量化的模型都是使用相应的全精度预训练权重初始化的;量化的步骤使用MinError[B]初始化,对于第一个批处理。为了可重复性,作者在附录中提供了超参数。

5.2 实验结果

作者在表格2和3中呈现了作者的主要结果。它们表明,所提出的RepQ变体在所有测试架构和重参数化块的基准上均取得了良好的性能。表格3展示了RepQ在各种超分辨率数据集上的优势。

对于所有研究的分类模型,8位RepQ性能超过了全精度结果,而QARepVGG出现了质量下降。RepQ与QARepVGG之间的差距在两个RepVGG版本上都超过了1%,分别为RepVGG-A0和RepVGG-B0。对于RepVGG和ResNet,最佳结果是由RepQ-BN或RepQ-BNEst实现的。特别是,在8位实验中,RepQ-BN略好于RepQ-BNEst。

在四比特量化中,RepQ-BNEst实现了更好的结果。令人惊讶的是,RepQ-BNEst在四比特的RepVGG-A0和RepVGG-B0上超过了RepQ-BN,取得了相当大的优势。

此外,作者在2个V100 GPU上测量了ResNet-18的训练速度。与RepQ-BN相比,RepQ-BNEst允许25%的训练时间减少。合并的基准在不同的研究架构上表现出不一致性。对于RepVGG-B0,合并结果非常接近RepQ,但对于ResNet-18和ECBSR,其性能不如简单的模型。

讨论

作者的结果表明,8位量化可以提高重参数化模型的质量。简单模型中也观察到类似的行为,通常解释为量化的额外正则化效应。使用RepQ方法的四位量化导致质量略有下降。

同时,与8位模型相比,4位RepVGG-B0的位操作次数减少了四倍。有趣的是,4位RepVGG-B0的位操作次数比8位RepVGG-A0少了两倍,但它的精度却更高。这使得4位RepVGG-B0在部署方面更有优势。

局限性

Re-parameterization和RepQ的主要局限性是增加了训练时间(TT)。让作者以ResNet-18用两种不同的块(ACNets和OREPA)重参数化为例。表格提供了重参数化模型在Plain FP和QAT网络上的相对训练时间。

由RepQ引入的TT增加与在full-precision训练上对ACNets和OREPA块的重参数化相比具有可比性。

尽管RepQ-BN由于需要两次前向计算而具有较长的训练时间,但RepQ-BNEst能够缓解这个问题。总的来说,尽管存在额外的训练时间开销,但在推断时间和模型质量之间的权衡中,重参数化和RepQ是有益的。

6 结论

本文介绍了RepQ,这是一种专为重参化模型设计的QAT策略。在训练期间,RepQ将重参化的块合并为一个卷积,并在合并的权重上应用伪量化函数。为了能够对任意重参数化块进行量化,作者提供了一种自然的方法来合并块内的非线性批标准化层。

此外,作者还通过估计BN统计量来增强这个解决方案,从而实现了加速。作者对各种重参数化块和模型架构进行了广泛的实验评估。结果表明,RepQ超越了现有解决方案,并为重参数化模型提供了无损的8位量化。总的来说,RepQ将重参数化的应用扩展到了量化NN的领域,并提供了易于实现的解决方案。

7 参考

[1]. RepQ: Generalizing Quantization-Aware Training for Re-Parametrized Architectures.

0 人点赞