【论文笔记】二值化神经网络(Binarized Neural Network)

版权声明:本文为博主原创文章,转载请注明。 https://blog.csdn.net/elaine_bao/article/details/50950969

文章链接:Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1 是2016年2月份新出的一篇文章。

文章的主要思想是通过二值化weights和activations,来提高NN的速度和减少其内存占用。

1. Binarization Function

首先是如何对weights和activations进行二值化。如下图左,Binarization function 很简单,就是一个符号函数。但是作者就想了啊,符号函数不好进行梯度的反向传播啊,因此就把它近似成了右边的Htanh(x)的函数,这样在[-1,1]区间内导数就等于1。
这里写图片描述

2. 网络前向传播

那么除第一层(输入层)以外,每一层的前向传播过程如下:
这里写图片描述

首先权重Wk 经过二值化,然后与上层二值化后的激活值abk1相乘,再进项BatchNormalization得到这一层的激活值ak,由于BatchNorm的参数θk不是二值的,因此ak也不是二值的,我们需要再对它做二值化得到二值化后的激活值abk

3. 网络反向传播

然后反向传播过程如下,要注意的是权重和激活值的更新并不是二值的,因为如果这样做的话误差会很大。
这里写图片描述

4. 输入层特征编码

整个过程基本就是这样。还有一点,输入层的特征是没有进行二值化的,那怎么办呢?由于图像像素值分布在[0,255]之间,所以可以用8比特来表示,这样就能将输入的实值像素值变成二值化的编码了。整体BNN的流程如下,将乘法运算都变成了XNOR运算,可想而知其运算会很快。
这里写图片描述

5. 实验结果

实验结果如下,Baseline是32bit float的DNN方法,其他两个是在不同平台上运行的BNN方法,虚线表示训练的error rate,实线表示验证的error rate。可以看出BNN在训练时会比较慢,但是精度和DNN差不太多。
这里写图片描述

BNN的优势主要在于其测试速度快,占用内存小。与32bit DNN相比,它的内存占用减少了32倍,并且运行速度在GPU上快了7倍。It is amazing! 接下来的考虑就是能否在更复杂的数据库上得到和普通DNN差不多的精度,同时保持效率上的优势了。

展开阅读全文

没有更多推荐了,返回首页