论文地址:https://arxiv.org/abs/1603.05279
code:http://allenai.org/plato/xnornet
这篇论文的动机是解决DNN在移动端的部署困难的问题,其实这也是量化的主要目的之一。作者提出了两种二值化网络:Binary-Weight-Networks(BWN)和XNOR-Network。其中BWN是将权重量化为1bit(+1,-1),而XNOR-Net则是进一步对权重和激活值都量化为1bit。(激活值就是卷积层的输入)
下图是这两种网络和普通网络的实验结果比较(Alex-Net):
Binary-Weight-Networks
BWN思想和BNN一样,不过只量化权重,更新参数是也是使用实数值(精度高)。
设输入为III,权重为WWW,维度为c∗w∗hc*w*hc∗w∗h,二值化后的权重为B∈{+1,−1}B \in \{+1,-1 \}B∈{+1,−1},放缩系数为α\alphaα,即W≈αBW \approx \alpha BW≈αB,则卷积操作可转转换为只有加减的卷积操作:

对于权重WWW的近似,肯定越接近越好,于是就转化为优化问题:

展开得:

设n=c∗w∗hn=c*w*hn=c∗w∗h,显然,BTBB^TBBTB和WTWW^TWWTW均为正的常数,且BTB=nB^TB= nBTB=n。设WTW=cW^TW=cWTW=c,则目标函数为:

要使目标函数最小,只要WTBW^TBWTB最大即可。于是优化问题就转化为:

即B的最优值为:

对于α\alphaα的最优值,直接对目标函数进行求导即可得到:

即

具体的算法为:

XNOR-Network
XNOR-Net是对权重和激活值都二值化(XNOR即同或门),主要利用XNOR和bitcount操作。卷积运算可以看作是由移位操作和点积操作组成,而对于二值化的权重和激活值,点积操作可由XNOR和bitcount来近似代替。
对于输入X,权重W,有:

和BWN相同,求最优近似值,故有优化问题:

然后和BWN一样的做法,


因为∣Xi∣|X_i|∣Xi∣和∣Wi∣|W_i|∣Wi∣相互独立,所以有:

具体的二值化的卷积操作如下图:

第一、二行就是上面的最优化过程,但是对于输入的二值化存在重复计算(stride=1),效率不高,所以采用第三行的方法。因为原算法是对每个位置的X都算出β\betaβ和H,但是H就是对X进行sign操作,因此只需要对整个输入矩阵I进行sign操作就可以。第三行就是这样,对输入矩阵的绝对值在channel维度上取平均:

然后用k滤波器均值滤波:

得到的K就是各个位置上的β\betaβ。因此得到最终的公式(第四行):

需要注意的是,还要对网络结构进行调整:

实验
在ImageNet数据集上与其他量化方法进行对比:

在不同网络上对比:

注:作者在实验中发现,β\betaβ似乎对准确率的影响很小。
本文介绍了Binary-Weight-Networks(BWN)和XNOR-Network两种二值化网络,旨在解决深度神经网络在移动端部署的难题。BWN仅量化权重,而XNOR-Net同时量化权重和激活值,通过XNOR和bitcount操作简化卷积运算。文章详细解释了二值化网络的工作原理,并在ImageNet数据集上进行了实验对比。
1015

被折叠的 条评论
为什么被折叠?



