先建立一个能用的直觉
Rate coding 用观察窗内 spike 数量表达强度;temporal coding 用发放时刻表达信息。前者冗余而稳健,后者稀疏且低延迟但对时序噪声更敏感。
它到底解决了什么麻烦
静态图像本来没有时间轴。编码方案决定了信息复制次数、延迟、稀疏度和网络能否利用精确时序。
Math · 不背公式,顺着计算读
每张卡先讲人话,再拆符号、走计算顺序,最后代入一组数。读完后请合上说明,自己复算一次。
把像素强度 x 变成发放率,再乘一个时间格的长度,得到这一格发生 spike 的概率。每个时间格做一次伯努利抽样。
符号分别是谁
- x
- 归一化输入强度,通常在 [0,1]
- rmax
- x=1 时允许的最大发放率,单位 Hz
- Δt
- 一个时间格的秒数
- p
- 该时间格产生 spike 的概率,必须不超过 1
按这个顺序计算
- 用 r=rmax·x 把强度换成目标发放率。
- 计算 p=rΔt。
- 采样 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()把数值大小映射成第一次发放的时间:x 越大,(1−x) 越小,于是 spike 越早。
符号分别是谁
- x
- 归一化输入,0 表示最弱,1 表示最强
- tmin/tmax
- 允许发放的最早/最晚时刻
- tspike
- 该神经元的首次发放时间
按这个顺序计算
- 先算 1−x,把强度反转成等待比例。
- 乘可用时间窗长度 tmax−tmin。
- 加上 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 已作答