Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition

不得不说,这篇论文我看过,虽然理解的很深,这篇论文确实写的也不错,也比较早,但是作为一种科研学习手段,感觉自己看论文再加上博客的辅穿插助,有时候效果还挺不不错,一来学习别人怎么理解的,二来会更快,过程也比较有条理,循序渐进。

论文名:Spiking Deep Convolutional Neural Networks for Energy-Efficient
Object Recognition
中文名:脉冲卷积神经网络做高效的目标识别

 
 

    摘要

    深度神经网络(如CNN)已经在处理复杂的视觉问题(如目标识别)上展示了巨大的潜力。基于SNN的结构展示了使用基于脉冲的神经形态硬件实现低功耗的巨大潜力,这项工作描述了一种将CNN转换为SNN的新方法——可以将CNN映射到基于脉冲的硬件结构上,我们的方法首先裁剪了CNN结构以试它满足SNN的需求,然后以训练未裁剪之前的CNN结构的方法对裁剪后的网络进行训练,最后将学习到的网络权重直接应用到有裁剪后的CNN推出来的SNN结构上。我们在公开可用的DARPA(Defense Advanced Research Projects Agency)Neovision2 Tower 和 CIFAR-10 数据集上做了测试,展现出了和原始CNN结构类似的目标识别精度。我们的SNN实现可以直接映射到基于脉冲的神经形态硬件上,比如正在开发的DARPA SyNAPSE Program。我们的硬件映射分析表明基于脉冲的SNN硬件实现能效要比传统的基于FPGA的CNN实现高两个数量级。

    1. Introduction

    本篇论文按照如下方式组织,Sect. 2首先在2.1节由CNN结构的概述引出了我们的方法,然后2.2节讨论了目前基于发射率的CNN转换为基于脉冲实现的问题和挑战,紧跟着通过我们提出的方法克服了这些挑战(2.3节);Sect. 3描述了将SNN应用在Neovision2和CIFAR-10数据集上的实验结果;Sect. 4描述了将SNN映射到基于脉冲的硬件后的能效分析;Sect. 5和6描述了发现和结论。

    2. Method

    2.1 传统的CNN结构

    在这里插入图片描述
    CNN的网络结构如上图所示,由三个卷积块组成,每一块又包括三个层,第一个层是由一系列卷积核组成的空间卷积层,第二个层一般是tanh(),第三个层是最大池化层;需要注意的是,最后一个块的最后一层没有使用池化层,而是选择了一个全连接层。整个网络使用标准的反向传播算法训练,训练CNN的目标就是调整系统参数。

    2.2 实现脉冲型CNN的挑战

    对于Sect. 1节提出的结构,我们希望将已有的CNN结构设计转换为SNN,最终映射为低功耗的神经形态硬件。将CNN转换为SNN有两种方法,第一种就是直接训练类似CNN结构的SNN,尽管存在一些像STDP的脉冲学习规则以一种自组织、无监督的方式训练SNN,在这方面的研究目前还处于起步阶段,并且还不清楚如何高效训练SNN来实现更高层次的功能;第二个方法就是训练原始的CNN,然后将学习到的权重应用到和训练的CNN结构类似的SNN中。主要的挑战就是在将CNN转换为SNN时分类任务有不可接受的精度损失。事实上,我们观察到转换Fig. 1所示的CNN结构时有精度损失,损失主要来源于一下几个方面:

    1. CNN层的负输出值在SNN中很难精确的表示,负值主要来源于下面的CNN计算:
      a. tanh()的输出范围为-1到1;
      b. 在每个卷积层,每个输出feature map的值都是输入和权重的乘加和再加上偏置的结果,这有可能是个负值;
      c. 预处理后的网络输入也有可能是负的;
    2. 不像在CNN中,在脉冲网络中没有什么好办法表示偏置,每个卷积层的偏置可以是正也可以是负,这在SNN中不容易表示;
    3. Max-pooling需要两层脉冲网络,在CNN中,空间上的最大池化就是在一个区域内求最大值,在SNN中,我们需要两层网络来实现它,横向抑制后紧跟着小区域的池化操作,这个方法需要更多的神经元,而且由于额外的复杂度造成了精度损失(?没明白);

    2.3 提出的脉冲型CNN结构

    我们对2.2节描述的挑战克服的方法就是对CNN的结构做调整,然后将学习到的网络权重应用到和裁剪后的CNN结构类似的脉冲网络上。这些步骤如Fig. 2中所示:
    在这里插入图片描述
    更具体来讲,我们对CNN的网络结构做了如下变化来使得它满足SNN的需求:

    1. 使得所有层的输出置为正:
      a. 在预处理之后加上abs()函数来使得第一层卷积的输入为非负的,当预处理本身就可以得到非负值的 时候这个步骤可以省略;
      b. 将tanh()函数变为 ReLU=max(0, x) 函数;
    2. 将卷积层和全连接层的偏置都置零;
    3. 使用"spatial linear subsampling"替代"spatial max-pooling",空间线性子采样层使用均匀的权重分布使得近邻域图像像素点的权重和为1(这里我理解的意思是做平均池化),使得spatial linear subsampling很容易转换为脉冲域

    遵循以上的步骤,我们将Fig. 1中的CNN转换为Fig. 3中裁剪后的CNN:
    在这里插入图片描述
    裁剪后的CNN到SNN结构的转换是非常直接的,Figure 4在block diagram中展示了转换后的SNN结构,同时Fig. 5展示了相同的SNN的结构的细节。如Fig. 4所示的SNN结构由预处理、脉冲产生、第一个空间卷积和线性子采样层、第二个空间卷积核线性子采样层、第三个空间卷积核线性分类层、脉冲计数组成。与Fig. 3比较,新添加了脉冲产生和计数结构,同时可以观察到SNN结构中没有了ReLU模块,因为ReLU的属性在SNN中由脉冲神经元反映。
    在这里插入图片描述
    在这里插入图片描述
    SNN结构中脉冲神经元的膜电位 V ( t ) V ( t ) V ( t ) V(t)V(t) V(t) V(t)V(t)V(t)PFPGA=25,可以看出来至少高了两个数量级:
    在这里插入图片描述

    • 0
      点赞
    • 6
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值