开发者
资源

MIN-MAX量化算法

该算法是统计数据(activation)和权重(weight)中数据的最大值最小值,根据最大值和最小值,将数据缩放到量化位宽的边界值范围,然后根据量化公式计算出对应的缩放因子scale与偏移值offset。

在初始化时,根据weight_granularity(参数介绍请参见config详细配置)离线计算weight的最大值和最小值,离线计算得到scale_w/offset_w,添加到record对象中。前向传播时,获取当前batch的最大最小值,并刷新全局最大最小值。获取weight和activation的min/max值后,根据下面公式,计算scale和offset(对于weight,只支持对称场景,offset为0)。

  • 对称量化场景

    scale=

    if abs(max) > abs(min)

    abs(max)/(2^(quant_bit-1)-1)

    else

    abs(max)/(2^(quant_bit-1))

    offset=0

  • 非对称量化场景

    scale=(max-min)/(2^quant_bit-1)

    offset=-2^(quant_bit-1)-min/scale