论文名: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实现高两个数量级。
本篇论文按照如下方式组织,Sect. 2首先在2.1节由CNN结构的概述引出了我们的方法,然后2.2节讨论了目前基于发射率的CNN转换为基于脉冲实现的问题和挑战,紧跟着通过我们提出的方法克服了这些挑战(2.3节);Sect. 3描述了将SNN应用在Neovision2和CIFAR-10数据集上的实验结果;Sect. 4描述了将SNN映射到基于脉冲的硬件后的能效分析;Sect. 5和6描述了发现和结论。
CNN的网络结构如上图所示,由三个卷积块组成,每一块又包括三个层,第一个层是由一系列卷积核组成的空间卷积层,第二个层一般是tanh(),第三个层是最大池化层;需要注意的是,最后一个块的最后一层没有使用池化层,而是选择了一个全连接层。整个网络使用标准的反向传播算法训练,训练CNN的目标就是调整系统参数。
对于Sect. 1节提出的结构,我们希望将已有的CNN结构设计转换为SNN,最终映射为低功耗的神经形态硬件。将CNN转换为SNN有两种方法,第一种就是直接训练类似CNN结构的SNN,尽管存在一些像STDP的脉冲学习规则以一种自组织、无监督的方式训练SNN,在这方面的研究目前还处于起步阶段,并且还不清楚如何高效训练SNN来实现更高层次的功能;第二个方法就是训练原始的CNN,然后将学习到的权重应用到和训练的CNN结构类似的SNN中。主要的挑战就是在将CNN转换为SNN时分类任务有不可接受的精度损失。事实上,我们观察到转换Fig. 1所示的CNN结构时有精度损失,损失主要来源于一下几个方面:
我们对2.2节描述的挑战克服的方法就是对CNN的结构做调整,然后将学习到的网络权重应用到和裁剪后的CNN结构类似的脉冲网络上。这些步骤如Fig. 2中所示:
更具体来讲,我们对CNN的网络结构做了如下变化来使得它满足SNN的需求:
遵循以上的步骤,我们将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)根据 integrate-and-fire 神经元模型导出的下面的等式在每个time step更新:
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] 的范围,脉冲计数对所有类别神经元发射的脉冲进行计数(时间是从输入图片被送入网络开始的整个时间周期),然后发射脉冲最多的神经元对应的就是最终的输出类别。
我们选取了Tower数据集,它总共有6个类别:Car、Cyclist、Bus、Person、Truck和Nontarget,是一个简单的分类任务数据集。我们对CNN、裁剪后的CNN和由裁剪后的CNN转换而来的SNN在测试集上做了评估。对于SNN结构,在我们将每一张测试图片送入SNN之前,我们首先将所有神经元的膜电位复位到0,并且将脉冲计数清零。SNN的仿真是通过MATLAB,1ms的time step,共100个steps。table 1展示了仿真用到的不同泄露值和发射率阈值的组合,这些参数对于同一层的所有神经元都是相同的:
table 2、3、4、5、6、7展示了CNN、裁剪后的CNN以及裁剪后的SNN实现的测试结果对比:
我们假设一个脉冲活动消耗 α \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个目标,那么总的功耗需求为:
Table 9展示了SNN结构和CNN结构硬件实现的功耗对比,我们衡量 P F P G A = 25 P_{FPGA}=25 PFPGA=25,可以看出来至少高了两个数量级: