今年去参加了ASPLOS 2017大会,这个会议总体来说我感觉偏系统和偏软一点,涉及硬件的相对少一些,对我这个喜欢算法以及硬件架构的菜鸟来说并不算非常契合。中间记录了几篇相对比较有趣的paper,今天简单写一篇。

SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing
单位作者:

我们知道在神经网络计算中,最主要的计算就是乘加,本篇重点就是解释了什么是Stochastic Computing(随机计算),以及怎么用逻辑电路来实现Stochastic Computing。

Neural Network计算背景

这一块就不多说了,作者毕竟是在做一些早期研究,先解决有无问题,所以在MNIST这样规模的数据集上做的神经网络,可以转化为Stochastic Computing。(不过我要说一句,MNIST数据毕竟比较简单,用LENET这样规模的网络就可以搞定,实际上,其他研究中已经把LENET变成Binary的网络,识别准确率完全不成问题,因此可以用Stochastic Computing似乎也是顺理成章,但是其推广性就有待商榷了。事实上,在本次ASPLOS上,在本篇oral的提问环节,就有一个MM质疑了作者的Stochastic Computing只在这么小的网络上成功,完全不能说服大家是否在大网络上也可以采用,不然意义就不大了。我个人附议。)

Stochastic Computing定义与表示

Stochastic Computing (SC) is a paradigm that represents a probabilistic number by counting the number of ones in a bit-stream.

作者给出了两种形式的表示形式:

(1)可以表示[0,1]数据的unipolar encoding:

P(X=1)=xP(X=1)=x

比如0100110100就表示P(X = 1) = 4=10 = 0.4

(2)可以表示[-1,1]数据的bipolar encoding:

P(X=1)=(x+1)/2,P(X=1)=(x+1)/2,

所以,0.4 可以表示为1011011101, P(X = 1) = (0.4 + 1)/2 = 7/10

这样看似乎非常简单,但是有几点需要注意:

  1. SC表示的数据不是唯一的,比如上面第一种,0100110100和1111000000表示都是0.4,因为SC只考虑bit stream中1的比例,而不考虑位置;
  2. SC的数据不是固定的,而是通过stochastic number generators生成的,因此也更加增加了不确定性;
  3. 表示同一个数据可以用不同的bit length;

实际上,SC计算是有误差的,不精确的,其准确率受到stochastic number generators以及bit length的影响很大。

Stochastic Computing计算乘、加

乘法Multiplication.

一般的数字电路二进制fix point计算中,乘法的代价是远大于加法的,而SC的一个优势就是,乘法实现非常容易。

如上图,针对两种encoding,都只要非常简单的门电路就可以完成计算——unipolar是用AND,unipolar是用XNOR。(因为A和B是不确定的,所以计算A*B的结果也是不完全确定的,比如(a)情况,如果变成11110000 * 11001111的话,计算出来就是2/8。当然,结果还是在正确的范围之内的,所以要球NN可以容忍这样的计算误差,而NN也确实有这样的容错性,所以NN确实是SC很好的一个应用场景,希望以后可以在计算理论上再有突破)。

加法Addition.

加法要稍微复杂一点,但也比一般的逻辑运算单元简单很多。论文中介绍了以下四种加法器的实现。、

  • (a)OR门,这个是最简单的实现,但是相对来说误差较大,因为1 OR 1 = 1,没有办法捕捉进位的操作。
  • (b)MUX多路选择器,这个方法是最受欢迎的,实现也很简单。只要从输入中选取一个就可以了。原理如下:c = 2P(C = 1) - 1 = 2(1/2P(A = 1) + 1/2P(B = 1)) - 1 = 1/2[2P(A = 1) - 1 + 2P(B = 1) - 1] =
    1/2(a+b).意思是说,反过来看,如果要计算a+b,是要把a和b的bipolar encoding中挑一个就可以了(即1/2P(A = 1) + 1/2P(B = 1),这一句看起来像取平均值,但是如果有很多个输入A,B,C…,最后平均值就差不多用其中一个数值来代替),然后这个选出来的bipolar encoding所表示的c正好就是a+b的1/2,作者另外没有再讲,如何取消这个1/2的作用呢?MUX的结果算出的c再*2(<<1),得到a+b,在通过随机数生成器生成出对应的bipolar encoding。如果是3个数据a,b,d,就是3选1,然后表示出来的数据是1/3(a+b+d),随机数生成部分只要最后做一次就可以了,理论上多少个数据相加都是一次。
  • (c)Approximate parallel counter (APC),计数input的1个数,然后表示成一个binary number。
  • (d)把一个数据表示成两部分:符号部分和数值部分,是另外一种随机数的表示方法,

实验部分

这一块只贴一个图,大家有兴趣的去下载原文看一下吧:

可以看到,bit stream还是比较长的,这个也是另外一个问题,要保持较高的精度,需要较长的bit,这样带来的开销也比较大。好在加法的实现是多输入的。


总的来说,SC要实际可用还有很长的路,不只是实现上的,我认为更多是在理论上需要突破。如果只是来和现有的普通精确的二进制逻辑运算对比,比如标准的乘法加法,那么优势看来并不大。但是如果一个网络在构建结构以及训练的时候,就是用随机计算单元的,那可能其价值会显著提高。

参考资料

[1] SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing, ASPLOS 2017.

【转】ASPLOS'17论文导读——SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Comput相关推荐

  1. 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (3/3)

    文章目录 6. Results 6.1. Qualitative Evaluations 7. Discussion References 6. Results Our results on ILSV ...

  2. 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (1/3)

    文章目录 Authors and Publishment Authors Bibtex Abstract 1. Introduction 2. The Dataset Authors and Publ ...

  3. 【农业害虫识别论文一】Crop pest classification based on deep convolutional neural network and transfer learning

    本论文发布于2019年,主要基于三个数据集进行农业害虫的识别.文章不是简单的翻译,而是类似自己的读书笔记,基本记录了下,做后续回顾所用.望各位看官不要吐槽 哈哈! 论文题目 Crop pest cla ...

  4. 论文研读 —— 6. ImageNet Classification with Deep Convolutional Neural Networks (2/3)

    文章目录 3. The Architecture 3.1. ReLU Nonlinearity 3.2. Training on Multiple GPUs 3.3. Local Response N ...

  5. 经典DL论文研读(part4)--ImageNet Classification with Deep Convolutional Neural Networks

    学习笔记,仅供参考,有错必纠 文章目录 ImageNet Classification with Deep Convolutional Neural Networks 摘要 Introduction ...

  6. 论文翻译:ImageNet Classification with Deep Convolutional nerual network

    这篇文章是我大四毕设的翻译外文文献,第一次翻译,而且以前也没有接触过深度学习方面的内容,很多词语表述还存在问题,有待修改. 基于深度卷积神经网络的图片网络分类 Alex Krizhevsky Univ ...

  7. 论文笔记 - 《ImageNet Classification with Deep Convolutional Neural Networks》 精典

    基于卷积神经网络的图像分类(经典网络) 作者:Alex Krizhevsky(论文中第一作者的名字为网络名字AlexNet) 单位:加拿大多伦多大学 发表会议时间:NIPS 2012 (NIPS:机器 ...

  8. AlexNet论文翻译《ImageNet Classification with Deep Convolutional Neural Networks》

    摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC-2010竞赛的120万高分辨率的图像分到1000不同的类别中.在测试数据上,我们得到了top-1 37.5%, top-5 1 ...

  9. 【医学+深度论文:F16】2015 EMBC Glaucoma detection based on deep convolutional neural network

    16 2015 EMBC Glaucoma detection based on deep convolutional neural network Method : 分类 Dataset :ORIG ...

最新文章

  1. Vagrant安装指南
  2. PostgreSQL-数据复制
  3. oracle游标遍历的三种方式
  4. fiddler设置https抓包
  5. JDK8HashMap的扩容核心解读,尾插法
  6. 电影混混天团经典的台词
  7. 在Winform中使用MoonPdfLib(Wpf控件)
  8. cad化气路图_气路图符号大全
  9. 基于阿里云服务器使用kubeadm搭建k8s集群
  10. c语言知识点总结300字,大二学年自我总结300字 .doc
  11. 【Go】Go 语言运算符及其优先级
  12. Chartboost ANE 使用教程(Chartboost ANE Tutorial)
  13. oracle分区表备份恢复
  14. DOTween的使用(一) DOTween实现代码延时执行 + DOTween.Sequence的(队列)的简单介绍
  15. 超实用的几个编程学习公众号
  16. 7-238 整数转换为字符串7-242 母牛问题7-243 快速幂
  17. linux路由器 性能测试工具,使用iperf测试路由器性能
  18. Adobe Acrobat 虚拟打印机安装方法
  19. Android studio 安装配置SDK
  20. 信息论Matlab仿真——信息量的计算

热门文章

  1. STL技术——STL概述和入门
  2. java 对音频文件降噪_如何有效的对录音文件进行降噪处理?
  3. 计算机相关专业毕业论文选题推荐
  4. VC6与Office2007冲突解决方案之微软官方+实际解决by xmagicx
  5. 基于BIM(Revit平台)的铝模设计软件产品
  6. 我最近开发的彩票缩水软件(J2ME)
  7. lenovo thinkpad x1 carbon 无法打开bios解决方法
  8. Unix/Linux编程:外部数据表示XDR
  9. CJL.0.1.min.js 的是一个什么JS库
  10. AcWing 220. 最大公约数 (欧拉函数)