今年去参加了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. BZOJ2005 能量汇集 【gcd求和】

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MB Submit: 4368  Solved: 2607 [Submit][Sta ...

  2. php配置说明

    1上传文件限制配置 post_max_size = 200M upload_max_file_size = 200M

  3. Yii2 数据库基本操作

    //1.简单查询  $admin=Admin::model()->findAll($condition,$params);  $admin=Admin::model()->findAll( ...

  4. 抓包 ------ Wireshark 的使用

    Wireshark的数据包详情窗口,如果是用中括号[]括起来的,表示注释,在数据包中不占字节 发了一个包,很久没有收到应答后,会重发包,在Wireshark抓包工具提示“[TCP Retransmis ...

  5. 给阿里云ECS主机添加IPV6地址

    阿里云公开的CentOS镜像将IPv6支持给去掉了,需要加载相关模块.通过HE的tunnelbroker开启IPv6隧道使国内VPS支持IPv6地址.   1. vim /etc/modprobe.d ...

  6. 「七天自制PHP框架」第一天:路由与控制器

    我们为什么要使用路由? 原因1:一个更漂亮的URI 1.URI的改进 刚刚开始学PHP时,我们一定写过blog.php?id=1之类的URI,使用GET方式获取参数.这样的URI有两个缺点,一是容易被 ...

  7. Shell编程——vim常用命令

    [vim]工作模式切换:    在普通模式下输入 i(插入).c(修改).o(另起一行) 命令时进入编辑模式:按 esc 键退回到普通模式.    在普通模式下输入冒号(:)可以进入命令模式.输入完命 ...

  8. LintCode 532: Reverse Pairs

    LintCode 35: Reverse Linked List 题目描述 翻转一个链表. 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1 ...

  9. Xcode变量概览-summary

    问题描述 在Xcode中断点调试时,鼠标停留在变量上,就能看到变量的信息.但对于自定义对象,通常Xcode提供的直接信息非常有限,像这样 想要了解这个对象具体的内容,需要展开左边的箭头 当开发者想要知 ...

  10. APP爬虫之Appium使用

    一.安装环境 Appium安装(windows版) 一.安装node.js 1.到官网下载node.js:https://nodejs.org/en/download/ 2.获取到安装文件后,直接双击 ...