脉冲神经网络(SNN)全面解析笔记
核心结论: 脉冲神经网络(SNN)是受大脑启发的第三代神经网络,通过离散脉冲、事件驱动机制和三种核心生物原理实现高度节能的计算,其发展建立在第一、二代神经网络的基础上,但面临着独特的训练、编码和硬件实现挑战。
一、神经网络的发展历程
1.1 第一代神经网络(约1943年开始)
第一代神经网络最早于大约80年前发明,1943年推出了第一个MP神经元(McCulloch-Pitts神经元),其关键特征如下:
- 结构上模仿了生物神经元,但只能执行逻辑运算
- 所有参数都是人为设定的,而非通过学习获得
- 1957年发明了感知机(Perceptron),由大量MP神经元构成
- 感知机采用 Heaviside函数 作为激活函数
- 网络中的参数并非直接由人工设定,而是依据特定公式(ΔW = η(y - ŷ)x)更新
第一代网络的核心局限:
- 无法解决非线性问题(例如:无法找到一条恰当的线来区分红方块和蓝点)
- 所采用的阶跃函数(Step Function)不可微,导致感知机无法根据参数更新公式(梯度下降)动态更新参数
1.2 第二代神经网络(人工神经网络/深度神经网络)
科学家对第一代网络进行改进,促进了第二代网络的诞生,包括两项关键改进:
- 采用可微分的激活函数:使神经网络可以使用梯度进行反向传播并动态更新参数
- 引入隐藏层:使网络得以加深,从而提升了网络的能力
借助这两项改进,网络可以近似非线性函数,第二代网络因此被称为人工神经网络(ANN)或深度神经网络(DNN),其代表模型包括MLP(多层感知机)和CNN(卷积神经网络)。
第二代网络的局限:
- 模拟了生物神经元的结构,但没有模拟神经元间信息转换的具体机制
- 没有固有的时间编码:处理时间序列问题时需要人工建立新模型(如循环神经网络RNN)
- 非常耗能:需要使用GPU来并行计算梯度
1.3 第三代神经网络(脉冲神经网络 SnN)
科学家们使用离散脉冲而非连续数字代表神经元间传递的信息,由此催生了第三代网络:
- 信息表示基于事件驱动:每个脉冲被视为一个事件,因此非常节能
- 不需要反向传播便可进行学习和参数更新
二、SNN的生物学基础:三大核心原理
第三代网络(脉冲神经网络)基于三个核心生物学原理:
- 膜电位积分(Membrane Potential Integration) :神经元接收来自其他神经元的累计信号并逐步累积膜电位
- 阈值发放(Threshold Firing) :当当前神经元接收的累计信号超出阈值时,它会发出脉冲(动作电位)
- 不应期(Refractory Period) :发放脉冲后,神经元进入不应期,在此期间不会对任何传入的信息作出反应
这三个原则构成了脉冲神经网络基础模型的基石,该模型包含漏电(Leak)、积分(Integrate)以及发放(Fire)的过程,合称LIF模型。膜电位颗粒(脉冲)是SNN最关键的成分。
三、数据编码:如何将真实数据转换为脉冲
3.1 大脑的感知方式
- 我们用眼睛认识环境,视网膜将光子转化为脉冲(动作电位)
- 脉冲通过每个神经元的轴突进行传递,最终到达大脑中负责感知的区域
- 这些脉冲实际上是一系列间断的单比特事件,可以用常见的二进制数字来表示
3.2 脉冲的两个关键特性
| 特性 | 说明 | 意义 |
|---|---|---|
| 稀疏性(Sparsity) | 脉冲在生物系统中会自然分散开来 | 极大节约能量 |
| 状态表达(变化响应) | 感觉系统主要对变化做出反应,而非静止事物 | 静态背景(如墙)通常不引起强烈反应,称为"静态抑制" |
示例:挥手时,脉冲只出现在手指——即实际在移动的部分。变化越强烈或越快,脉冲就越密集。
3.3 三种编码方法详解
如果输入本身就是脉冲形式(如神经信号采集),则无需转换。但对于大多数数据(如图像像素值是实数),需要将实数转换为脉冲序列,有以下三种方法:
方法一:评分编码(Rate Coding)
- 先将输入数据归一化到 [0, 1] 范围内
- 归一化后的输入特征值 X 对应每个时间步的脉冲发射概率
- X = 0 时:发射概率为零,任何时候都不会看到脉冲
- X = 0.5 时:神经元将在每隔一个时间步发射脉冲
- X = 1 时:每个时间步都出现脉冲
特点:最终得到三维新数据,新增加的一维是时间步(T) 。时间步数越多,概率估计越准确,但计算成本也越高。
方法二:延迟编码(Latency Coding)
- 不需要归一化处理,只需确保输入值范围在函数的有效范围内
- 核心原则:输入值越大,脉冲被触发得越早
- 为定量确定脉冲时间,通常依赖特定的延迟函数
局限性:某些函数(如蓝色曲线)会导致脉冲时间聚集为两个区域,在很短时间内产生过多脉冲,可能超过模型处理能力。因此,很多情况下倾向于选择能使脉冲时间分布更均匀的函数(如黄色曲线)。
方法三:Delta调制(Delta Modulation)
- 在生物学上最具启发性,类似于感觉系统主要对变化做出反应
- 适用于序列数据(如音频波形),通过计算相邻数字的差值来触发脉冲:
- 差值的绝对值超过预设阈值时触发脉冲
- 差值为正 → 触发开脉冲(用 +1 表示)
- 差值为负 → 触发关脉冲(用 -1 表示)
- 需要使用三个不同数字(如+1、0、-1)代表脉冲
四、核心神经元模型:LIF(Leaky Integrate-and-Fire)神经元
4.1 电路层面的物理实现
LIF神经元的工作机制可以在物理硬件层面用经典 RC电路(电阻-电容电路)模拟:
- 电路由电阻(R)和电容器(C) 组成
- 输入电流 I_in 流入电路
- 监测元件负责监测电容器两端的电压 V
- 当电压超过阈值 V_th 时,产生一个电流脉冲(即神经元发放)
4.2 数学模型推导
用数学语言描述电路的三个基本方程:
- 流入电容器的电流:I_C = C · dV/dt
- 电阻上的电流:I_R = V / R
- 组合后得到:C · dV/dt = I_in - V/R
重整方程形式:设 τ = R × C(时间常数,单位毫秒),代入后约去电阻值,得到:
τ · dV/dt = -V + R · I_in
该公式分解为两部分:
- 第一项(泄漏项) :衡量由电阻部分引起的损耗
- 第二项(累积项) :衡量总输入
4.3 与生物神经元的对应关系
| 电路元件 | 生物对应物 | 功能 |
|---|---|---|
| 电容 C | 细胞膜 | 在两侧储存电荷,如同平行板电容器 |
| 电阻 R | 离子通道 | 允许电流流出,电阻值影响泄漏率 |
| 电压比较器 | 阈值触发机制 | 膜电压达阈值时触发神经信号 |
4.4 计算机实现:离散化
要在计算机上实现LIF,需要将连续微分方程离散化。重排方程后得到的离散形式与 RNN(循环神经网络) 的更新公式相似:最终输出由前一步的电压和当前输入共同决定。
通过手动调整参数,可以控制模型对当前输入和先前步骤信息的重视程度。
4.5 脉冲激发函数
- 激发函数类似于ANN中使用的激活函数
- 区别:它是不可微的分段函数
- 阈值电压 V_th 是超参数,可在经历神经形态仿真(神经箱)后进行手动调整
- 神经元发放后需要短暂休息,进入不应期,膜电压回落到静息电位
4.6 前向传播路径公式
其他路径的脉冲传播与生成遵循相同的原则,最终得出如下公式:
U_t = β · U_{t-1} + W · X_t - 复位项
- β:控制模型对前一膜电压的依赖程度(一种记忆形式)
- W:模型需学习的参数,分配给每个输入的值
- 最后一项:负责复位神经元,经过一段时间后电压恢复到静息电位
五、SNN的训练方法
5.1 方法一:随时间反向传播(BPTT)+ 替代梯度
虽然SNN不再依赖传统梯度下降,但科学家们在梯度和反向传播方面的知识积累仍然非常宝贵,SNN仍可使用梯度下降进行训练。
计算图结构: 前向传播贯穿时间步T0、T1、T2……神经元不直接将输出传递给下一步,而是将膜电压传递给下一状态,因此使用随时间反向传播(BPTT, Backpropagation Through Time)。
核心计算方式:
- 计算损失函数 L 对参数 W 的偏导数
- 对每个时间段应用链式法则
- 最后对时间维度求和
关键问题——神经元耦合问题(Dead Neuron Problem):
由于SNN的激活函数(脉冲发放函数)是分段函数,在计算梯度时发现:SNN对效用的导数是不存在的(要么为零,要么趋向无穷大)。这使得梯度下降无法配合,直接造成梯度消失或梯度爆炸问题。
解决方案——替代梯度法(Surrogate Gradient) :
- 在前向传播中用原来的传输函数在两个神经元间传递信息
- 在反向传播中用类似激活函数的梯度来近似真实脉冲函数的导数
- 例如使用 Sigmoid函数 来近似膜电位对输入的导数
- 由于Sigmoid函数是可导的,梯度计算得以完成
5.2 方法二:脉冲时间依赖可塑性(STDP)
定义:一种无监督学习算法,完全为SNN设计,放弃了梯度计算(梯度计算通常难以计算且为GPU带来沉重负担)。
生物学基础——基于Gong和Poo(工墙和牧民)的研究发现:
- 时序依赖:
- 如果前突触神经元先发放脉冲,后突触神经元随后也发放脉冲 → 两个神经元之间的连接将会增强
- 如果后突触神经元先发放脉冲,前突触神经元随后发放 → 连接将被减弱
生物实验数据(图示信息):
- 水平轴:前突触与后突触发放之间的时间差
- 纵轴:突触反应相对于基线的强度
- 脉冲间隔越短,效果越强
- 箭头左边表明突触减弱,右边表明突触增强
STDP的数学规则:
预神经元 i 和后神经元 j 之间的参数更新依赖于脉冲时间 T_i 和 T_j:
- 若 T_i < T_j(突触前神经元更早放电)→ 突触应被加强
- 若 T_i > T_j → 突触应被减弱
STDP的显著缺点:
- 为了进行成对比较,必须记录所有的脉冲和所有连接
- 若有 N 个预神经元、M 个后神经元,时间步数为 T:
- 空间复杂度:O(N·M·T)
- 时间复杂度:更高阶的增长
- 当时间步 T 较大时,虽然评分编码更精确,但计算成本大幅增加,给计算机带来极高的存储和计算压力
优化方案——基于迹的STDP(Trace-based STDP):
核心改进:不比较实际的发放时间,而是比较基于迹(Trace)的值。
- 迹的值代表了最近一次发放的历史热度:发放时间越近,热度越高;时间越长,热度越低
- 第二项处理冷却(泄漏)
- 第三项对应于放电功能
优化后的优势:
- 无需存储所有的时间步堆栈,只需维护当前和上一次记录
- 仅需遍历一次前后神经元,时间复杂度大幅下降
- 无需等待数据记录和比较,提高了效率
- 不需要反向传播,也不必在每次前向传递后等待记录和计算
- 可以在每个时间步更新参数,过程更高效、更接近人类的学习方式
超参数说明:A、B 和 τ(时间常数)都是超参数,可以称为"超函数"(hyper-functions),每个函数的输入都是每个连接的参数。
5.3 方法三:ANN到SNN的转换
该方法在工业界得到广泛应用,充分利用了我们对人工神经网络积累的知识。
步骤:
- 首先训练一个ANN作为基础网络
- 提取每一层的最大激活值,在后续转换过程中使用
- 将ANN中的 ReLU函数替换为SNN中使用的拟发放函数(即把ANN神经元变为LIF神经元)
- 核心对应关系:ReLU输出越大,对应的LIF神经元发放的脉冲越多
- 调整训练好的ANN参数,确保每个LIF神经元的输入恰当(避免过度或不足——类似于ANN中的梯度消失或爆炸问题)
- 设定合适的发放阈值
优点: 充分利用了人工神经网络作为训练工具的优势,训练效率高。
缺点:
- 整个训练过程与脉冲神经网络本身无关
- 实质上脉冲神经网络只是一个经过特殊封装的ANN
- 本质上是对当前SNN训练方法开发过程中做出的妥协
5.4 方法四:前向前向算法(Forward-Forward Algorithm)
由 Hinton 提出,不需要反向传播,依赖于两次前向过程:
- 第一阶段(正样本) :正样本被输入网络 → 网络计算一个评估值(goodness) → 应用基于对数的局部损失函数 → 每一层参数更新的目标是最大化评估值(相当于最小化局部损失,使评估值相对于阈值尽可能高)
- 第二阶段(负样本) :输入负样本 → 目标是最小化评估值,使其尽可能低于阈值
- 该损失结构类似于逻辑回归中使用的损失函数
特点与适用范围:
- 并非专门为SNN设计,适用于ANN和SNN
- 代表了一种通用的参数更新观念
- 比反向传播更接近生物直觉,与SNN背后的理念相类似
六、脉冲解码:如何将脉冲转为人类可理解的输出
解码过程类似编码过程的反向执行,有以下方式:
- 基于脉冲数量的解码(Rate-based) :通过统计脉冲数量实现解码,对应评分编码的逆过程
- 基于首次延迟时间的解码:作为延迟同步编码的逆过程替代
- 基于脉冲间间隔的解码:可以看作是一种时间编码的变体
最常用的方式——基于膜电位的解码:
- 只需在最后一层神经元的膜电位和最后一个时间步骤使用膜电位作为输出
- 由此提供易于理解的平滑连续输出形式
- 使用的损失函数与ANN相同
说明:这些损失函数主要用于模拟梯度下降,在基于STDP的监督学习方法中,这些函数主要起度量标准的作用,而非真正训练目标。
七、硬件实现:从通用硬件到神经形态芯片
7.1 通用硬件(CPU/GPU)上的挑战
关键要点: 当用传统的CPU或GPU训练SNN时,计算成本实际上比训练非脉冲网络(如ANN)更高。
原因分析:
- 虽然SNN在理论上是节能的,但这种优势不会自动体现在通用硬件上
- SNN的输出是离散脉冲信号,网络需要经历多个时间步才能表示一个连续的值
- 如果ANN可以在一步内处理一个实数,SNN可能需要T个时间步才能生成对应的脉冲序列
- 这种时间展开直接导致计算工作量大幅增加
7.2 FPGA实现
- FPGA(现场可编程门阵列)相对便宜,可用代码编程
- 工作流程模块包括:输入缓冲、膜电位、卷积处理、规格生成、检查等
- 实现依赖数字逻辑模拟神经元,这些操作需要时钟控制和数值计算
- 尽管专门针对核心功能进行了优化,仍然无法真正达到神经形态计算的高效率
7.3 神经形态芯片(如Tianjic芯片)
- 与FPGA或GPU不同,使用专用电路实现神经元和突触
- 采用事件驱动的执行模式:如果没有事件发生,不会执行计算、不会消耗能量
- 芯片内部的F核心阵列可独立同步运行大量神经元,与生物神经网络的并行处理机制非常相似
- 这种架构有助于SNN更有效地实现其节能优势
八、总结
三代神经网络对比
| 特征 | 第一代 | 第二代(ANN/DNN) | 第三代(SNN) |
|---|---|---|---|
| 发明时间 | 1943年(MP神经元) | 约20世纪80-90年代改进 | 近年 |
| 激活函数 | Heaviside阶跃函数 | 可微函数(如ReLU) | 不可微的分段脉冲函数 |
| 参数更新 | 固定或简单规则 | 反向传播+梯度下降 | 多种方式(BPTT+替代梯度、STDP、前向-前向等) |
| 可处理问题 | 仅线性问题 | 非线性问题 | 时间序列、生物启发计算 |
| 能耗 | — | 高(需GPU并行计算) | 理论上低(事件驱动),通用硬件上仍较高 |
核心要点回顾
- 信息载体:脉冲(离散的、单比特的事件),用二进制数字表示
- 脉冲特性:稀疏性和对变化的响应(静态抑制),实现节能和高效感知
- 三种编码:评分编码、延迟编码、Delta调制,各有适用场景和局限性
- LIF模型:通过RC电路数学建模,包含泄漏、积分和发放三个关键过程
- 训练方法:四种主要路径——BPTT+替代梯度、STDP(含基于迹的优化)、ANN转换、前向-前向算法
- 解码方式:最常用基于膜电位的解码,提供平滑连续输出
- 硬件实现:FPGA可编程但效率有限;专用神经形态芯片(如Tianjic)通过事件驱动真正实现节能优势
限制与待确认问题
- SNN在通用硬件(CPU/GPU)上的训练计算成本高于ANN
- STDP是无监督学习算法,这限制了它在监督学习任务中的应用
- ANN到SNN的转换方法本质上牺牲了SNN的特性,只是"特殊封装的ANN"
- 延迟编码的脉冲时间聚集问题可能导致模型处理能力超载
- 评分编码的精确度与时间步T的大小相关,T增大会导致计算成本增加
- 文中提到的LIF模型中涉及的具体参数值(如"71S等于电阻乘以电容值")在转录中表述不够完整,建议参考原始文献确认精确数值。