论文名:Fast-Classifying, High-Accuracy Spiking Deep Networks Through Weight and Threshold Balancing
中文名:权重、阈值权衡实现快速分类且高精度的脉冲神经网络
例如ConvNets(卷积神经网络)和 DBNs(深度信念网络)代表了最先进的机器学习和计算机视觉问题。为了克服深度网络的大计算量成本,脉冲神经网络最近被提出来了,并且提出了可用于脉冲神经网络的特殊硬件,然而,由于ANNs(模拟神经网络)没有时间信息,所以转换为稀疏的脉冲发射型、事件驱动的SNNs会有精度损失
。这里我们分析了脉冲神经元的发射率和阈值这些参数的选择对ANNs转换为SNNs的影响,我们展示了一组优化技术来最小化转换过程中的性能损失。这些技术产生的网络优于之前在MNIST数据集上的表现最好的网络,这里的许多网络都可以在20ms的仿真时间后接近最好的性能,这些技术包括在训练期间使用修正后的零偏置的线性单元(如ReLUs)、使用一种新的权重正则化方法帮助正则化发射率。我们将ANNs转换为SNNs的方法可以实现低延迟、高精度,与之前的方法相比,它在没有增加训练时间的同时提高了性能。
深度神经网络目前在自然图片分类上已经是最成功的结构,它们已经在诸如手写数字识别、场景标注、CIFAR数据集和ImageNet数据集这样的问题上实现了巨大的成功。但是伴随的是网络结构越来越深,对于实时检测应用来说提出了新的挑战——需要做特殊的硬件加速器来加速网络推理的速度。脉冲神经网络(SNNs)对于这种加速来说是一个重要的候选方法,在本篇论文中,我们将介绍对于深度脉冲神经网络的新的优化方法,它可以使得脉冲神经网络获得比之前的脉冲方法更高的性能,同时实现了低延迟、更少的操作。
在最近这些年,脉冲神经网络已经变成了一个相当活跃的研究方向。一方面的原因就是被构建更具有生物学意义的神经网络所推动,另一方面就是大规模神经形态计算平台的改进和提升,它是在特定的模拟或者数字硬件上优化类脑的脉冲计算。与在传统CPUs或GPUs上跑神经网络相比,神经形态平台的功耗可能要低好几个数量级,因为它允许分布式和异步基于事件驱动的计算,因此提高了可扩展性和减少了延迟。而进一步的来讲,事件驱动型神经形态系统将计算资源聚焦于网络目前活跃的部分,高效了节省了其他部分的功耗,因此在这样的平台上跑的大规模深度神经网络是很有吸引力的,可能会支持在线学习。这些平台理想地被来自神经形态传感器的输入所驱动,产生稀疏、一帧一帧的、精确定时的事件流,与基于帧的方法相比减少了延时。
脉冲神经网络的训练通常不使用基于脉冲的学习规则,而是先用反向传播训练一个深度神经网络ANNs,然后将这个基于发射率的模型转换为由简单的脉冲神经元组成的模型。理论已经证明了SNNs至少具有和ANNs相当的计算能力,但是实际上很难提出等效的方法来证明这点。目前的一种方法就是由“Realtime classification and sensor fusion with a spiking deep belief network”提出的方法训练脉冲DBNs网络——使用LIF(Leaky integrate-and-Fire)神经元的Siegert的平均发射率近似激活值。另一种方法,在“Mapping from frame-driven to framefree event-driven vision systems by low-rate rate coding and coincidence processing-application to feedforward convnets”这篇论文中提到的,需要对脉冲神经网络中的泄露和绝对不应期的参数做微调。这两种情况下,脉冲神经网络都会在精度上有一定的损失。
最近,“Spiking deep convolutional neural networks for energy-efficient object recognition”提出了一种转换的方法,它的表现比以前的方法都好,因为它将脉冲和非脉冲网络之间的特征差异考虑了。主要挑战就是对于脉冲神经元中的负值和偏置的表示,这个通过使用修正的线性单元(ReLUs)和将偏置设为零解决了。同时,卷积网络的最大池化操作被空间线性子采样替代,同样地转换结果也有很小的损失。在这篇工作中,我们展示了这种微小损失的来源,并且展示了优化的几种工具。我们发现如果SNNs以正确的方式驱动,接近无损的转换是可能的,并且还可以进行非常快速的分类仅基于少量输出峰值。
在全连接前馈神经网络(FCNs)中,前层的所有神经元被完全连接到下层中,而没有层内的连接。目前的竞争结果重新引起了对这种结果的兴趣。对FCNs中的权重初始化是一个好的方案,它保留了错误梯度,正则化网络来防止过拟合,其在标准数据集上的性能很高。另外最近的提出的Dropout和修正后的线性单元(ReLUs)也对结果比较好,ReLUs是一种非线性的激活函数,它被应用到输入的权重和,可以被描述为:
x i x_{i} xi是神经元i的激活值, w i j w_{ij} wij是前层的神经元j和本层的神经元i的连接权重, x j x_{j} xj是前层神经元j的输出激活值。然后通过反向传播算法更新网络最小化损失函数。
ConvNets是一个多层的前馈结构,特征检测器采用的是简单的卷积核。通常来讲,卷积神经网络是由卷积和空间下采样层交替组成。这里的卷积层产生了一组特征图,卷积计算如下:
卷积核用 { W k , k = 1... n } \left \{ W^{k},k=1...n \right \} {Wk,k=1...n}表示, { x k , k = 1... n } \left \{ x^{k},k=1...n \right \} {xk,k=1...n}是每层的输出特征图, f f f为非线性激活函数, x l x^{l} xl为前层的激活输出图 l l l的激活单元,*符号代表的是2D的卷积。
过拟合是大型深度神经网络中的非常大的问题,避免这个问题的一个主要方法就是使用正则化,比如最近提出的dropout技术。Dropout在训练过程中随机丢弃输入神经元,具体来讲,它是用在激活函数中作为编码来随机丢弃ReLU激活值,因此高效增加了整个网路的鲁棒性,带dropout的ReLU激活函数可以通过下式给出:
等式(1)加上了一个随机的dropout比例 d r d_{r} dr,在每个训练迭代期间,对于每个神经元都有一个随机决定,经验上, d r d_{r} dr通常取0.5。
在传统的ANN中,整个输入向量同时被送入网络,然后逐层处理,最终产生输出值。在SNN中,输入通常以事件流的形式传入网络,然后神经元在这个时间段内整合数据,产生脉冲用于将信息传递给后续层,最终驱动输出神经元发射脉冲。这种方法有非常重要的优势:输入和输出的“假象同步”可以实现,并且时变输入可以更高效地处理,同时在特殊硬件上的更加高效的计算可以实现。
通常使用的脉冲神经元模型就是简单的 integrate-and-fire(IF)模型,膜电位 v m e m v_{mem} vmem的变化可以通过下式给出:
这里的 w i w_{i} wi是输入突触的权重, δ ( ⋅ ) \delta (\cdot ) δ(⋅)是冲击函数, S i = { t i 0 , t i 1 , . . . } S_{i}=\left \{ t_{i}^{0},t_{i}^{1},... \right \} Si={ti0,ti1,...}包含了第i个突触前神经元的脉冲发射时间,如果膜电位超过阈值 v t h r v_{thr} vthr,脉冲就会产生,膜电位被复位到静息电位 v r e s v_{res} vres,在我们的仿真中,IF模型的连续时间描述可以被离散化到1ms的时间步长。
在之前的工作中,传统的ANNs和脉冲实现之间存在着性能损失,这里我们列出了一个框架来促进深度ANNs和SNNs之间的转换,来减少在转换期间的性能损失,在这里使用到的转换方法是在“Spiking deep convolutional neural networks for energy-efficient object recognition”中提出方法的扩展——添加了新颖的正则化方法、发射率和阈值的分析。
我们从使用ReLUs的ANNs和脉冲网络的关系中开始观察:
下面给出将ANNs转换为SNNs的几点建议:
上面的这些建议适用于全连接层和卷积层,一旦人工神经网络中的ReLUs在训练后被IF神经元取代,那么在固定仿真期间的性能损失主要来源于三个因素:
减小仿真的timestep可以减少每个timestep的输入脉冲的数量,增加仿真时间可以有效避免不充分的激活。然而,我们要在脉冲阈值、输入权重和输入发射率之间找到一个权衡。具体来讲,高的输入阈值(或低的输入权重)会减小过激活和非理想脉冲序列的错误,然而同样增加了欠激活的风险,反之亦然。请注意脉冲阈值和输入权重的比率决定了整合的数量,不用手动调整参数,在这里我们提出了一个更加严格的方法来调整网络权重——通过计算权重的缩放因子对权重归一化从而减少了上面说的三个因素带来的错误。
这里提出了两种方法来对网络的权重归一化,并且确保激活值足够小能够防止ReLU过高估计输出激活值。最安全、最保守的方法就是考虑所有可能的正的激活值,并且通过可能的最大激活值(同时也是下一层的输入)对权重缩放。如果最大的正输入仅仅对应单个脉冲,那么网络同一个神经元在一个timestep内至多发射一个脉冲。通过这样做,脉冲神经网络变得具有鲁棒性——可以接受任意高的输入发射率并且完全消除由于太多输入而导致的转换损失。不幸的是,这意味着为了产生一个脉冲整合数据可能要花费很长时间。如果一个分类任务对性能要求比较高且可以接受更长的采样时间,这种方法可能是一种寻找合适的权重缩放因子的方法。我们常将这种方法称为"model-based normalization",伪代码如下"algorithm 1"所示。
第二种方法,训练集也可以用来评估网络中的激活值,而不是假设最大正激活值的最坏情况。在我们的实验中,观察到这个缩放因子相对保守,它的精度几乎没有损失,但是极大地缩短了整合时间。对于这个方法,在训练完网络后,训练集前向传播,我们将ReLU过后的激活值保存下来,接着,权重根据最大的可能激活值缩放,所以这种情况下也只会同时发射一个脉冲。另外,这种方法也需要将最大的输入权重考虑进去(即它的缩放因子是激活值和权重绝对值的最大值),因为如果不考虑权重的话还是有可能出现在一个timestep内需要发射多次脉冲,然而这不是一个强有力的保证——保证在测试集上也可以维持这种性能表现,训练集应该代表测试集,同时结果显示了这种方法是很有效的。我们将这种方法称为"data-based normalization",伪代码如下"algorithm 2"所示。
本文选的是MNIST数据集,之前脉冲神经网络实现手写数字分类的最高精度为 98.30%。
主要有两种结构,第一种:
第二种网络结构:
上面描述的每一种训练方法都被选择来实现性能最好的ReLU网络,权重被直接转换为脉冲IF网络,我们做了一个空间搜索——输入的频率为(25,50,100,200,400,1000HZ)、阈值为(0.25,0.5,1,2,4,10,20),企图找到最好的参数组合。同时将其与默认阈值、权重用algorithm1和2正则化的网络进行比较。
对于FCN,model-based归一化用于每一层的权重:每层权重通过algorithm1相乘,缩放因子为0.08和0.045。不管是FCN还是ConvNets来说,model-based都没有用于输出层。不像model-based中缩放因子比例那么小,data-based 归一化的缩放因子为0.37、1.25和0.8,仅对网络权重做微调来使得它对于高的输入频率更鲁棒。在ConvNet中,卷积层权重的缩放因子为0.1657和0.1238(对于model-based),使用data-based,缩放因子为0.1657、1.0021和1.19,输出层的缩放因子大于1意味着权重按比例增加了,这是因为训练集的输出太小的缘故。
先将MNIST图片的像素点都归一化到0-1,然后基于这些像素点,对于每个像素点利用泊松分布产生与像素值成正比的脉冲序列。
对于将传统的ReLU网络转换为SNNs的结果展示在Table 1中,如下: