本文是的论文阅读笔记。
Abstract Purpose今天,DNN在取得巨大成功的同时,也存在着一些问题:一是计算量大,二是模型参数过多。尽管他们可以在GPU等平台上进行很好的训练,但是,若要将这些模型实际部署到目标设备上(这些设备一般都是计算资源有限、对功耗及其敏感的),还是存在着很大的困难。本文提出的BNN就旨在解决这一问题,通过对计算和存储两方面的优化来使得深度学习模型的部署更加容易。
Method 一首先,作者提出了一个二值化的神经网络模型(BNN),在这个模型中,权重和激活值被量化为-1和1并参与前向传播的计算,但同时也保留了浮点型的权重,以在后向传播的梯度更新过程中使用;针对BNN中的BatchNormalization操作,作者提出了计算量更小的Shift-Based BatchNormalization(SBN);针对BNN的优化器,作者提出了更加合适的Shift based AdaMax优化器。
二其次,作者专门针对BNN在前向传播过程中涉及到的bit-wise opertaion(位操作),设计了一个二值矩阵乘法GPU核。
Result1、在MNIST, CIFAR-10 and SVHN数据集上几乎达到了和普通模型一样的准确率。 2、在BNN的前向传播过程中,存储消耗大大降低(访存大小和访存次数),并且浮点类型的计算被位操作所替代,这些都大大提升了模型的power-efficiency,并论证了使用专用硬件可以使得模型的时间复杂度减少60%。 3、作者设计的二值矩阵乘法GPU核比普通的GPU核快了7倍左右,并且无精度损失。
方法 How to Binarize?在传统的神经网络中,激活和权重都是32位的浮点数,而在BNN中,它们都只有1和-1两种取值,在本文中,作者提出了两种由浮点数转化为二值的方法,分别是 Deterministic Binarization和Stochastic Binarization。 Deterministic Binarization方法: Stochastic Binarization方法:
理论上,Stochastic Binarization比Deterministic Binarization更具吸引力,效果也更加好,但是前者在硬件的实现上存在一定难度,因此本文均采用Deterministic Binarization方法。
在BNN的前向传播中,权重和激活都被量化为1和-1,但是,在反向传播中,浮点型的权重是有必要保留的,反向传播的梯度也应该是浮点型的,并且这个梯度应该更新浮点型的权重而不是二值化的权重。
ForwardPropagation前向传播时,我们先将该层输入的权重和激活二值化,然后进行计算(卷积or全连接),然后通过BN层,此时BN层输出为浮点数,如果没有达到最后一层,那么再将这个浮点数输出二值化,若是最后一层,则不进行操作。 前向传播的过程比较容易理解,在模型部署时我们也只需要考虑前向传播即可。
这里需要注意的是,
g
a
k
g_{a_k}
gak应该等于
g
a
k
b
g_{a_k^b}
gakb乘以
s
i
g
n
(
a
k
)
sign(a_k)
sign(ak)的导数,而
s
i
g
n
(
a
k
)
sign(a_k)
sign(ak)的导数为几乎处处为0,这样梯度就无法继续传播,因此,作者用
1
∣
a
k
∣
<
=
1
1_{|a_k|
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?