今年去参加了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)=x

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

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

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 Computing的更多相关文章

  1. 论文笔记《ImageNet Classification with Deep Convolutional Neural Network》

    一.摘要 了解CNN必读的一篇论文,有些东西还是可以了解的. 二.结构 1. Relu的好处: 1.在训练时间上,比tanh和sigmod快,而且BP的时候求导也很容易 2.因为是非饱和函数,所以基本 ...

  2. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  3. ISSCC 2017论文导读 Session 14 Deep Learning Processors,A 2.9TOPS/W Deep Convolutional Neural Network SOC

    最近ISSCC2017大会刚刚举行,看了关于Deep Learning处理器的Session 14,有一些不错的东西,在这里记录一下. A 2.9TOPS/W Deep Convolutional N ...

  4. 论文笔记:(CVPR2019)Relation-Shape Convolutional Neural Network for Point Cloud Analysis

    目录 摘要 一.引言 二.相关工作 基于视图和体素的方法 点云上的深度学习 相关性学习 三.形状意识表示学习 3.1关系-形状卷积 建模 经典CNN的局限性 变换:从关系中学习 通道提升映射 3.2性 ...

  5. 论文翻译:2020_FLGCNN: A novel fully convolutional neural network for end-to-end monaural speech enhancement with utterance-based objective functions

    论文地址:FLGCNN:一种新颖的全卷积神经网络,用于基于话语的目标函数的端到端单耳语音增强 论文代码:https://github.com/LXP-Never/FLGCCRN(非官方复现) 引用格式 ...

  6. 【转载】论文笔记系列-Tree-CNN: A Deep Convolutional Neural Network for Lifelong Learning

    一. 引出主题¶ 深度学习领域一直存在一个比较严重的问题——“灾难性遗忘”,即一旦使用新的数据集去训练已有的模型,该模型将会失去对原数据集识别的能力.为解决这一问题,本文提出了树卷积神经网络,通过先将 ...

  7. 论文解读《ImageNet Classification with Deep Convolutional Neural Networks》

    这篇论文提出了AlexNet,奠定了深度学习在CV领域中的地位. 1. ReLu激活函数 2. Dropout 3. 数据增强 网络的架构如图所示 包含八个学习层:五个卷积神经网络和三个全连接网络,并 ...

  8. 【论文阅读】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

    ShuffleNet: An Extremely Efficient Convolutional Neural Network for MobileDevices

  9. AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...

随机推荐

  1. Codeforces 585E. Present for Vitalik the Philatelist(容斥)

    好题!学习了好多 写法①: 先求出gcd不为1的集合的数量,显然我们可以从大到小枚举计算每种gcd的方案(其实也是容斥),或者可以直接枚举gcd然后容斥(比如最大值是6就用2^cnt[2]-1+3^c ...

  2. 【bzoj4182】shopping

    Portal --> bzoj4182 Solution 感天动地..几百年没在场上写点分了的感觉== (然后就写了很久qwq) ​ 不过感觉自己想这道题怎么颇有运气成分==大概是:诶是不是快乐 ...

  3. 【agc008F】Black Radius

    Portal --> agc008F Solution  这题好神仙啊qwq疯狂orz看懂日文题解的sjk太强啦qwq ​   ​  首先我们要统计的东西,是一个涂黑的连通块,然后我们考虑找一个 ...

  4. Linux系统之路——如何在CentOS7.2安装R和RStudio(Server)

    使用ubuntu的小伙伴们直接使用命令sudo apt-get install r-base-dev或者r-base搞定.然而对于使用centos的我却一直卡在安装这一步,十分的悲催,只有羡慕的份,但 ...

  5. libevent学习笔记(参考libevent深度剖析)

    最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的<Libevent源码深度剖析>, 参考资料: http://blog.csdn.net/spark ...

  6. 「Python」python与微信

    pip3 install itchat 主要用到的方法: itchat.login() 微信扫描二维码登录 itchat.get_friends() 返回完整的好友列表,每个好友为一个字典, 其中第一 ...

  7. jquery validate ajax 验证重复的2种方法

    转载自:http://blog.51yip.com/jsjquery/1484.html jquery validate 经过这种多年的改良,已经很完善了.它能满足80%的验证需要,如果validat ...

  8. LeetCode-Insertion Sort List[AC源码]

    package com.lw.leet5; /** * @ClassName:Solution * @Description: * Insertion Sort List * Sort a linke ...

  9. Spring使用注解方式就行事务管理

    使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间<beans xmlns="http://www.springframework.org/schema/b ...

  10. 817D. Imbalanced Array 预处理最大最小 思维

    LINK 题意:给出n个数,求所有子区间的最大最小值差的和. 思路:过去有道题目是求所有子区间的最大值或最小值,这题类似,我们对每一个数计算其作为最大值得次数和最小值的次数,这两个值求法类似,都是比左 ...