SLAYER: Spike Layer Error Reassignment in Time
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!
32nd Conference on Neural Information Processing Systems (NeurIPS 2018), Montréal, Canada.
Abstract
配置深度SNN是基于低功率脉冲事件的计算的令人兴奋的研究途径。但是,脉冲生成函数不可微,因此与标准误差反向传播算法不直接兼容。在本文中,我们介绍了一种用于学习突触权重和轴突延迟的新的通用反向传播机制,该机制克服了脉冲函数的不可微问题,并使用时序信度分配策略将误差反向传播至前一层。我们描述并发布了我们方法的GPU加速软件实现,该方法允许训练全连接和卷积神经网络(CNN)架构。使用我们的软件,我们将该方法与现有的基于SNN的学习方法以及标准ANN到SNN转换技术进行了比较,并表明我们的方法在MNIST, NNMIST, DVS Gesture和TIDIGITS数据集上达到了SNN的最新性能。
1 Introduction
人工神经网络(ANN),尤其是深度神经网络,已成为许多机器学习任务的必备工具。ANN在从图像分类和目标识别到目标跟踪,信号处理,自然语言处理,自动驾驶汽车,医疗保健诊断等应用中均达到了最先进的性能。在当前流行的第二代ANN中,将误差信号反向传播到前一层的神经元是其学习能力的关键。
但是,ANN通常需要功能强大的GPU和计算集群,以将其输入压缩为有用的输出。因此,在功耗受限的情况下,就地使用ANN可能不是一个可行的选择。另一方面,受到生物学启发的脉冲神经元作为有效的计算单位[1-3]长期以来显示出巨大的理论潜力,而脉冲神经网络(SNN)硬件[4-6]的最新进展已经重新引起了对该领域的研究兴趣。
SNN在网络拓扑方面与ANN类似,但在神经元模型的选择上有所不同。脉冲神经元具有记忆力,并使用不可微的脉冲神经元模型(脉冲函数),而ANN通常不具有记忆力,并使用连续可微的激活函数为每个神经元建模。由于脉冲函数是不可微的,用于训练ANN的反向传播机制无法直接应用。
然而,先前已经提出了一些针对SNN的监督学习算法。它们中的大多数是为单个神经元设计的[7-9],但是少数工作提出了解决不可微的脉冲函数和多层传播误差的方法[10-14]。
基于事件的方法(例如SpikeProp [10]和EvSpikeProp [11])仅在发放时间前后定义了导数项,而[12-14]忽略了脉冲信号的时序效应。在第3.1节中,我们将详细介绍这些方法的优缺点。
本文的主要贡献是一种针对SNN的误差反向传播的通用方法(第3节),我们将其称为Spike LAYer Error Reassignment (SLAYER)。SLAYER通过SNN层将误差信度反向分配,就像传统的反向传播算法通过ANN的层将误差信度反向分配一样。但是,与反向传播不同,SLAYER还可以及时分配误差信度,因为脉冲神经元的当前状态取决于其先前状态(因此取决于其输入神经元的先前状态)。SLAYER可以同时学习突触权重和轴突延迟,只有少数先前的工作曾尝试过[15,16]。
我们已经开发并发布了3一个CUDA加速框架,用于使用SLAYER训练SNN。对于视觉数字识别,动作识别和口语数字识别,我们演示了SLAYER在神经形态数据集(第4节)上实现的SNN的精度。
本文的其余部分安排如下。我们首先在第2节中介绍脉冲神经元的一般模型的表示法,并将其扩展到多层SNN。然后,在第3节中,我们讨论先前发布的用于学习SNN参数的方法,然后推导SLAYER反向传播公式。在第4节中,我们将在第5节中总结之前展示SLAYER在不同基准数据集上的有效性。
3 SLAYER学习框架的代码可在以下位置公开获得:https://bitbucket.org/bamsumit/slayer;PyTorch版本的代码:https://github.com/bamsumit/slayerPytorch;此项工作的简短视频描述可在以下网址获得:https://www.youtube.com/watch?v=JGdatqqci5o
2 Spiking Neural Network: Background
SNN是一种ANN,它使用生物学上更加逼真的脉冲神经元作为其计算单位。在本节中,我们介绍了一个脉冲神经元模型,然后将其扩展到多层脉冲神经元网络(SNN)。
2.1 Spiking Neuron Model
脉冲神经元之所以得名,是因为它们仅使用电压脉冲进行通信。神经元的所有输入和输出都是脉冲形式,但神经元会随着时间的推移保持内部状态。在本文中,我们将使用一个简单且通用的脉冲神经元模型,称为脉冲响应模型(SRM)[17],如下所述。
考虑到神经元的输入脉冲序列。这里的是第 i 个输入的第 f 个脉冲的时间。在SRM中,通过将si(t)与脉冲响应核ε(·)卷积,将传入的脉冲转换为脉冲响应信号ai(t)。可以将其写为ai(t) = (ε * si)(t)。同样,神经元的不应期反应表示为(v * s)(t),其中v(·)是不应期核,而s(t)是神经元的输出脉冲序列。
通过突触权重wi缩放每个脉冲响应信号,以产生突触后电位(PSP)。神经元的状态(膜电位)u(t)只是所有PSP和不应期反应的总和:
每当u(t)达到预定义的阈值时,都会生成输出脉冲。更正式地说,脉冲函数fs(·)被定义为:
其中t(f+1)为在t(f)之后u(t)再次达到阈值的最小时间;与非脉冲ANN中使用的激活函数不同,脉冲函数的导数是不确定的,这是SNN从输出到输入的反向传播误差的主要障碍。另外,请注意,将来会通过脉冲响应核来分配输入脉冲的影响,这是脉冲神经元中时序依赖性的原因。
通过将脉冲响应核重新定义为εd(t) = ε(t - d),其中d ≥ 0是轴突延迟4,可以将上述公式扩展为包括轴突延迟。
4 突触延迟也能够以类似方式建模。在此,为了简单起见,我们仅考虑轴突延迟。
2.2 SNN Model
在此,我们描述了具有nl层的前馈神经网络结构。此公式适用于全连接,卷积以及池化层。有关实现的详细信息,请参阅补充材料。考虑具有Nl个神经元的层l,权重∈ 和轴突延迟。然后,网络前向传播如下所述。
还要注意,输入s(0)(t) = sin(t),输出是脉冲序列,而不是数值。
3 Backpropagation in SNN
在本节中,我们首先讨论在SNN中学习的先前工作,然后再介绍使用SLAYER进行误差反向传播的细节。
3.1 Existing Methods
以前使用学习来配置深度SNN(多个隐含层)的工作可以分为三个主要类别。第一类使用ANN训练等效的浅层网络。其他两个类别直接在SNN上训练,但它们在近似脉冲函数的导数上的方式不同。
第一类通过训练ANN并将其转换为SNN [18-25]来利用常规ANN的学习方法,但精度有所下降。有多种方法可以克服精度降低的问题,例如对神经元发放率引入额外的约束[23],调整权重[23-25],限制网络参数[20],为脉冲神经元制定等效的传递函数[19–22],使用概率权重[18]等在模型[21,22]中添加噪声。
第二类仅在脉冲时间跟踪脉冲神经元的膜电位,而仅根据脉冲时间的膜电位反向传播误差。例子包括SpikeProp [10]及其派生算法[11,26]。这些方法容易出现"死亡神经元"问题:当没有神经元脉冲时,就不会发生学习。需要启发式措施来使网络从这种情况中恢复过来。
第三类方法仅基于单个时间步骤的脉冲神经元膜电位的反向传播误差。使用不同的方法来近似脉冲函数的导数。Panda et al. [12]使用类似于多层感知器系统的表达式,Lee et al. [13]在脉冲时间使用小信号近似,Zenke et al. [14]简单地提出了一个替代函数作为导数。所有这些方法都忽略了脉冲之间的时序依赖性。他们只将给定时间步骤的误差归因于该时间步骤的输入信号,从而忽略了较早的脉冲输入的影响。
3.2 Backpropagation using SLAYER
在本节中,我们将描述损失函数(第3.2.1节),如何将误差分配给先前的时间点(第3.2.2节)以及如何近似脉冲函数的导数(第3.2.4节)。
3.2.1 The Loss Function
考虑在时间间隔t ∈ [0, T]内网络的损失函数,定义为:
其中是目标脉冲序列,是时间实例 t 的损失,而是最后一层的误差信号。为简便起见,我们将从此处开始将误差信号写为。
为了学习目标脉冲序列的形式的误差信号:
是一个合适的选择。该损失函数类似于van-Rossum距离[27]。
对于分类任务,通常基于间隔内输出脉冲的数量而不是脉冲的精确时间来做出决定。为了处理这种情况,可以将时间间隔内的误差信号定义为:
并在间隔Tint之外为零。在此,我们只需要定义间隔(第二个积分项)中所需脉冲的数量。实际脉冲序列不需要定义。
3.2.2 Temporal Dependencies to History
在从输入脉冲s(l)(t)到膜电位u(l+1)(t)的映射中,由于脉冲响应核ε(·)引入了时序依赖性,该核将输入脉冲的影响分配到未来时间值,即信号u(l+1)(t)取决于当前以及过去的输入值s(l)(t), t ≤ t1。基于步骤的学习方法[12-14]忽略了该时序依赖关系,并且仅在当前时间实例使用信号值。下面我们描述SLAYER如何解决这种时序依赖关系。补充材料中提供了推导的完整细节。
现在,让我们用采样时间Ts离散化系统,使得,并使用Ns表示周期t ∈ [0, T]中样本的总数。信号值a(l)[n]和u(l)[n]对样本m = n, n+1, ... , Ns时的未来网络损失有贡献。考虑到时序依赖性,梯度项由下式给出:
然后,对层 l 中的误差进行反向传播估计:
在此表示时间上逐元素的相关运算。从n到Ns的总和会将未来时间所有网络损失的信度分配给当前时间的神经元。请注意,在输出层,对于n ≠ m,,这将导致。这与(6)中输出层误差的定义一致。
类似地,对于具有的轴突延迟,可以如下得出延迟梯度。
3.2.3 The Derivative of the Spike Function
对于多层SNN中的监督学习,脉冲函数的导数始终是一个问题。在第3.1节中,我们讨论了先验工作如何处理导数。下面我们描述SLAYER如何处理脉冲函数导数。
考虑在时间t = τ时脉冲神经元的状态。神经元可以处于脉冲状态或非脉冲状态。现在考虑对膜电势的扰动量(对于)。
如果,当被扰动时,处于非脉冲状态的神经元将切换为脉冲状态。类似地,如果,当被扰动时,处于脉冲状态的神经元将切换为非脉冲状态。在这两种情况下,当时,神经元的脉冲状态发生变化。图1(a)显示了这些转换。因此,
由于Dirac-delta函数,这个公式仍然是有问题的。但是,我们可以看到,随着的增加,导数项有偏趋向于零。利用脉冲状态变化的概率可以很好地估计导数项。
如果我们将概率密度函数表示为ρ(t),则当, 宽度为Δt的无限小时间窗口(在τ附近)与一个小扰动时,脉冲状态变化的概率可以写为。现在,的期望值可以写成:
脉冲函数的导数表示脉冲神经元状态变化的概率密度函数(PDF)。对于完全确定性的脉冲神经元模型,它是脉冲时间上的脉冲总数,这等于脉冲序列s(t)。但是,我们可以放宽脉冲神经元的确定性,并使用随机脉冲神经元近似反向传播误差。
当u(τ)接近时,函数必须较高,并且随着距离的增加而减小。PDF示例如图1(b)所示。此函数的一个很好的表述是脉冲逃逸率函数[28,29]ρ(t),这通常由的指数衰减函数表示:
在[14]中使用的快速sigmoid函数的负部分也是的合适候选。
3.2.4 The SLAYER Backpropagation Pipeline
现在,对于(9)(10)和(11)应用极限Ts → 0,并使用的期望值,我们达到SLAYER反向传播流水线。
关于权重和延迟的梯度由(18)和(19)给出。使用简单的梯度下降法到自适应方法(例如RmsProp,ADAM和NADAM)中的任何优化技术来驱动网络趋向收敛都是很简单的。
4 Experiments and Results
在本节中,我们将介绍进行的不同实验以及对它们进行评估的结果,以评估SLAYER的性能。首先,我们响应给定的一组Poisson脉冲输入,训练SNN以产生固定的Poisson脉冲训练模式。我们使用这个简单的示例来展示SLAYER的工作原理。然后,我们介绍在脉冲数据集和转换为脉冲的非脉冲数据集上执行分类任务的结果。
由于信号的额外时序维度,仿真SNN是一个耗时的过程。一个有效的仿真框架是实现对实际脉冲数据集进行训练的关键。我们使用SLAYER的CUDA加速SNN深度学习框架来执行所有仿真,本文给出了结果。报告的SLAYER的所有精度值均通过5个不同的独立试验得出的均值。在我们的实验中,我们使用形式为 和的脉冲响应核。这里Θ(t)是Heaviside阶跃函数,但是SLAYER与核的选择无关。
在整个本文中,我们将使用以下符号表示SNN结构。图层由-分隔,空间维度由x分隔。卷积层由c表示,聚合层由a表示。例如34x34x2-8c5-2a-5o代表具有32x34x2输入的4层SNN,然后是8个卷积滤波器(5x5),接着是2x2聚合层,最后是连接到5个输出神经元的密集层。
4.1 Poisson Spike Train
这是一个简单的实验,可以帮助了解SLAYER中的学习过程。在50毫秒的间隔内为250个不同的输入生成了一个Poisson脉冲序列。类似地,使用Poisson分布生成目标脉冲序列。任务是学习使用具有25个隐含神经元的SNN为随机脉冲输入发放所需的脉冲序列。
学习图如图2所示。从学习脉冲栅格中,我们可以看到最初随机时间分布的输出脉冲(图2(a)底部)。随着学习的进行,不需要的脉冲被抑制,所需脉冲序列附近的脉冲得到增强。学习终于在第739个epoch收敛到所需的脉冲运动。在epoch 20的学习快照(图2(b))显示了误差信号的构造方式。用于输入,隐含和输出层的脉冲光栅显示在底部,蓝色图显示了输出层的相应信号。从误差信号e到delta信号δ的转换表明,分配的误差信度取决于膜电位值u。注意误差的时序信度分配。e的非零值会导致在较早时间点δ的非零值,即使此时的误差信号e为零。可以对隐含层信号进行类似的观察。在25个隐含层信号中,一个以黑色突出显示,其余信号则显示为浅色。
4.2 MNIST Digit Classification
MNIST是流行的机器学习数据集。任务是对包含一位数字的图像进行分类。该数据集是测试学习算法性能的标准基准。由于SLAYER是基于脉冲的学习算法,因此使用神经元的通用IF模型将图像转换为跨25毫秒的脉冲序列[35]。使用60000个训练样本和10000个测试样本的标准划分,没有数据扩充。对于分类,我们使用脉冲计数策略。在训练过程中,我们指定在25毫秒时期内为真神经元设置20个脉冲的目标,为每个假神经元指定5个脉冲的目标。在测试期间,输出类别是生成最高脉冲计数的类别。
表1列出了用于MNIST分类的SLAYER的分类精度,以及其他基于SNN的方法。我们在网络上实现99.36%的测试精度,这是完全基于SNN的学习的最优结果。尽管此精度与最先进的深度学习方法不能很好地兼容,但是对于基于SNN的方法而言,这是一个值得称赞的结果。
4.3 NMNIST Digit Classification
NMNIST数据集[36]由MNIST图像组成,这些图像通过使用在云台上移动的动态视觉传感器(DVS)转换为脉冲数据集。每个数据集样本长300毫秒,大小为34x34像素,包含"开"和"关"脉冲。该数据集比MNIST难,因为必须处理扫视运动。对于NMNIST训练,我们对每个假类别神经元使用10个脉冲,对真类别神经元使用60个脉冲。输出类别是脉冲计数更大的类别。训练和测试的分离与标准MNIST的60000个训练样本和10000个测试样本的划分相同。NMNIST数据在馈入网络之前不稳定。
表1中列出的NMNIST分类结果显示,SLAYER学习超过了Lee et al. [13](具有相当数量的神经元)在NMNIST数据集上报告的最新技术水平。但是,使用SLAYER训练的CNN架构可以达到最优效果。
4.4 DVS Gesture Classification
DVS Gesture [32]数据集由29个不同的人组成的记录组成,这些人执行10种不同的动作,例如拍手,挥手等。这些动作是使用DVS摄像机在三种不同的光照条件下记录的。问题是将动作序列视频分类为动作标签。数据集使我们可以测试临时任务上的SLAYER。为了进行训练,我们将假类别神经元的目标脉冲计数设置为30,将真类别神经元的目标脉冲计数设置为180。前23名受试者的样本用于训练,后6名受试者的样本用于测试。
DVS手势分类的结果在表1中列出。SLAYER的平均测试精度达到93.64%。在SLAYER训练和测试中,每个类别的≈6秒钟动作视频中只有前1.5 s用于对动作进行分类。由于速度原因,以5 ms的时间分辨率仿真SNN。尽管存在这些缺点,但精度结果还是非常出色的,超过了使用EEDN [32]训练的TrueNorth的测试精度。通过输出滤波,TrueNorth精度可以提高到94.59%。然而,SLAYER能够以少得多的神经元和层进行分类。TrueNorth方法在CNN分类器之前使用额外神经元进行预处理,而在SLAYER中,来自DVS的脉冲数据直接馈入分类器。
4.5 TIDIGITS Classification
TIDIGITS [37]是一个音频分类数据集,其中包含与从"零"到"九"和"哦"的数字发音相对应的音频信号。在本文中,我们将音频数据通过MFCC变换转换为脉冲,然后使用自组织映射(SOM),如[33]中所述。对于训练,我们指定5个脉冲的目标为假类别,20个脉冲的目标为真类别。数据集分为3950个训练样本和1000个测试样本。
TIDIGITS分类的结果在表1中列出。SLAYER大大提高了在相同的编码脉冲输入上使用SOM-SNN [33]进行基于SNN的方法的测试精度结果。但是,对于TIDIGITS分类,报告的最优精度99.7%[38]是使用MFCC和HMM-GMM方法(非脉冲)。但是,SLAYER的精度仍具有99.09%的竞争力。
5 Discussion
我们已经为SNN提出了一种新的误差反向传播方法,该方法可以适当考虑脉冲神经元的输入和输出信号之间的时序依赖性,处理脉冲函数的不可微性质,并且不容易出现死神经元问题。结果是SLAYER,这是一种用于学习SNN中的权重和轴突延迟参数的学习算法。我们已经证明SLAYER在SNN的语音数字和视觉数字识别以及视觉动作识别方面达到了最先进的精度。
在训练过程中,我们需要同时触发真假神经元,但要为真类别神经元指定更高的脉冲计数目标。这种方法可以防止神经元进入休眠状态,并且在需要时可以轻松地学会更频繁地重新发放。选择所需的脉冲计数与仿真间隔大致成正比。
有了适当的替代函数比例系数(15),对于迄今为止我们训练的任何网络,SLAYER中的梯度消失或爆炸都不是问题,我们相信SLAYER可以用于更深的网络。
时序误差信度分配和轴突延迟确实增加了计算复杂度要求,分别占训练全连接的NMNIST网络的计算时间的8.03%和2.55%,计算开销并不明显。
我们认为,SLAYER是对在SNN中实现反向传播的重要贡献。针对SLAYER的CUDA加速学习框架的开发对于处理SNN域中的较大数据集很有帮助,尽管与常规(非脉冲)深度学习处理的庞大数据集相比,它们仍然不算大。
诸如TrueNorth [4],SpiNNaker [5],Intel Loihi [6]之类的神经形态硬件显示了在极低功耗的芯片中实现大型脉冲神经网络的潜力。这些芯片通常没有学习机制,也没有内置的原始学习机制。通常必须离线进行学习。SLAYER有潜力用作离线训练系统,以在将网络部署到芯片之前对其进行配置。
SLAYER: Supplementary Material
May 14, 2018
1 SNN architectures
该公式适用于具有密集权重矩阵的全连接层。对于卷积层,通过卷积权重进行累加,卷积权重是全连接权重矩阵的子集。从卷积权重到全连接权重的转换也是可能的,但是实际上很少使用卷积权重,因为可以非常有效地应用卷积运算。
当涉及最大池化时,操作并不简单。但是,由于脉冲是稀疏事件,因此传入脉冲的求和操作等效于每个时间步骤的最大池化操作。因此,一个脉冲神经元聚集脉冲,其权重稍大于其膜阈值,相当于最大池化操作。选择权重以确保每个输入脉冲都有一个输出。但是,由于不应期动态的影响,有时会丢失时间紧邻的传入脉冲。
2 SLAYER derivation: Temporal Dependencies to History
3 Sample Results
在此,我们描述的视频显示了NMNIST训练和DVS手势训练对从训练划分中抽取的随机样本的样本结果。
3.1 NMNIST Results
视频SLAYER NMNIST.avi展示了在来自测试集的12个不同随机样本上测试SNN的性能。对于每个样本,脉冲输入显示在左上方。红色像素表示on脉冲,蓝色像素表示off脉冲。相应的灰度MNIST图像显示在顶部中间。在右上方,显示了特定输入的所有十个输出神经元的脉冲计数图。脉冲计数值较高的神经元是真实的类别。请注意,该图并不表示网络的置信度,因为即使对于错误的类别,SNN也被训练为发放10次脉冲。在底部图上,显示了一个脉冲栅格,该栅格显示了在输入采样期间网络的输出脉冲。将视频放慢10倍,以轻松查看正在做出的决策过程。输出正确分类了此视频中显示的所有输入。
3.2 DVS Gesture Results
视频SLAYER DVSGesture.avi展示了在来自测试集的24个不同随机样本上测试SNN的性能。对于每个样本,脉冲输入显示在左上方。红色像素表示on脉冲,蓝色像素表示off脉冲。右上方显示了特定输入的所有11个输出神经元的脉冲计数图。在底部图上,显示了一个脉冲栅格,该栅格显示了在输入采样期间网络的输出脉冲。