感谢:

  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. 消息摘要算法-HMAC算法

    一.简述 mac(Message Authentication Code.消息认证码算法)是含有密钥散列函数算法.兼容了MD和SHA算法的特性,并在此基础上加上了密钥.因此MAC算法也常常被称作HMA ...

  2. 可用与禁用 E:enabled { sRules }

    <!DOCTYPE html><html lang="zh-cmn-Hans"><head><meta charset="utf ...

  3. 《第一行代码》学习笔记4-活动Activity(2)

    1.Toast是Android系统中一种好的提醒方式,程序中使用它将一些短小的信 息通知给用户,信息会在不久自动消失,不占用任何屏幕空间. 2.定义一个弹出Toast的出发点,界面有按钮,就让点击按钮 ...

  4. GDB调试一

    http://blog.csdn.net/haoel/article/details/2881 GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行 ...

  5. freemarker 的replace功能

    替换字符串 replace ${s?replace(‘ba’, ‘XY’ )} ${s?replace(‘ba’, ‘XY’ , ‘规则参数’)}将s里的所有的ba替换成xy 规则参数包含: i r ...

  6. MySQL 设置远程访问

    MySQL远程访问,也就是通过ip访问MySQL服务,MySQL对于安全的要求是非常严格的,需要授权. 1.本地访问 GRANT ALL PRIVILEGES ON *.* TO admin@loca ...

  7. 在JasperReport中填充JavaBean(4)

    使用Parameters参数对象传递字符串的示例,本节将演示打印List接口中Userinfo.java实体类的示例,打印的数据源不是来自于Parameters对象,而是JRBeanCollectio ...

  8. MVC过滤器详解和示例

    原文  http://blog.csdn.net/ankeyuan/article/details/29624005 MVC过滤器一共分为四个:ActionFilter(方法过滤器),ResultFi ...

  9. 更改AngularJS的语法解析符号

    // 更改AngularJS的语法解析符号 app.config(function ($interpolateProvider) { $interpolateProvider.startSymbol( ...

  10. win7 下的open live writer代码插件

    open live writer 是博客园官方推荐的编辑器.恰好被它的各种便利吸引住了,于是花点时间研究一下,结果又用了好长时间,因为代码插件一时安装不了.在这里推荐小伙伴们可以先去看看这篇博文:ht ...