感谢:

  XNOR-Net ImageNet Classification Using Binary Convolutional Neural Networks

XNOR-Net ImageNet Classification Using Binary Convolutional Neural Networks

本人想把算法思想实现在mxnet上(不单纯是一个layer),有意愿一起的小伙伴可以联系我,本人qq(邮箱):564326047(@qq.com),或者直接在下面留言。

一、Introduction

A. 相关工作

论文中提到了好几种加速DNN的方法,由于小w精力有限,并没有一一研读,有兴趣的大侠可以自行修行,下面只做一个简单的介绍。

  1. Shallow Network,不使用CNN提取的特征而是使用SIFT等手工特征,但是其他研究者又指出要达到CNN的准确度在参数量上又要相仿,所以要先训练一个DNN,然后模拟这个网络模型。小w认为这样做就印证一句中国的老话,那什么什么,多此一举。CNN最大的特点就是end to end,干嘛非要把人家拆开!;
  2. Compressing pre-trained deep networks,最主要的思想是减少冗余的参数,有些神经元连接的参数就比较小,这种连接在网络中的作用比较小,所以可以去掉,以此来减少冗余运算(神经元之间没有dropout默认是全连接的);
  3. Designing compact layers,最具代表性的可能就是FCN了,完全不要全连接层;以及使用2个3×3替代一个5×5,这样运算就减少了5*5-3*3*2=7次。
  4. Quantizing parameters,量化参数,文中指出高精度的参数在提升性能上其实影响不是很大,其实很容易理解,假如一个64位的double参数值为100.5和32位的int的参数值为100,其实在乘以输入之后对于最后的值影响不大,但是在cpu处理起来却是有很大的时间差异。
  5. Network binarization,作者主要对比的方法,后面会做详细介绍

B. 作者工作

  1. 提出针对weight的Binary Weight方法,将原来的+,-,×,操作,简化成+,-操作。
  2. 结合第一种方法的思想,同时将输入进行Binary Weight,将卷积操作简化到只是用XOR(异或)。

二、Core Algorithm

先说明一下作者的符号约定,为简化起见,所有的符号仅表示一层的参数(文中作者一层和多层做了区分):

对于任意一层可以表示为一个三元组<I, W, *>其中I表示输入,W表示这一层的参数,*表示实数卷积操作。

A.Binary Convolutional Neural Network

1.二值化

BCNN的核心idea就是将卷积核的参数二值化,也就是说需要用满足

I∗W≈(I⊕B)αB∈{+1,−1}c×w×hα∈R+

α,B是待求解的参数,接下来就是构造函数,然后最小化这个函数。

J(B,α)=∥W−αB∥2

展开有

J(B,α)=a2BTB−2αWTB+WTW

由于B是二值化的,所以

n=BTB

而且固定值

c=WTW

最后函数转化为

J(B,α)=a2n−2αWTB+c

优化这个函数,

B∗=argmaxBWTB

这个很明显

B∗=sign(w)sign()为符号函数

,然后求导就好了

a∗=WTB∗n=1n∥W∥l1

α也就是权重矩阵绝对值的均值

2.训练

在网络前向传播和反向传播的时候使用的是二值化的权重,但是在更新参数的时候,仍然使用的是实数,因为如果权重也成为了了二值化,那么在更新权重的时候会出现梯度消失的情况(因为权重是二值化的,-1,+1),后面的就是CNN的常规套路了。

小w觉得第9行有点问题,因为根据作者的思路,是更新实数weights, 应该是

W˜=UpdateParameters(W˜,∂CW˜,ηt)

B.XNOR-Networks

1.二值化

方法跟Binary Weights相似,下面直接贴公式了…. 

2.训练

与前面方法唯一的不同点就是网络的顺序不同。因为如果在pooling之后很可能造成大多数的tensor为+1,所以他吧pooling放在了conv之后。(这一点没想明白。。。),剩下的思路和algorithm1一样 

C.最后贴作者的总体思路

三、Conclusion

最后作者将CPU上的训练速度提升了58X,内存节省了32X,但是性能其实损失是不大的,尤其对于任务相对简单的深度网络,我想应该可以满足最基本的要求。

最后说一点感想,深度学习目前取得的成就各位大侠应该有目共睹,但是为什么深度学习目前已知被雪藏在实验室,或者为什么很难大规模的部署到线上系统上,尤其是没有GPU的实时系统中,很大程度就是受限于CPU的处理能力。小w认为这篇论文为深度学习在普通机器甚至嵌入式设备上使用提供了出路,虽然使用这种二值化的网络会有一定的性能随时,但是如果在性能损失的前提下仍然比传统方法好,而且快,那我们将深度学习应用在工程上,何乐而不为呢?

 
 

[转]XNOR-Net ImageNet Classification Using Binary Convolutional Neural Networks的更多相关文章

  1. XNOR-Net ImageNet Classification Using Binary Convolutional Neural Networks

    转载请注明出处: http://www.cnblogs.com/sysuzyq/p/6245186.html by 少侠阿朱

  2. AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...

  3. 《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

    <ImageNet Classification with Deep Convolutional Neural Networks> 剖析 CNN 领域的经典之作, 作者训练了一个面向数量为 ...

  4. ImageNet Classification with Deep Convolutional Neural Networks(译文)转载

    ImageNet Classification with Deep Convolutional Neural Networks Alex Krizhevsky, Ilya Sutskever, Geo ...

  5. 中文版 ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC ...

  6. [论文阅读] ImageNet Classification with Deep Convolutional Neural Networks(传说中的AlexNet)

    这篇文章使用的AlexNet网络,在2012年的ImageNet(ILSVRC-2012)竞赛中获得第一名,top-5的测试误差为15.3%,相比于第二名26.2%的误差降低了不少. 本文的创新点: ...

  7. 论文阅读笔记二-ImageNet Classification with Deep Convolutional Neural Networks

    分类的数据大小:1.2million 张,包括1000个类别. 网络结构:60million个参数,650,000个神经元.网络由5层卷积层,其中由最大值池化层和三个1000输出的(与图片的类别数相同 ...

  8. AlexNet——ImageNet Classification with Deep Convolutional Neural Networks

    1. 摘要 本文的模型采用了 5 层的卷积,一些层后面还紧跟着最大池化层,和 3 层的全连接,最后是一个 1000 维的 softmax 来进行分类. 为了减少过拟合,在全连接层采取了 dropout ...

  9. ImageNet Classification with Deep Convolutional Neural Networks 论文解读

    这个论文应该算是把深度学习应用到图片识别(ILSVRC,ImageNet large-scale Visual Recognition Challenge)上的具有重大意义的一篇文章.因为在之前,人们 ...

随机推荐

  1. setTimeout()和setInterval()小结

    写在前面:在写H5游戏时经常需要使用定时刷新页面实现动画效果,比较常用即setTimeout()以及setInterval() setTimeout 描述 setTimeout(code,millis ...

  2. Error when launching Quest Central for DB2: "QCC10000E - Unable to allocate environment handle fo

    标题 Error when launching Quest Central for DB2: "QCC10000E - Unable to allocate environment hand ...

  3. 使用kindeditor 注意

    ValidateRequest="false"引用编辑器要在最上端加入上面的话

  4. Silverlight Visifire控件 后台设置颜色

    ColorSet cs = new ColorSet(); cs.Id = "colorset1"; // 设置ColorSet 的 Id 为 colorset1 1.cs.Bru ...

  5. 本地开发时同时启动多个tomcat服务器

    1.环境变量中不要设置CATALINA_HOME: 2.分别修改安装目录下的conf子目录中的server.xml文件: a.修改http访问端口(默认为 8080端口),将8080修改为tomcat ...

  6. cocos2dx 音效 粒子 数据存储

    1.音效 引入头文件 #include "simpleAudioEngine.h" 命名空间 using namespace CocosDenshion; //创建一个背景 Siz ...

  7. 树状dp ural1018

    #include<stdio.h> #include<string.h> #include <iostream> using namespace std; ; in ...

  8. JDBC中PreparedStatement和Statement的区别

    共同点: PreparedStatement和Statement都是用来执行SQL查询语句的API之一. 不同点: 在PreparedStatement中,当我们经常需要反复执行一条结构相似的sql语 ...

  9. 【android】android中activity的启动模式

    在AndroidManifest.xml中配置 <activity android:label="第二个应用" android:name=".Demo2Activi ...

  10. 浅析Javascript原型继承(转)

    引自: http://blog.csdn.net/kittyjie/article/details/4380918 原作者解释的浅显易懂,非常不错的JavaScript prototype总结 JS没 ...