二值量化

本文介绍了二值量化在神经网络中的发展历程,包括BNN、XNOR-Net、Bi-RealNet和BinaryDenseNet等模型。这些模型通过二值化权重和激活来提高计算速度和效率。BNN是二值神经网络的开创者,XNOR-Net引入了权重缩放因子,Bi-RealNet通过改进的STE和参数更新策略提高性能,而BinaryDenseNet则结合ResNet和DenseNet的优点,通过非二值化的过渡层来优化信息传递。
摘要由CSDN通过智能技术生成

原文链接:https://www.yuque.com/yahei/hey-yahei/binary_quantization

最近号称达到MobileNet水平的二值网络MeliusNet面世,趁这个机会顺便梳理一下二值量化的发展历程吧。

参考:

BNN

算是开山之作,同时二值化了权重和激活,但精度挺低,只在MNIST跟CIFAR10上做了些实验。
论文:《Binarized Neural Networks(NIPS2016)
参考:《二值神经网络(Binary Neural Network,BNN) | CSDN, 张雨石
实现:https://github.com/itayhubara/BinaryNet.pytorch

二值化形式

BNN提出了两种二值化形式,一种是决策形式,一种是随机形式。

  • 决策形式:直接根据连续值的符号,准确地二值化为+1或-1
    ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvMDgxODE2ODNhOTYxY2ZkMTk1NzY0NWRkZTcxNTNjNmEuc3Zn?x-oss-process=image/format,png#card=math&code=x^{b}=\operatorname{sign}(x)=\left{\begin{array}{ll}
    {+1} & {\text { if } x \geq 0} \
    {-1} & {\text { otherwise }}
    \end{array}\right.&height=45&width=247)
  • 随机形式:引入随机因素,概率性地二值化为+1或-1
    ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvZDk3MjkzYzg2NzA4Y2FhZjQ2MmQ2Zjk2M2Q4OGFjNGQuc3Zn?x-oss-process=image/format,png#card=math&code=x^{b}=\left{\begin{array}{ll}
    {+1} & {\text { with probability } p=\sigma(x)} \
    {-1} & {\text { with probability } 1-p}
    \end{array}\right.&height=45&width=284)
    其中为hard sigmoid函数,即![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvZmEyMDg1NTZmOWRjYWU3OTZiM2Y1NThlNTA3YTQwYjMuc3Zn?x-oss-process=image/format,png#card=math&code=\sigma(x)=\operatorname{clip}\left(\frac{x+1}{2}, 0,1\right)&height=45&width=182)
    随机形式要求软硬件生成随机数,实现上比较复杂,所以BNN更倾向于决策形式的二值化

移位实现的BN层

为参数找到最接近的近似值,把乘法运算简化为位移运算
image.png

训练细节

  • 权重和激活在前传和后传都二值化,梯度则继续使用浮点数
    • 训练过程中梯度往往比较小而且需要累积,别说二值化了,即使普通的int8量化甚至是用半精度浮点数都会带来训练效果的损失;所幸在梯度上使用浮点数只是增加了训练的时间,预测阶段的速度不受影响
    • 权重和激活值的量化引入了噪声,相当于引入正则化,反而还有利于模型的训练
  • 二值化函数的梯度处处为0,显然没法直接用反向传播算法来进行训练
    为了解决这一问题,作者使用了梯度直通评估器(straight-through estimator, STE),相当于用一个可导的hard tanh函数去近似sign函数
    ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlL19fbGF0ZXgvZDdlZGQyZGU1OTI2Y2FiZWRmOTRlOGEwMWM4ZGU5NTEuc3Zn?x-oss-process=image/format,png#card=math&code=htanh(x) = clip(x, -1, 1) \approx sign(x)\
    g_r = \begin{cases}
    1, & 0 \leq x \leq 1 \
    0, & otherwise
    \end{cases}&height=67&width=724)

### 优点
  • 速度快,减小内存占用和访存
  • 简化计算结构,通常来说32bit乘法需要占用200倍于位运算的计算资源
  • 由于权重只有+1和-1,那么卷积核存在的可能组合是相当有限的,相同/相反的输出通道都可以直接剪裁,相似的通道也有一定的裁剪空间

XNOR-Net

与BNN相似,加入了额外的缩放因子,问题讨论也比BNN更加详尽。
论文:《XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks (ECCV2016)
参考:《XNOR-Net算法详解 | CSDN, AI之路
实现:https://github.com/jiecaoyu/XNOR-Net-PyTorch

image.png
(据说~58x的加速比有问题)


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值