【论文笔记】ABC-Net

《Towards Accurate Binary Convolutional Neural Network》是大疆在nips2017上的工作。

contributions

该篇论文致力于解决二值网络对模型精度下降损失明显的问题,尤其是对一些复杂网络,精度损失情况更为显著,论文的主要贡献为如下两点:

1.通过多个二值矩阵的线性组合来逼近原模型的参数。所有的参数被映射到{-1,+1},论文指出要想得到较高的精度,需要3~5个二值矩阵。

2.对输入(activations)做二值化,采用multiple的方式拟合,从而得到比之前更高的精度。输入的二值化要比权重的二值化更难,通过采用5倍的二值输入,Top1和Top5的精度只比原模型损失5%。

简单的说,该论文提出一种ABC-Net,将输入(activations)和权重(weights)都进行二值化处理(1和-1),用多个二值操作加权来拟合实值得卷积操作。

3.1Binarization methods

这里介绍了ABC(Accurate-Binary-Convolutional)网络,该网络在训练时保留所有浮点数权重,在预测时只使用其二值化权重。

权值的拟合方式-整体拟合

参数矩阵可以用M个的二值矩阵线性表示,,要想得到最佳估计,可以优化如下方程:

  (1)

其中

为了使W可微,修改B的表达式如下:

  (2)

其中 是偏移系数,借由该表达式,优化函数可以表达为:

 (3)

这就使其变形为一个线性回归问题,对B做BP可以使用STE方法(“straight-through estimator”),假设 c 为损失函数,A和O为输入输出,前向和后向过程可以如下表示:

ABC-NET的预测流程如上图所示,其中M=N=3,输入通过H(不同的二值化方法)做了二值化,然后乘以系数得到加权后的结果。

权值的拟合方式-通道拟合

文章还提出了一种在通道维度的对参数矩阵的二值线性组合拟合方法,提出该方法更加精细,但是由于在训练时需要耗费更多资源,作者只是做了展望。

3.2Multiple binary activations and bitwise convolution

论文指出,对二值参数矩阵的卷积运算可以抛弃乘法,但是论文上面只是提了如何二值化参数矩阵,要想使卷积过程整个变为位操作运算,那么输入(activations)也需要二值化,在二值化前,作者先将所有输入界定到[0,1]区间内:

x为输入,v是偏移系数.

二值方程如下,输出为-1或+1,R为输入。

那么其前向过程与后向过程可以如下表示:

该过程会导致一个问题,在inference过程中,不像权重,输入值是一直变化着的,那么就无法每次都去对它做线性回归,论文给出了如下的解决方案。

首先,借助于BN(batch normilization)操作,使得输入相对稳定。

然后,使用N个二值矩阵(A1,A2,A3...)拟合真值输入R,

其中

不同于权重的拟合过程,在这里都是可以训练的(权重的拟合过程,系数是通过线性回归得到的),训练过后,整个卷积可以如下表述:

3.3 Training algorithm

与传统神经网络不同,为了减少信息损失,更高的准确度(依靠实验证明),ABC-NET将pooling层放在BN前(传统网络(1) Convolution, (2) Batch Normalization, (3) Activation and (4) Pooling.)。

另外,当M增大时,可能会导致rank deficiency,需要使用l2 regularization解决

4 Experiment results

BWN为标准二值网络,FP为全精度网络,上图展示了当M不同时,ABC-NET在ImageNet数据集上所取得的结果,该结果中所有模型都保留了输入的全精度,只对权重做了量化,所有网络都采用了Resnet-18结构。

上表展示了在不同的网络结构下 M、N取不同值时的结果。

上图展示了与一些二值网络模型的对比结果,W和A表示量化后的权重和输入比特数,所有网络模型都采用RestNet-18网络结构。

论文指出一点,5bit宽的多值网络可以达到和ABC-NET一样的精度,但是,前者的效率更低而且需要更多的硬件资源。

5 Discussion

第一个问题:为什么加一个偏移参数起作用。

简单来说,就是能够更好的界定数据,拟合数据,具体可以参看论文。

第二个问题:为什么比多值网络(Dorefa-net,QNN)好

先挑明二者的不同:

1.多值网络不能用比特运算符,这就导致其运算效率要比二值运算叠加的ABC-net慢。

2.在硬件层面,一个Kbit宽的乘法运算器会比K个1bit宽的乘法运算器用更多资源。

3.在事件驱动的计算和消息传递中,二值输入可以用一个脉冲响应表达,而多值网络做不到这点,显然一个脉冲响应更省电(好吧, 这倒也能算是个优点)。

猜你喜欢

转载自blog.csdn.net/u010333076/article/details/87897438
今日推荐