Towards Accurate Binary Convolutional Neural Network

本文提出了一种使用多个二进制网络的线性组合来拟合复杂网络的方法,它是首个在ImageNet上效果接近全精度网络的二进制网络。

其优化目标如下:
Towards Accurate Binary Convolutional Neural Network
w是全精度权重,B为量化权重,α为每个二进制网络的系数:
Towards Accurate Binary Convolutional Neural Network
为了能使反向传播正常进行,设定下式:
Towards Accurate Binary Convolutional Neural Network
Towards Accurate Binary Convolutional Neural Network
ui的取值区间是[-std(W),std(W)]。

前向和反向传播的过程如下:
Towards Accurate Binary Convolutional Neural Network
整体框架如下:
Towards Accurate Binary Convolutional Neural Network
左边每个框框是一个近似的全精度网络,其中每一个都是一个二进制网络。右边共有三个近似的全精度网络,它们可以并行地进行运算。

上面是对权重的量化,接下来是对**值的:
Towards Accurate Binary Convolutional Neural Network
Towards Accurate Binary Convolutional Neural Network
这里v是shift参数。

但是这样简单的进行二进制量化会使得精度大幅下降,于是作者提出了和权重类似的近似方法:
Towards Accurate Binary Convolutional Neural Network
和权重不同,这里的v和β是可以训练的。

作者先做一个BN操作,将输出值变换到单位高斯分布内,然后再进行**。

卷积过程于是变为:
Towards Accurate Binary Convolutional Neural Network
作者随后解释了为什么使用二进制网络进行近似是有效的:

我们可以简单地将一个二进制网络视作一个指示器。比如说,一个二进制网络将负值量化为-1,正值量化到1。而另一个二进制网络,因为加了shift参数,所以它可能是将小于2的值量化到-1,大于等于2的值量化到1。

将这两个二进制网络进行组合,就可以灵活地表达值的范围了。

最终的实验结果表明这种做法确实效果很好。

这种方法的另一个好处在于,k个1bit的网络的计算速度,要比1个kbit的网络的计算速度要快。因为kbit的网络需要额外的计算和存储,它很容易值溢出。

它的另外一个好处是,它可以使用脉冲网络来进行推断(这里没看懂,我的理解是它因为是二进制网络,所以不需要存储多少参数)。

不过作者提出,它的两个不完善的地方是:可以将加减操作转变为比较操作。
Towards Accurate Binary Convolutional Neural Network
二是在推断时,BN操作还是一个乘法操作,但作者认为可以将它改善为二进制操作。
Towards Accurate Binary Convolutional Neural Network
Towards Accurate Binary Convolutional Neural Network