HWGQ-net学习记录
概要介绍
HWGQ的全名是Half-wave Gaussian Quantization翻译过来就是半波高斯量子化,HWGW-net主要是针对激活值进行量化,以及使用近似的方法来拟合量化的损失(使得量化的损失和梯度匹配)。 也是模型量化一种方法
这个网络结构会在前向传播的时候使用近似于ReLU函数的量化器,在反向传播使用合适的分段线性函数,来解决前向传播和反向传播的不匹配问题。(以前的前向传播多了个量化过程,而反向传播不作处理)
对于量化的影响而言,激活值的量化比权重的量化要大很多(因为量化损失大很多)。作者认为这是因为激活值量化之后,还要经过激活函数的作用,这样就会产生不可微分算子,产生很小的梯度(梯度饱和)。
以前的方法,forward model和反向计算梯度的方法不匹配,所以不能保证得到很好的性能,很可能得到一个次优解。(因为forward时,要经过一个量化操作,而backward时按原模型处理,所以会出现forward和backward模型不匹配现象)
Half-wave Gaussian Quantization
ReLU
g(x)=max(0,x)g(x)=\max (0, x)g(x)=max(0,x)
前面已经提到了,我们在前向传播的过程中会使用量化器Q(x)去近似ReLU
前向传播近似
Q(x)=qi, if x∈(ti,ti+1]Q(x)=q_{i}, \text { if } x \in\left(t_{i}, t_{i+1}\right]Q(x)=qi, if x∈(ti,ti+1]
其中, ti,ti+1t_{i}, \quad t_{i+1}ti,ti+1 是两个量化的值。我们所需要存储的是下标,通过存储下标得到对应的值。
因为每层的激适输出都接近于高斯分布 (经过BN层之后, 就是高斯分布。而该方法是作用于点积操作后的BN层之后的),又因为ReLU是一个 half-wave rectifier,所以方法叫做 half-wave Gaussian quantized (HWGQ)。

反向传播近似
我们有三种方法来进行反向传播的近似
- Vanilla ReLU
Q^′(x)={1, if x>00, otherwise \hat{Q}^{\prime}(x)=\left\{\begin{array}{ll} 1, & \text { if } x>0 \\ 0, & \text { otherwise } \end{array}\right. Q^′(x)={1,0, if x>0 otherwise
该方法和HWGQ存在 gradient mismatch,因为Q(x) 限定了量化的最大数t m∘_{m \circ}m∘
- Clipped ReLU
Q^c(x)={qm,x>qmx,x∈(0,qm]0, otherwise \hat{Q}_{c}(x)=\left\{\begin{array}{ll} q_{m}, & x>q_{m} \\ x, & x \in\left(0, q_{m}\right] \\ 0, & \text { otherwise } \end{array}\right. Q^c(x)=⎩⎨⎧qm,x,0,x>qmx∈(0,qm] otherwise
使用截断ReLU, 则不会在大于 qm 的数值上产生 dismatch 现象。 q_{m \text { 的数值上产生 dismatch 现象。 }}qm 的数值上产生 dismatch 现象。
- Log-tail ReLU
Q^l(x)={qm+log(x−τ),x>qmx,x∈(0,qm]0, otherwise \hat{Q}_{l}(x)=\left\{\begin{array}{ll} q_{m}+\log (x-\tau), & x>q_{m} \\ x, & x \in\left(0, q_{m}\right] \\ 0, & \text { otherwise } \end{array}\right. Q^l(x)=⎩⎨⎧qm+log(x−τ),x,0,x>qmx∈(0,qm] otherwise
结果证明,截断式ReLU比较好用。
总结
HWGW-net是一种模型量化的方法,优点就是模型压缩的一贯优点,这里没有深入的去研究,日后可能来补全。
HWGQ-net是一种利用半波高斯量子化技术进行模型量化的网络结构,旨在减少激活值量化带来的损失。通过在前向传播中使用近似ReLU函数的量化器,并在反向传播中采用合适分段线性函数,解决了前向与反向传播不匹配的问题。实验证明,使用截断ReLU进行反向传播近似效果最佳。
5291

被折叠的 条评论
为什么被折叠?



