HWGQ-net学习记录

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)。

在这里插入图片描述

反向传播近似

我们有三种方法来进行反向传播的近似

  1. 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∘​

  1. 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>qm​x∈(0,qm​] otherwise ​

使用截断ReLU, 则不会在大于 qm 的数值上产生 dismatch 现象。 q_{m \text { 的数值上产生 dismatch 现象。 }}qm 的数值上产生 dismatch 现象。 ​

  1. 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>qm​x∈(0,qm​] otherwise ​

结果证明,截断式ReLU比较好用。

总结

HWGW-net是一种模型量化的方法,优点就是模型压缩的一贯优点,这里没有深入的去研究,日后可能来补全。

上一篇: 二值化神经网络——BNN
下一篇: Pytorch笔记【1】--导入Pytorch及判断torch基本的属性
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值