【Paper Reading】二值化网络——BNN

Binarized Neural Networks: Training Neural Networks withWeights and Activations Constrained to +1 or -1

论文链接:https://arxiv.org/abs/1602.02830
代码地址:https://github.com/MatthieuCourbariaux/BinaryNet
2016 NIPS
蒙特利尔 以色列理工

背景

深度神经网络(DNNs)在很大程度上推动了人工智能的发展,但如今DNNs几乎只能在快速和高功耗的GPU上进行训练,神经网洛由于采用浮点计算,需要较大的存储空间和计算量,严重阻碍在移动端的应用,而二值化神经网络有着高模型压缩率和快计算速度的潜在优势。文章介绍了训练二元神经网络(BNNs)的方法,二进制的权值和激活,前向传播的计算以及在方向传播中参数如何的更新,如何利用二进制位操作实现GPU加速计算的。

方法

二值化方法

确定性方法:基于符号函数Sign的确定性(deterministic )方法,即大于0就为+1,小于0则为-1。
在这里插入图片描述
在这里插入图片描述
随机二值化(stochastic )方法:基于概率的方法,当x在-1到1之间,取1和-1的是按照一定概率存在的,这和上一篇文章的随机舍入是一个思想。
在这里插入图片描述
在这里插入图片描述
随机二值化比符号函数更具吸引力,但难以实现,二值化的目的就是为了实现在嵌入式设备上部署模型,但随机二值化需要硬件在产生随机比特,这比较难实施。所以论文中的实验用的是确定性方法。

前向计算

前向计算过程和一般网络模型的计算差不多,只是多了一个权重二值化和激活二值化的过程。由于现在是权重是二值化的值,在“卷积”计算和批量归一化的计算上,有了更简便快捷的方法。
在这里插入图片描述
XNOR(同或运算)代替卷积运算
+1,-1的乘法运算真值表和Xnor(同或)真值表
(在计算机的存储中,1bit值其实只能是0或1,这里所说的“-1”,在计算机里表示就是0)
卷积=-(2×Popcount(a^w)-len)
举个例子:a=[1,-1, 1, 1, -1],b=[-1,1,1,-1,-1]
正常卷积计算:W=ab= a1b1+a2b2+a3b3+a4b4+a5b5=1(-1)+(-1)1+11+1*(-1)±(1)(-1)=-1
同或计算:先计算a和b的按位异或运算,统计其中1的个数,把“0”看作为-1,1的个数为Popcount(a^w),-1的个数为:5- Popcount(aw),累加为:2*Popcount(aw)-5,由于我们算的应该是异或的累加,取反就是同或的累加,得到为-1.
ab=[10,01,11,10,00]=[1,1,0,1,0]
Popcount(a^w)=3
W=-(2
Popcount(a^w)-5) = -1
用移位操作进行批量归一化运算
在这里插入图片描述
用移位操作近似代替乘法
AP2(x)的作用是求与x最接近的2的幂次方,如AP2(3.14)=4,AP2(2.5)=2;而<<>>操作就是位移操作

反向传播

梯度计算,由于Sign(x)函数的梯度,几乎处处为0,这显然不利于反向传播,作者采用尺度缩放的策略
在这里插入图片描述
权值更新,权重和激活值的更新并不是二值的,因为如果这样做的话误差会很大
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基于移位的AdaMax
ADAM能减少权重尺度的影响,由于ADAM需要多次乘法运算,因此作者建议使用算法AdaMax。作者在实验中发现,使用基于移位的AdaMax算法而不是使用vanilla ADAM算法时,没有观察到精度损失。
在这里插入图片描述

实验

精度损失
在这里插入图片描述
内存和计算能耗
在这里插入图片描述
• 内存访问耗时比计算耗时要多
• 相对于32bit的DNN,BNN内存需求量减少为原来的1/32还少,使得能源使用减少31/32

结论

二值化网络对于一些简单的应用和简单的网络结构,应该还是可以有很高的精度,能够大大减小内存的占用和功耗的损失,但对于复杂的应用和更深的网络结构,精度损失会很严重。

参考资料

【深度学习——BNN】:二值神经网络BNN——学习与总结
深度学习【6】二值网络(Binarized Neural Networks)学习与理解

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二值化神经网络(Binary Neural Network, BNN)是一种特殊的神经网络结构,它在前向和反向传播过程中只使用二进制数值(+1和-1)来表示网络中的权重和激活值。相对于传统的神经网络BNN显著降低了计算复杂度和存储空间要求,因此在资源有限的设备上具有广泛应用前景。本文将介绍BNN的基础知识和实现方法。 1. BNN的结构 BNN的结构和传统的神经网络类似,包含输入层、隐藏层和输出层,每个神经元都有一个二进制的权重值和一个二进制的激活值。不同的是,BNN使用的是二值权重和激活值,可以通过以下公式来计算: $$w_b = \text{sign}(w)$$ $$a_b = \text{sign}(a)$$ 其中,$w$为权重值,$a$为激活值,$\text{sign}$为符号函数,$w_b$和$a_b$为对应的二值化值。这里的符号函数定义为: $$\text{sign}(x) = \begin{cases} 1, & x>0 \\ -1, & x\leq 0 \end{cases}$$ 通过这样的二值化方式,可以将权重和激活值从浮点数转换为二进制数,从而降低了计算复杂度和存储空间要求。 2. BNN的训练 BNN的训练可以使用传统的反向传播算法,但需要在误差反向传播时考虑到二进制权重的影响。具体来说,误差反向传播过程中权重的梯度计算公式为: $$\frac{\partial E}{\partial w} = \frac{\partial E}{\partial w_b} \cdot \frac{\partial w_b}{\partial w}$$ 其中,$E$为损失函数,$w_b$为二进制权重值,$\frac{\partial E}{\partial w_b}$为二进制权重值的误差梯度,$\frac{\partial w_b}{\partial w}$为二进制权重值相对于实际权重值的导数。由于符号函数的导数几乎处处为零,因此可以将$\frac{\partial w_b}{\partial w}$设为常数$c$,比如$c=1$。 对于二值化激活值,可以使用Straight-Through Estimator(STE)方法来进行梯度传递。具体来说,STE方法将实际梯度传递给二值化激活值,但在反向传播时仅传递符号函数的导数。这样可以保证在反向传播时二值化激活值不会被修改。 3. BNN的优缺点 相较于传统的神经网络BNN具有以下优点: - 计算复杂度低:二值化后的权重和激活值只需要进行简单的位运算,大大降低了计算复杂度。 - 存储空间小:二进制权重和激活值可以用更少的存储空间来表示,因此可以在资源有限的设备上使用。 - 低功耗:由于计算复杂度低,BNN可以在功耗有限的环境下运行。 但是,BNN也存在一些缺点: - 精度低:二值化后的权重和激活值只能表示正负两个值,因此可能会影响模型的精度。 - 训练困难:由于二值化的非线性特性,BNN的训练过程可能会比传统神经网络更加困难。 4. BNN的应用 BNN的应用非常广泛,特别是在资源有限的设备上,如嵌入式系统、移动设备等。常见的应用包括: - 物体识别:BNN可以用于嵌入式设备上的物体识别任务,如人脸识别、手势识别等。 - 语音识别:BNN可以用于移动设备上的语音识别任务,如智能语音助手、语音翻译等。 - 自动驾驶:BNN可以用于嵌入式设备上的自动驾驶任务,如车辆识别、路标识别等。 总的来说,BNN是一种非常有前途的神经网络结构,可以在资源有限的环境下实现高效的计算和存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值