Spiking Neural Network
脉冲神经网络(SNN)像生物神经元一样,以定时脉冲传递信息,用于低功耗神经形态 AI。内容涵盖神经元和训练。
脉冲神经网络(SNN)是一种神经网络,其神经元通过称为脉冲的离散、全有或全无事件进行通信,这更接近生物神经元的信号传递方式。每个神经元会在内部膜电位中累积传入脉冲,膜电位缓慢衰减;只有当膜电位超过阈值时,神经元才会发出自己的脉冲。信息体现在哪些神经元何时发放脉冲上,因此 SNN 会随着数据到达而处理数据,并且只在发生脉冲时执行计算。这种事件驱动的稀疏性使 SNN 适用于神经形态芯片上的低功耗边缘 AI,也使其天然适合事件相机;事件相机同样以异步事件的形式报告变化。Wolfgang Maass 于 1997 年将 SNN 描述为第三代神经网络模型,此前的两代分别是阈值单元和具有连续激活函数的网络。
脉冲神经元的工作原理#
应用最广泛的模型是漏积分发放(LIF)神经元。在每个时间步,其膜电位都会按固定比例衰减,随后加上加权输入脉冲;如果膜电位达到阈值,神经元就会发出脉冲并重置。输入较弱的神经元无法达到阈值,而输入较强的神经元会频繁发放,因此发放频率可以编码输入强度。下面的模拟使用不同的恒定输入电流驱动三个 LIF 神经元:
import torch
# Three leaky integrate-and-fire neurons, each driven by a constant input current
current = torch.tensor([0.15, 0.3, 0.6])
decay, threshold = 0.8, 1.0 # fraction of potential kept per step, firing threshold
potential = torch.zeros(3)
spike_counts = torch.zeros(3)
for step in range(20):
potential = decay * potential + current # leak, then integrate the input
spikes = (potential >= threshold).float() # fire where the threshold is crossed
potential = potential * (1 - spikes) # reset neurons that fired
spike_counts += spikes
print(f"Spikes in 20 steps: {spike_counts.tolist()}")它会输出 Spikes in 20 steps: [0.0, 4.0, 10.0]。输入为 0.15 时,膜电位会稳定在 0.15 / (1 − 0.8) = 0.75,低于阈值,因此该神经元从不发放。输入为 0.3 时会产生 4 个脉冲;输入为 0.6 时则每隔一个时间步就会超过阈值,产生 10 个脉冲。snnTorch等库提供此类 LIF 层,将其作为可在 GPU 上训练的 PyTorch模块。
用脉冲编码信息#
SNN 使用数据前必须先将数据转换为脉冲,编码方式会同时影响准确率和速度:
- 频率编码:一个数值会转换为发放频率,如上面的模拟所示。这种方式鲁棒,但需要许多时间步才能精确表示数值。
- 时间编码:一个数值会转换为脉冲的时序,例如亮度较高的像素发放得更早,因此用很少的脉冲就能传递信息。
- 事件传感器:神经形态视觉相机在像素亮度发生变化时输出类似脉冲的事件,具有微秒级时序且没有固定帧率,因此其数据可以直接输入 SNN。
训练 SNN#
脉冲是阶跃函数,其导数几乎处处为零,因此标准反向传播无法通过它传递梯度。有三种方法可以绕过这一问题。ANN 到 SNN 转换会使用 ReLU激活函数训练普通网络,再将每个激活值映射为发放率。替代梯度训练在前向传播中保留硬脉冲,但在反向传播中用平滑函数的导数代替,然后像训练循环神经网络(RNN)那样通过时间反向传播进行训练。脉冲时序依赖可塑性(STDP)是一种受生物学启发的局部规则:当输入脉冲先于输出脉冲时,它会增强突触,并且能够在没有标签的情况下学习。近期大多数高准确率 SNN 都直接使用替代梯度训练,这种方法所需的时间步远少于转换网络;而转换仍是从现有模型出发最简单的途径。
神经形态硬件#
SNN 在专为其设计的芯片上最节能。神经形态处理器将内存放在许多小型核心旁,通过脉冲消息通信,并且只在脉冲到达时计算;由于脉冲是二进制的,每个突触事件只需进行加法而非乘法。IBM 的 TrueNorth(2014)在单个芯片上集成了 100 万个神经元,曼彻斯特大学的 SpiNNaker 使用大型 ARM 核心阵列,而 Intel 的 Loihi 2则为 Hala Point 提供支持;Hala Point 是一个于 2024 年推出的研究系统,配备 1,152 个 Loihi 2 处理器和 11.5 亿个神经元。在为密集矩阵运算而设计的标准 GPU上,SNN 的运行速度通常比同等的传统网络慢。
SNN 与传统神经网络的比较#
- 信号:传统网络,包括卷积神经网络(CNN)和 Transformer,会在一次前向传播中将连续值传过每个神经元。SNN 会在多个时间步中传递二进制脉冲,并且任一时刻大多数神经元都保持静默。
- 准确率:传统网络在标准图像基准上仍然领先;SNN 主要通过替代梯度训练和借鉴传统模型的架构缩小了差距。
- 效率:在神经形态硬件上,对于事件相机数据流和持续监听音频等稀疏、事件驱动的输入,SNN 的能耗低得多。
应用场景#
- 基于事件的视觉与机器人:在一项 2024 年发表于《Science Robotics》的研究中,TU Delft 的研究人员使用 Intel Loihi 驱动一架无人机,该无人机搭载完全由脉冲神经网络构成的视觉与控制网络,以 200 Hz 将原始事件相机数据映射为运动指令。
- 始终开启的传感:关键词检测、手势识别和传感器异常检测都能受益于 SNN:在没有变化时,SNN 几乎不耗电。
- 目标检测:SpikeYOLO 是由 Xinhao Luo、Man Yao 等人在 ECCV 2024 上提出的脉冲检测器,基于 Ultralytics 代码库构建,并通过脉冲驱动模块简化了 Ultralytics YOLOv8 架构;采用整数值训练和脉冲驱动推理,它在 COCO 上达到 48.9% mAP50-95。










