今年去参加了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. 复习JavaScript随手记

    数据类型 基本类型 string number boolean undefined number类型,包含整数浮点数 NaN和自己都不相等,涉及NaN的计算结果都是NaN isNaN()函数用于判断一 ...

  2. win7右键新建文件夹不见了

    http://zhidao.baidu.com/question/175786636169796084.html 看下注册表文件:reg add "HKEY_CLASSES_ROOT\Dir ...

  3. Codeforces Round #417 (Div. 2)A B C E 模拟 枚举 二分 阶梯博弈

    A. Sagheer and Crossroads time limit per test 1 second memory limit per test 256 megabytes input sta ...

  4. mac命令行快捷键

    其实不想每次输入host和user,可以在 ~/.ssh/config文件写上配置alias信息,以后ssh的时候根据alias即可.如: Host alias-name HostName ip_ad ...

  5. (转) 使用vivado创建工程 3

    Create a Hello World application In this experiment we will use Xilinx SDK to create a simple Hello ...

  6. Unix处理目标文件的工具

  7. Linux中系统日志

    系统日志的默认路径是:/var/log 下面是几个重要的日志文件的路径及其包含的信息: /var/log/syslog:它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统 ...

  8. 课程设计——利用信号量实现哲学家进餐问题(JAVA)

    package cn.Douzi.PhiEat; /** * 表示筷子的类 */ public class Chopstick{ /** * 表示筷子是否可用 */ private volatile ...

  9. .net core 中 identity server 4 之术语

    id4的职责: 保护你的资源 通过本地 账户库(Account Store)或者外部身份提供其 认证用户 提供Session管理以及SSO 管理和认证客户端 发行身份及访问Token给客户端 验证To ...

  10. WPF集合控件实现分隔符(ItemsControl Separator)

    在WPF的集合控件中常常需要在每一个集合项之间插入一个分隔符样式,但是WPF的ItemsControl没有相关功能的直接实现,所以只能考虑曲线救国,经过研究,大概想到了以下两种实现方式. 先写出Ite ...