【论文笔记】二值化神经网络(Binarized Neural Network)
2016-03-22 09:45
579 查看
文章链接:Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1 是2016年2月份新出的一篇文章。
文章的主要思想是通过二值化weights和activations,来提高NN的速度和减少其内存占用。
首先权重Wk 经过二值化,然后与上层二值化后的激活值abk−1相乘,再进项BatchNormalization得到这一层的激活值ak,由于BatchNorm的参数θk不是二值的,因此ak也不是二值的,我们需要再对它做二值化得到二值化后的激活值abk。
BNN的优势主要在于其测试速度快,占用内存小。与32bit DNN相比,它的内存占用减少了32倍,并且运行速度在GPU上快了7倍。It is amazing! 接下来的考虑就是能否在更复杂的数据库上得到和普通DNN差不多的精度,同时保持效率上的优势了。
文章的主要思想是通过二值化weights和activations,来提高NN的速度和减少其内存占用。
1. Binarization Function
首先是如何对weights和activations进行二值化。如下图左,Binarization function 很简单,就是一个符号函数。但是作者就想了啊,符号函数不好进行梯度的反向传播啊,因此就把它近似成了右边的Htanh(x)的函数,这样在[-1,1]区间内导数就等于1。2. 网络前向传播
那么除第一层(输入层)以外,每一层的前向传播过程如下:首先权重Wk 经过二值化,然后与上层二值化后的激活值abk−1相乘,再进项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差不多的精度,同时保持效率上的优势了。
相关文章推荐
- c#实现图片二值化例子(黑白效果)
- C#数字图像处理之图像二值化(彩色变黑白)的方法
- bp神经网络及matlab实现
- 如何用70行代码实现深度神经网络算法
- 基于神经网络的预测模型
- 神经网络初步学习手记
- RBF的一点个人理解
- 利用自收敛深度人工神经网络构建(DNN)构建多语种大词汇量连续语音识别系统
- 最小外接矩形(MBR)
- UFLDL Exercise: Convolutional Neural Network
- 基于遗传算法(GA)的神经网络训练算法
- 神经网络 caffe 的 vs2013 版本代码
- 传统BP神经网络完整例子(电力负荷预测)
- Matlab 神经网络工具箱
- Google最新人工智能算法RankBrain的实现--写在后面的话
- 备份:创建VS工程使用神经网络库——FANN
- 卷积神经网络知识要点
- opencv+vs2013实现 最大类间二值化(附源代码)
- Deep learning: autoencoders and sparsity
- bp神经网络c语言实现