4. 脉冲神经元模型:LIF模型、突触动力学、发放率
好,咱们正式进入神经元模型这部分。我当年刚接触硅光计算芯片时,第一个困惑就是:
一个光子脉冲跟生物神经元的动作电位,到底差在哪?
说白了,数学模型几乎一样,只是物理载体不同。今天咱们就拆开 LIF、突触和发放率这三块。
4.1 LIF 模型——最常用的「漏电积分点火」
LIF 全称 Leaky Integrate-and-Fire。名字很直白:
- 漏电(Leaky)——膜电位会随时间衰减,像一杯漏水的杯子。
- 积分(Integrate)——输入电流不断往杯里加水。
- 点火(Fire)——水满溢出,产生一个脉冲,然后复位。
公式其实就一个微分方程:
τ_m * dV/dt = - (V - V_rest) + R_m * I(t)
τ_m 是膜时间常数,V_rest 是静息电位,R_m 是膜电阻,I(t) 是输入电流。一旦 V 超过阈值 V_th,就输出一个脉冲,然后 V 强制回到 V_reset。
💡 关键参数速记
| 参数 | 典型值(生物) | 硅光芯片常用值 |
|---|---|---|
| τ_m | 10~20 ms | 0.1~1 ns |
| V_th | -55 mV | 归一化 1.0 |
| V_reset | -70 mV | 0.0 |
| 不应期 | 1~2 ms | 0.05~0.2 ns |
时间尺度差了好几个数量级,但数学本质一模一样。我早期移植算法时,就因为没注意时间常数缩放,仿真跑出来全乱套——避坑:先统一归一化单位再调参数。
4.2 突触动力学——电流怎么传递
光脉冲通过波导到达下一级,不是瞬间就激活的。突触电流有上升沿和衰减过程。
最常见的模型是指数衰减型突触电流:
I_syn(t) = w * exp(-t / τ_syn) (t ≥ 0)
其中 w 是突触权重,τ_syn 是时间常数。更精确一点会用双指数模型,包含上升和下降两个时间常数:
I_syn(t) = w * (exp(-t/τ_decay) - exp(-t/τ_rise))
记不记得?你想想看,如果 τ_rise 远小于 τ_decay,突触电流就近似脉冲冲击,适合做快速光开关。
🛠️ 我在做片上光互连测试时,遇到过一个问题:双指数模型参数太多,调优花了两周。后来我发现,对硅光计算芯片,单指数模型就够了——因为光调制器的响应本身就在皮秒级,额外加一个上升时间意义不大。
经验:能用单指数绝不双指数,除非你证明确实需要描述缓慢的化学突触。
4.3 发放率——从时间编码到速率编码
脉冲序列怎么翻译成有意义的信号?两种主流方式:
- 瞬时发放率:通过核函数平滑脉冲序列,得到时变速率
r(t)。 - 平均发放率:在固定时间窗口内数脉冲个数,除以窗口长度。
我在优化硅光计算芯片的数据流时,发现平均发放率硬件实现更简单——只要一个光子计数器就行了。但代价是精度损失,尤其是当脉冲频率很高时,计数器会溢出。
⚠️ 特别注意: 发放率不是线性编码的。LIF 神经元的输入-输出曲线是 S 型(类似 sigmoid)。你给一个恒定电流,输出频率不是随输入线性增长,而是先缓慢后急剧再饱和。
# 一个简单例程:LIF 发放率 vs 输入电流
def lif_rate(I, tau=1.0, V_th=1.0):
# 假设稳态解:f = 1 / (tau * log((I*R + V_reset - V_rest) / (I*R + V_th - V_rest)))
# 这里简化
if I <= 0: return 0
return 1.0 / (tau * np.log((I + 0.0)/(I + 0.2)))
写代码时一定记得加防除零和防负对数的保护。我曾经吃过亏,跑了半天全返回 NaN。
4.4 知识框架图
你看这张图,三种模型是串在一起的。没有突触动力学,LIF 就不知道输入电流怎么来;没有发放率,我们无法量化输出。在硅光芯片里,这三步全部由光波导、微环谐振器和光电探测器来物理实现。
4.5 实践小贴士——参数调优顺序
如果你刚开始搭脉冲神经元网络仿真,我建议按这个顺序调参:
- 先固定 LIF 基本参数(τ_m, V_th, V_reset),用直流电流扫一遍 I-O 曲线。
- 再调突触时间常数:单指数只有一个参数,很快就能匹配。
- 最后选发放率计算窗口:窗口太短抖动大,窗口太长丢失时间信息。
🔑 一句话总结:
LIF 是「水滴石穿」——不断积分直到阈值;突触是「涟漪」——电流不会瞬间消失;发放率是「沙漏」——数多少个脉冲就代表多少信息。