04

Spike Encoding

数值怎样进入时间域

45 MIN
CHAPTER 4/12

先建立一个能用的直觉

Rate coding 用观察窗内 spike 数量表达强度;temporal coding 用发放时刻表达信息。前者冗余而稳健,后者稀疏且低延迟但对时序噪声更敏感。

它到底解决了什么麻烦

静态图像本来没有时间轴。编码方案决定了信息复制次数、延迟、稀疏度和网络能否利用精确时序。

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

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

公式 1 / 2Poisson rate
S[t]Bernoulli(p=rmaxxΔt)S[t]\sim\mathrm{Bernoulli}(p=r_{max}x\Delta t)
先用一句话读懂

把像素强度 x 变成发放率,再乘一个时间格的长度,得到这一格发生 spike 的概率。每个时间格做一次伯努利抽样。

符号分别是谁

x
归一化输入强度,通常在 [0,1]
rmax
x=1 时允许的最大发放率,单位 Hz
Δt
一个时间格的秒数
p
该时间格产生 spike 的概率,必须不超过 1

按这个顺序计算

  1. 用 r=rmax·x 把强度换成目标发放率。
  2. 计算 p=rΔt。
  3. 采样 u∼Uniform(0,1),若 u<p 就令 S[t]=1。

代入一组数

x=0.6、rmax=100 Hz、Δt=1 ms=0.001 s,则 p=100×0.6×0.001=0.06;每步有 6% 概率发放。

落到代码就是

p = r_max * x * dt_seconds spike = (torch.rand_like(x) < p).float()
公式 2 / 2Latency
tspike=tmin+(1x)(tmaxtmin)t_{spike}=t_{min}+(1-x)(t_{max}-t_{min})
先用一句话读懂

把数值大小映射成第一次发放的时间:x 越大,(1−x) 越小,于是 spike 越早。

符号分别是谁

x
归一化输入,0 表示最弱,1 表示最强
tmin/tmax
允许发放的最早/最晚时刻
tspike
该神经元的首次发放时间

按这个顺序计算

  1. 先算 1−x,把强度反转成等待比例。
  2. 乘可用时间窗长度 tmax−tmin。
  3. 加上 tmin,得到实际发放时刻。

代入一组数

时间窗 2–12 ms,x=0.8,则 tspike=2+(1−0.8)×10=4 ms;x=0.2 时则为 10 ms。

把几个容易混的概念拆开

Population coding

由一组具有不同感受野的神经元共同编码一个变量,提高分辨率与鲁棒性。

Direct encoding

把连续值直接作为每步电流输入,避免显式生成第一层 spike;这仍可用于 SNN。

跟着机制一步一步走

01

Rate 与 temporal 不是二选一

Rate coding 用冗余换鲁棒性;latency coding 用更少事件换更高时间敏感性。实际系统还常用 direct current encoding、population coding,或在不同层采用不同表征。

  • Rate:实现简单,通常需要更长观察窗。
  • Latency:信息密度高,但对 jitter 和漏事件敏感。
  • Population:多个神经元覆盖不同响应中心,提高分辨率。
带走这一点编码方法应由任务噪声、延迟预算和部署后端共同决定。
02

编码本身也是计算成本

把一张静态图像重复 T 次不是免费的。若第一层直接接收连续电流,可避免显式生成输入 spike;但此时第一层并非纯 spike-driven,需要如实说明。

公式在代码里对应哪一行

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

先写下预测,再动参数

在编码实验输入 0.2、0.5、0.8。比较 rate 编码的随机性与 latency 编码的单次、确定性发放。

打开交互实验室 →

我最常见到的误解

以为编码越“生物真实”越好。任务、延迟预算与部署硬件通常比标签更重要。

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

低时间步 SNN 越来越依赖直接编码、可学习编码或膜电位输入,以减少重复采样造成的成本。

进入论文库 →

别急着翻页,先验算一下

本章检测0/3 已作答

01需要极低 spike 数且能容忍时间抖动较小的传感链路,优先考虑?

02哪种编码通常用更长观察窗换取统计鲁棒性?

03直接把像素强度作为每步第一层电流,意味着?