08

Convolutional SNN

空间卷积与时间状态同时存在

45 MIN
CHAPTER 8/12

先建立一个能用的直觉

Conv 提取每个时间步的空间局部特征,LIF 在同一空间位置上沿时间积累。典型模块是 Conv → Norm → LIF。

它到底解决了什么麻烦

事件帧和图像有二维结构。只用全连接会丢掉平移共享与局部感受野。

Math · 不背公式,顺着计算读

每张卡先讲人话,再拆符号、走计算顺序,最后代入一组数。读完后请合上说明,自己复算一次。

公式 1 / 2张量
XRT×B×C×H×W\mathbf{X}\in\mathbb{R}^{T\times B\times C\times H\times W}
先用一句话读懂

这不是一条计算公式,而是一张形状合同:同一批视频/脉冲序列按时间、样本、通道、高、宽五个维度排好。

符号分别是谁

T
序列长度/时间步数
B
彼此独立的样本数量
C
输入极性通道或卷积特征通道
H×W
空间分辨率

按这个顺序计算

  1. 先确认框架是 time-major [T,B,…] 还是 batch-major [B,T,…]。
  2. 逐步模式每次取 X[t],形状为 [B,C,H,W]。
  3. 卷积输出的膜状态通常保持 [B,Cout,H′,W′]。

代入一组数

[8,32,16,28,28] 表示 8 步、32 个样本、16 个通道、28×28。仅 float32 输入就有 8×32×16×28×28≈321 万个数,约 12.3 MiB。

公式 2 / 2时空更新
I[t]=Conv(Sl1[t]),V[t]=βV[t1]+I[t]I[t]=\mathrm{Conv}(S^{l-1}[t]),\quad V[t]=\beta V[t-1]+I[t]
先用一句话读懂

卷积负责同一时间步里的空间特征提取,LIF 递推负责同一空间位置跨时间保留状态。两种结构各做一件事。

符号分别是谁

Conv
对 H/W 做局部共享计算
S(l−1)[t]
上一层本步的脉冲特征图
V[t−1]
当前层上一时间步的膜状态图

按这个顺序计算

  1. 对本步 spike map 做卷积,得到电流图 I[t]。
  2. 把旧膜状态图乘 β。
  3. 逐位置相加,再做阈值与 reset。

代入一组数

某像素位置旧 V=0.5、β=0.9,卷积在本步给出 I=0.6,则更新前 V=1.05;阈值为 1 时该位置发放。

落到代码就是

current = conv(spikes_t) mem = beta * mem + current

把几个容易混的概念拆开

Step mode

逐步模式输入 [B,C,H,W];多步模式一次接收 [T,B,C,H,W]。库的约定不同。

Normalization

BatchNorm 的统计量如何处理时间维会影响训练;常见方案包括共享 BN 或时间相关 BN。

跟着机制一步一步走

01

同时追踪空间与时间

在 [T,B,C,H,W] 中,卷积核沿 H/W 共享,神经元状态沿 T 延续,B 中不同样本彼此独立。一次 reshape 错位就可能把 batch 当成 time,却不一定立刻报错。

  • 逐步模式:循环 T 次,每次输入 [B,C,H,W]。
  • 多步模式:模块直接接收 [T,B,C,H,W]。
  • 状态张量形状通常与卷积输出 [B,C,H,W] 相同。
02

Normalization 也有时间语义

共享 BatchNorm 把不同时间步混在同一统计量中;时间相关 BN 为每个 t 保存独立参数。前者简单,后者表达更细但参数和实现复杂度更高。

公式在代码里对应哪一行

这一章更适合在交互实验里逐步观察;代码实验页还提供了完整训练程序。

先写下预测,再动参数

画出一个 [8,32,16,28,28] 张量并逐维解释。再估算保存所有膜电位需要多少元素。

打开交互实验室 →

我最常见到的误解

把 T 与 B 混淆。代码可能仍运行,却把不同样本当成时间序列,结果没有意义。

到了论文里,它会怎么出现

SEW-ResNet 与后续深层 SNN 重新设计 residual path,避免仅把 ReLU 换成 LIF 导致的优化退化。

进入论文库 →

别急着翻页,先验算一下

本章检测0/3 已作答

01[T,B,C,H,W] 中哪一维承载同一神经元跨步状态?

02将 [T,B,C,H,W] 误 reshape 为 [B,T,C,H,W] 可能怎样?

03卷积后 LIF 的膜电位通常是什么形状?