[转]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)上的具有重大意义的一篇文章.因为在之前,人们 ...
随机推荐
- javascript定时器:setTimeout与setInterval
概述: setTimeout:在指定的延迟时间之后调用一个函数或者执行一个代码片段,只执行一次: setInterval:周期性地调用一个函数(function)或者执行一段代码,重复执行: 语法格式 ...
- HDOJ/HDU 2544 最短路---dijkstra算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 这题的思路可以见这里(同一类型):http://blog.csdn.net/xiaozhuaix ...
- [RxJS] Combining Streams with CombineLatest
Two streams often need to work together to produce the values you’ll need. This lesson shows how to ...
- (转)简易WCF负载均衡方案
最近跟高老师讨论nginx跟tomcat集群做负载均衡方案.感觉很有意思.想到自己项目中服务用的WCF技术,于是就想WCF如何做负载均衡,Google了一会,发现wcf4.0的路由服务好像可以实现.不 ...
- C#三个平台上的文件选择方法
wpf: Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.DefaultExt = &qu ...
- UVA 10790 How Many Points of Intersection?
How Many Points of Intersection? We have two rows. There are a dots on the top row and b dots on ...
- activiti任务TASK
一.概要 设计TASK的表主要是:ACT_RU_TASK,ACT_HI_TASKINST(见参考-activiti表): 任务主要有:人工任务(usertask),服务任务(servicetask)等 ...
- Spring技术_邮箱注册_激活_获取验证码
项目结构 项目中用到的sql: create database hrSystem; use hrSystem; CREATE TABLE `emailverificationcode` ( `id` ...
- JavaScript语法学习笔记
1.关于执行JavaScript代码的方法: 第一种方法是将JavaScript代码放到文档<head>标签中的<script>标签之间: <head> & ...
- phantomjs form提交
phantomjs表单提交,其实就是对DOM就行操作(获取元素),在这里实现了动态传入各种参数 不说了 直接上代码 var page = require('webpage').create(), sy ...