专栏算法工具链量化感知训练过程中,涉及到量化操作(数值的舍入),梯度是如何在此处进行回传的?

量化感知训练过程中,涉及到量化操作(数值的舍入),梯度是如何在此处进行回传的?

已解决
Vincent2025-02-11
32
2

在量化过程当中,涉及到round操作(即数值的四舍五入),那么在此处 梯度如何进行backward?

算法工具链
征程6
评论1
0/1000
  • Huanghui
    Lv.5
    你好! 解决这一问题,通常有两种方案:基于统计的方法和基于学习的方法。
    就与统计的方法: 量化的目标是把 Tensor 中的浮点数通过 scale 参数均匀地映射到 int8 表示的 [-128, 127] 的范围上。既然是均匀映射,那么很容易得到 scale 的计算方法:
    def compute_scale(x: Tensor):
    xmin, xmax = x.max(), maxv = x.min()
    return max(xmin.abs(), xmax.abs()) / 256.0
    基于学习的方法: 虽然 round 的梯度为 0,研究者通过实验发现,在该场景下,如果直接设置其梯度为 1 也可以使得模型收敛到预期的精度(这种方法也称作 ‘直通估计器(STE: Straight-Through Estimator )’)。
    1. STE 的作用:
    在量化感知训练(QAT)中,量化操作(如舍入操作)是不可微的,这意味着它的导数在数学上是未定义的。然而,为了训练模型,我们需要计算梯度并更新权重。STE 的作用就是解决这个问题:
    在正向传播时,执行量化操作(如舍入)。
    在反向传播时,忽略量化操作的不可微性,直接将上游梯度传递到下游。
    通过这种方式,STE 使得量化操作可以无缝地集成到深度学习框架的反向传播过程中。
    2025-02-11
    0
    1
    • Vincent回复Huanghui:

      好的了解了谢谢

      2025-02-11
      0