SC-DCNN(1)

论文:SC-DCNN: Highly-Scalable Deep Convolutional Neural Network using Stochastic Computing
链接:https://dl.acm.org/citation.cfm?id=3037746

1、Abstract

最近,随着物联网以及可穿戴设备的流行,将深度卷积网络 (DCNN) 应用到嵌入式系统中变得越来越具有吸引力。但是当前,都是基于软件的DCNN需要高性能的服务器,从而限制了深度学习网络在移动物联网设备中的广泛应用。为了克服这个困难,很多研究人员考虑使用 GPU、FPGA、ASIC 研究可并行的特定的DCNN加速器。
在本篇论文中,利用随机计算的低功耗的特性,采用自底向上的设计方法来设计一种基于硬件的DCNN——SC-DCNN。首先,为DCNN中的基本运算设计对应的功能模块,包括:内积(卷积),池化和激活函数;然后,将每个功能模块连接起来,构成一个完整的特征提取模块,然后由于每个基本运算有多种实现的功能模块,因此特征提取模块也会有多种 ,并且我们将特征提取模块进行整体的优化。最后,针对神经网络中的权重参数的存储也提出一种高效的存储方式。将上述的各个部分结合在一起进行整体的优化——最小化电路面积和能耗的同时保持精确度。

2、Introduction

在该论文中,我们是将随机计算(SC)和神经网络结合在一起,充分利用了SC能够提供高能效和可扩展性的同时保证硬件面积小的特点。在SC中,利用一串比特序列来表示一个概率值,因此核心的算术运算,如加法,乘法都可以使用与门和多路选择器来实现。由于卷积神经网络的基本就是加法和乘法,所以SC的这些特点使得它具有和神经网络结合的潜力,并且保证低功耗和更小的电路面积。但是由于CNN中存在大量的加法和乘法,这也导致SC设计空间较大,所以也就需要我们在Design space中寻找一种高效的设计方式。
下面是这篇文章所做出的主要贡献:

1、Applying SC to DCNNs ,主要由于两点:SC具有能够提供高能效和可扩展性的同时保证较小的电路面积的特点;另外,由于IOT的快速发展,神经网络应用移动物联网设备的需求越来越多。

2、Basic function blocks and hardware-oriented max
pooling
,提出了一种基于SC的特殊的面向硬件的最大池化模块。另外,实现同一运算的不同类型的功能模块的利弊==(pros and cons)==也被研究,从而便于整体的优化。

3、Joint optimizations for feature extraction blocks,提出四种特征提取模块的优化设计。对这四种特征提取模块里的各个小模块进行整体优化,包括输入比特流的长度,功能模块的结构以及功能模块的兼容性。

4、Weight storage schemes,为了存储各层神经网络的权重参数,并且减少存储所花费的功耗和电路面积,提出了一种结合综合技术的参数存储结构,包括SRAM共享,高效存储方式,以及lay-wise 权重存储优化。

5、Overall SC-DCNN optimization, 该部分是对整个神经网络的硬件实现进行优化。该优化是考虑到:不同层的不精确度对整体神经网络的不精确度的影响是不同的。从而适当调整不同神经网络层的结构。

3、Overview of DCNN Architecture and Stochastic Computing

3.1 DCNN Architecture Overview

在卷积神经网络中包含三种类型的网络层:卷积层,池化层,全连接层。其中,卷积层它的运算是利用同一个filter和输入的图像矩阵每一个感受野矩阵进行内积得到对应的feature map,从而提取图像特征,从运算也可以看出,卷积层是参数共享的,即feature map每一个元素对应的同一组权重参数(filter),并且feature map中的每一个“神经元”是和前一卷积层的部分“神经元”相连接的。因此运算实质是一系列的乘法然后再求和。
接着是进行池化操作。一般来说池化操作分为两种:最大池化和平均池化。顾名思义,最大池化就是在一个池化区域内找出最大的那个元素,而平均池化是在一个池化区域内求出平均值。因此池化操作也被称为下采样操作,能够有效减少前一层卷积层输出的参数。池化层输出的矩阵会交给激活函数**(activation function)继续处理,目的是为继续去除一些无用的参数,常用的激活函数包括:ReLU,Sigmoid函数,hyperbolic tangent函数,在此论文中使用的是 hyperbolic tangent函数
然后是
全连接层**。这一层的基本操作其实和前面的卷积层操作基本是一样,不过它的区别是全连接,即后一层的每一个元素是和前一层的所有元素相连接的,由前一层的所有元素乘上系数相加得到的。
最后还会有一个损失层(训练网络时使用的),表示的是输出和期望输出的结果之间的差距。
神经元的概念在软件和算法邻域被广泛的应用。在该篇论文中,神经元可以看作是一系列的基本操作。每个神经元的基本操作在前面已经描述:内积,池化和激活函数。另外在该篇文章中,每一个基本操作的实现都构成一个功能模块,而由内积功能模块,池化功能模块,激活函数功能模块构成一个特征提取功能模块
在这里插入图片描述
在这里插入图片描述

3.2、Stochastic Computing

就像前面所描述的SC的特点,能够利用简单的电路实现复杂的运算,所以可以很有效减小电路所占的面积。另外,由于SC具有 Progressive-precision 的特点,所以通过增长输入随机序列的长度,可以提高随机计算的精度,但是呢,随机序列的长度的提升会导致电路损耗增加。因此,在电路精度(accuracy)和电路损耗之间需要做一个trade-off
另外,这由于SC大大减小了电路面积,所以能够产生更大的设计空间。我们需要在这个design-space中,将电路面积和电路损耗,延时和并行度进行一个trade-off。下面介绍一下,DCNN中每个神经元需要的算数运算,如何利用SC实现:

Multiplication:这里就不赘述了,单边编码方式中使用AND 门,双边编码方式中使用XNOR 实现。

Addition
(1) OR:但是会产生误差,原因是逻辑1和逻辑1进行OR运算得到的仍是逻辑1;
(2)Multiplexer:这里也会产生误差,原因是最终输出的每个输入代表的概率值的平均值,因此会有误差;
(2)APC:主要介绍一下APC (Accumulative Parallel Counter) ,如下图:
在这里插入图片描述
APC的数学原理其实和随机计算的基本原理类似,随机计算之所以能用一串长度的随机序列表示概率值,因为它遵循的是伯努利大数定理;而APC遵循的是切比雪夫大数定理(可以看我的这篇博客:https://blog.csdn.net/qq_34037046/article/details/84033767)
它输出的是二进制数表示,描述的是所有输入序列代表的概率值的和。

Hyperbolic Tangent (tanh):针对这种复杂函数,利用k个状态的FSM(Finite State Machine)实现。输入和输出都是采用的二进制编码方式,输出是: t a n h ( k 2 x ) = 2 S t a n h ( k , x ) − 1 tanh(\frac{k}{2}x)=2Stanh(k,x)-1 tanh(2kx)=2Stanh(k,x)1

3.3 Application-level vs. Hardware Accuracy

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值