[转]XNOR-Net ImageNet Classification Using Binary Convolutional Neural Networks
感谢:
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精力有限,并没有一一研读,有兴趣的大侠可以自行修行,下面只做一个简单的介绍。
- Shallow Network,不使用CNN提取的特征而是使用SIFT等手工特征,但是其他研究者又指出要达到CNN的准确度在参数量上又要相仿,所以要先训练一个DNN,然后模拟这个网络模型。小w认为这样做就印证一句中国的老话,那什么什么,多此一举。CNN最大的特点就是end to end,干嘛非要把人家拆开!;
- Compressing pre-trained deep networks,最主要的思想是减少冗余的参数,有些神经元连接的参数就比较小,这种连接在网络中的作用比较小,所以可以去掉,以此来减少冗余运算(神经元之间没有dropout默认是全连接的);
- Designing compact layers,最具代表性的可能就是FCN了,完全不要全连接层;以及使用2个3×3替代一个5×5,这样运算就减少了5*5-3*3*2=7次。
- Quantizing parameters,量化参数,文中指出高精度的参数在提升性能上其实影响不是很大,其实很容易理解,假如一个64位的double参数值为100.5和32位的int的参数值为100,其实在乘以输入之后对于最后的值影响不大,但是在cpu处理起来却是有很大的时间差异。
- Network binarization,作者主要对比的方法,后面会做详细介绍
B. 作者工作
- 提出针对weight的Binary Weight方法,将原来的+,-,×,操作,简化成+,-操作。
- 结合第一种方法的思想,同时将输入进行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的更多相关文章
- XNOR-Net ImageNet Classification Using Binary Convolutional Neural Networks
转载请注明出处: http://www.cnblogs.com/sysuzyq/p/6245186.html by 少侠阿朱
- AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...
- 《ImageNet Classification with Deep Convolutional Neural Networks》 剖析
<ImageNet Classification with Deep Convolutional Neural Networks> 剖析 CNN 领域的经典之作, 作者训练了一个面向数量为 ...
- ImageNet Classification with Deep Convolutional Neural Networks(译文)转载
ImageNet Classification with Deep Convolutional Neural Networks Alex Krizhevsky, Ilya Sutskever, Geo ...
- 中文版 ImageNet Classification with Deep Convolutional Neural Networks
ImageNet Classification with Deep Convolutional Neural Networks 摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC ...
- [论文阅读] ImageNet Classification with Deep Convolutional Neural Networks(传说中的AlexNet)
这篇文章使用的AlexNet网络,在2012年的ImageNet(ILSVRC-2012)竞赛中获得第一名,top-5的测试误差为15.3%,相比于第二名26.2%的误差降低了不少. 本文的创新点: ...
- 论文阅读笔记二-ImageNet Classification with Deep Convolutional Neural Networks
分类的数据大小:1.2million 张,包括1000个类别. 网络结构:60million个参数,650,000个神经元.网络由5层卷积层,其中由最大值池化层和三个1000输出的(与图片的类别数相同 ...
- AlexNet——ImageNet Classification with Deep Convolutional Neural Networks
1. 摘要 本文的模型采用了 5 层的卷积,一些层后面还紧跟着最大池化层,和 3 层的全连接,最后是一个 1000 维的 softmax 来进行分类. 为了减少过拟合,在全连接层采取了 dropout ...
- ImageNet Classification with Deep Convolutional Neural Networks 论文解读
这个论文应该算是把深度学习应用到图片识别(ILSVRC,ImageNet large-scale Visual Recognition Challenge)上的具有重大意义的一篇文章.因为在之前,人们 ...
随机推荐
- iphone UIScrollView缩放
allImageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; allImageScrol ...
- hdu1978How many ways (记忆化搜索+DFS)
Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标 ...
- UITableView的简单总结与回顾
今天突发奇想的想对UItableView做一下汇总,感觉在编程中这个控件可以千变万化也是用的最多的一个了,下面就为大家简单总结下这个控件,也许还有不足,不过还是请各位不吝赐教了哈,那么我就开始了,我会 ...
- Linux命令vi/vim编辑
一.vi的基本概念基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:a) 命令 ...
- CodeSmith使用总结--创建一个基础模板
问:为什么要用CodeSmith? 答曰:因为我懒的写. Codesmith是一款非常不错的懒人工具,我也经常会用到,因为它在“重复代码”方面能够节省我们很多时间,并且解除了我们重复繁琐并且乏味的“码 ...
- java开发之基础篇2
一.java开发环境的搭建 下载和安装jdk.版本自己看着办! 1 JAVA_HOME C:\Program Files\Java\jdk1.7.0_25 2 path C:\Program File ...
- ASP.net button类控件click事件中传递参数
单击Button会同时触发这两个事件,但先执行Click,后执行Command,在button控件中加上参数属性 CommandArgument='' 在click响应函数中可以用以下代码获得传递的参 ...
- 先装Net Framework 后 装 IIS的处理办法
先装IIS话,后面装Net Framework时候会自动注册 处理aspx和ashx等的处理扩展程序 先装Net Framework 后 装 IIS.扩展程序注册在命令:aspnet_regiis - ...
- Geodatabase - 判断是否处于编辑状态
Engine中提供IDatasetEdit来判断数据是否处于编辑状态,我们知道,在ArcMap中,进行编辑的不一定都是要素类,也可以是表,网络几何等.以下能在ArcMap中进行编辑的数据都实现了 ID ...
- 表格table常见的边框设置和初步的立体效果
做网页时经常会遇到表格,常见的表格如下: <style type="text/css"> .tbtest0 { width:500px; height:200px; b ...