[转]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)上的具有重大意义的一篇文章.因为在之前,人们 ...
随机推荐
- 给那些因为Firebug而舍不得FireFox的朋友
Google Chrome浏览器调试 作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/20 ...
- 在 IIS 上创建 FTP 站点
微软参考文档: 在 IIS 上生成 FTP 站点 主要过程: 1.控制面板 -> 程序 -> 启动或关闭Windows功能 -> 将Internet Information Serv ...
- 为人们服务的asp.net 验证控件
ASP.NET是微软推出的WEB开发工具,他有很强大的功能,今天看视频讲到验证控件这一部分,真的感受到了微软全心全意为人民服务了.越来越佩服微软了,人家都设计出来了,咱们一定要会用才可以啊,不然太…. ...
- [Redux] Extracting Container Components -- Complete
Clean TodoApp Component, it doesn't need to receive any props from the top level component: const To ...
- BUG出现的地方真的令我这个测试新人想象不到
今天上班,仍然在等待下一阶段项目的研发完成. 没有正式测试任务的我,作为新手肯定要趁着这个时间好好学习了,偶尔再拿出公司已经上线发布的APP来到处看看. 就在这偶尔的情况下让我发现了一个在正式测试时根 ...
- Oracle数据库的创建与验证
创建数据库,输入命令dbca创建数据库 会弹出创建数据库相应的对话框 单击下一步 选择创建一个数据库,并单击下一步 数据库模板选择一般目的的转换过程即可.单击下一步 全局数据库名称和SID名称,要和上 ...
- mysqldump备份原理
现网中数据库运维时,要经常对数据库做热备.为保证恢复时数据的完整性与一致性, 一种方法是在备份之前锁表,但锁表会影响正在运行的业务. mysqldump是当前MySQL中最常用的备份工具,通过mysq ...
- javascript 打开新窗口(window.open)
打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...
- 在用EF新增对象存贮至数据库时汪报错,但数据库里没有新增数据
大致的问题是这样的: 原来一直用存贮数据的方法是用的是:DBContext.AddToXXXX(),这个方法.在写代码的时候看到VS提示这个方法已失效,推荐使用DBContext.XXXX.AddOb ...
- MYSQLI DEMO
1.Select // DEMO mysqli连接方式参考 $db = new mysqli("localhost:3306", "root", "& ...





