今年去参加了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. CF891E [数学题]

    1.答案=初始乘积-最终乘积的期望.然后直接dp+ntt是O(nklogk) 2.考虑展开式子ans=sum(a[i]-b[i]),大概感受一下未知数个数相同的项系数相同,问题在于如何求系数 3.没思 ...

  2. 【CF375C】Circling Round Treasures

    Portal --> CF375C Solution 一个有趣的事情:题目中有很大的篇幅在介绍如何判断一个位置在不在所围的多边形中 那么..给了方法当然就是要用啊 ​ 首先是不能包含\('B'\ ...

  3. 网络编程----socketserver多并发实现、FTP上传多并发、udp协议套接字多并发

    一.socketserver多并发                                                              基于tcp的套接字,关键就是两个循环,一个 ...

  4. ps裁剪一寸照片及换背景色

    1.打开ps,把图片拖进去编辑 2.选魔棒工具,在途中选中背景色,鼠标右键,选选择反向 效果如下: 3.按 快捷键 ctrl + j  可以在右侧看到新建出了一个图层 4.选文件,新建,填写长宽,如果 ...

  5. ros error : c++: error: $(catkin_LIBRARIES): 没有那个文件或目录

    卧槽,真是........................瞎眼了. 一个半小时才找出错误来..... c++: error: $(catkin_LIBRARIES): 没有那个文件或目录 Oh my ...

  6. EA画时序图初试

    1.步骤: 1. 新建一个项目: 2. Use Case Model右键-->添加图-->左边选择UML Behavioral,右边选择Sequence: 3. 选择工具栏中的工具,点击工 ...

  7. hadoop 安装教程

    本教程由厦门大学数据库实验室 / 给力星出品,转载请注明.本教程适合于原生 Hadoop 2,包括 Hadoop 2.6.0, Hadoop 2.7.1 等版本,主要参考了官方安装教程,步骤详细,辅以 ...

  8. OpenCV---图像直方图

    一:直方图的直接使用 from matplotlib import pyplot as plt def plot_demo(image): print(image.ravel()) plt.hist( ...

  9. fastreport中文乱码问题

    fastreport的中文乱码问题,确实让人头疼,我使用的是delphi6+fastrepport4.7,在4.7版本中,主要表现在以下几种情况. 预览不乱码,保存乱码. 简体不乱码,繁体乱码. 简体 ...

  10. 重构改善既有代码设计--重构手法11:Move Field (搬移字段)

    你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段.        动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系 ...