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结构

Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第1张图片
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中所示:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第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:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第3张图片
裁剪后的CNN到SNN结构的转换是非常直接的,Figure 4在block diagram中展示了转换后的SNN结构,同时Fig. 5展示了相同的SNN的结构的细节。如Fig. 4所示的SNN结构由预处理、脉冲产生、第一个空间卷积和线性子采样层、第二个空间卷积核线性子采样层、第三个空间卷积核线性分类层、脉冲计数组成。与Fig. 3比较,新添加了脉冲产生和计数结构,同时可以观察到SNN结构中没有了ReLU模块,因为ReLU的属性在SNN中由脉冲神经元反映。
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第4张图片
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第5张图片
SNN结构中脉冲神经元的膜电位 V ( t ) V(t) V(t)根据 integrate-and-fire 神经元模型导出的下面的等式在每个time step更新:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第6张图片
L是泄露参数(常量), X ( t ) X(t) X(t)是与该神经元连接的所有突触在t时刻的输入和。当 V ( t ) V(t) V(t)超过阈值 θ \theta θ,神经元发射一个脉冲,它的膜电位 V ( t ) V(t) V(t)复位为0。膜电位V不允许低于它的静息电位 V m i n V_{min} Vmin(通常被设置为0),但也可以改变为负值。我们实验中用到的参数在Sect. 3的 Table 1可以看到。

举个例子,对于Fig. 5中第一个卷积层的一个feature map的神经元(i, j)来说, X ( t ) X(t) X(t)可以被定义为:
在这里插入图片描述
这里的 A p + i , q + j ( t ) A_{p+i,q+j}(t) Ap+i,q+j(t)是来自前层的输入脉冲(0或者1), K p q K_{pq} Kpq是被同一个map中的神经元共享的 7x7 的卷积核权重。

等式(1)所描述的IF模型是一个简单的模型并且已经在很多神经形态电路设计中实现,因此如Fig. 4和5所示SNN结构理论上也可以通过这些类型的神经形态硬件实现。我们的方法不局限于等式 (1)描述的IF模型。脉冲产生层经常定义为: I i j k ( k = 1 , 2 , 3 ) I_{ijk}(k=1,2,3) Iijk(k=1,2,3)可以看作是脉冲产生层的输入,在t时刻,在第k个 image map 的神经元(i,j) 如果满足 r a n d ( ) < c I i j k rand()<cI_{ijk} rand()<cIijk则发射一个脉冲,否则不发射,这里的 r a n d ( ) rand() rand()是一个随机发生器——(0.0,1.0)之间的均匀分布,c是一个对脉冲产生频率的缩放量。举个例子,我们一般去 c = 1 / 3 c=1/3 c=1/3,RGB图片的输入先被正则化到 [0.0, 1.0] 的范围,脉冲计数对所有类别神经元发射的脉冲进行计数(时间是从输入图片被送入网络开始的整个时间周期),然后发射脉冲最多的神经元对应的就是最终的输出类别。

3 Experiments

3.1 Neovision2 Tower Dataset

我们选取了Tower数据集,它总共有6个类别:Car、Cyclist、Bus、Person、Truck和Nontarget,是一个简单的分类任务数据集。我们对CNN、裁剪后的CNN和由裁剪后的CNN转换而来的SNN在测试集上做了评估。对于SNN结构,在我们将每一张测试图片送入SNN之前,我们首先将所有神经元的膜电位复位到0,并且将脉冲计数清零。SNN的仿真是通过MATLAB,1ms的time step,共100个steps。table 1展示了仿真用到的不同泄露值和发射率阈值的组合,这些参数对于同一层的所有神经元都是相同的:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第7张图片
table 2、3、4、5、6、7展示了CNN、裁剪后的CNN以及裁剪后的SNN实现的测试结果对比:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第8张图片
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第9张图片
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第10张图片
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第11张图片
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第12张图片

3.2 CIFAR-10数据集

Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第13张图片
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第14张图片

4 映射到神经形态硬件上的能效分析

我们假设一个脉冲活动消耗 α \alpha α焦耳的能量,忽略脉冲是由前突触传递还是后突触产生,对于Figs. 3和4中展示了采样SNN结构,我们衡量平均有 5 × 1 0 5 5\times 10^{5} 5×105个突触前脉冲和 2 × 1 0 7 2 \times 10^{7} 2×107个突触后脉冲,因此处理一张图片的一个目标需要的能耗为:
在这里插入图片描述

为了评估SNN设别的整体需求,我们假设每秒要处理30帧,每帧有5个目标,那么总的功耗需求为:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第15张图片
Table 9展示了SNN结构和CNN结构硬件实现的功耗对比,我们衡量 P F P G A = 25 P_{FPGA}=25 PFPGA=25,可以看出来至少高了两个数量级:
Spiking Deep Convolutional Neural Networks for Energy-Efficient Object Recognition_第16张图片

你可能感兴趣的:(SNN(Spiking,Neural,Network,脉冲神经网络),脉冲神经网络,ANN到SNN的转换,Spiking,Deep,Convolutional,Neural,N)