神经网络量化(六)

量化感知训练

  前一节中描述的事后训练量化技术是我们量化工具包中的首选工具。它们非常有效且实施速度快,因为它们不需要使用标记数据对网络进行重新训练。然而,它们存在一些限制,特别是在进行低位量化(如4位及以下)时。事后训练技术可能无法减轻低位量化所带来的大量化误差。在这些情况下,我们采用量化感知训练(QAT)。QAT在训练过程中模拟量化噪声源(见第2.3节)。这使得模型能够找到比事后训练量化更优的解决方案。然而,更高的准确性也伴随着神经网络训练的常规成本,即更长的训练时间、需要标记数据和超参数搜索。

  在本节中,我们将探讨在模拟量化网络中如何进行反向传播,并提供有效训练QAT模型的标准流程。我们还将讨论批归一化折叠和通道量化在QAT中的影响,并提供各种任务和模型的结果。

4.1 模拟量化的反向传播路径

  在第2.3节中,我们看到在深度学习框架中可以使用浮点数来模拟量化。然而,如果我们观察图4的计算图,要训练这样的网络,我们需要通过模拟的量化器块进行反向传播。这会带来一个问题,因为方程(4)中的最近舍入操作的梯度在任何地方要么为零,要么未定义,这使得基于梯度的训练变得不可能。解决这个问题的方法是使用直通估计器来近似梯度,将舍入运算符的梯度近似为1:
公式 36

  使用这个近似,我们现在可以计算方程(7)中量化操作的梯度。为了清晰起见,我们假设对称量化,即z = 0,但是相同的结果适用于非对称量化,因为零点是一个常数。我们使用n和p来定义整数网格的限制,使得n = qmin /s,p = qmax /s。方程(7)对其输入xi的梯度定义如下:
公式 37

  使用这个梯度定义,我们现在可以通过量化块进行反向传播。图10显示了用于量化感知训练的前向和后向传递的简单计算图。前向传递与图4中的相同,但在后向传递中,由于使用了直通估计器的假设,我们有效地跳过了量化器块。在早期的QAT工作中,通常使用最小-最大范围在每次迭代中更新权重和激活的量化范围。在后续的工作中,使用直通估计器来计算相对于量化参数z和s的梯度。使用链式法则和直通估计器,我们首先计算相对于比例因子的梯度:
图 10

(图10:带有STE假设的量化感知训练的前向和反向计算图。)
  权重和激活的最小-最大范围通常在每次迭代中更新。在后续的工作中,使用STE来计算相对于量化参数z和s的梯度。利用链式法则和STE,我们首先计算相对于尺度因子的梯度:

公式 38
  最初,我们将零点限制为整数。为了使零点可学习,我们将其转换为实数并应用舍入运算符。修改后的量化函数定义如下:
在这里插入图片描述
相对于z的梯度通过再次应用STE到舍入运算符来计算:

公式 40

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值