脉冲神经网络(SNN)是模拟生物神经行为的计算模型,它们通过模拟神经元的脉冲活动来处理信息。SNN的研究可以追溯到最早的被动膜模型,这些模型试图描述神经元的电生理特性。
本博客将从SNN的起源讲起,逐步深入到HH模型的基本原理,再到Izhi模型的简化与应用。我们将通过Yamamoto2024的论文,探讨SNN如何与湿实验相结合,以及这种结合如何推动了神经科学和人工智能的交叉发展。
本文框架如下:
- 什么是SNN脉冲神经元模型?
- SNN如何用于实验?
- SNN的适用场景?
- 参考链接(附SNN|Izhikevich神经元网络仿真代码)
什么是SNN
神经网络模型
- 第一代神经网络:感知器,在1950年被提出,算法只有两层,输入层和输出层。只含有线性结构
-
第二代神经网络:BP神经网络,于1980年左右,Rumelhart、Williams 等人提出第二代神经网络多层感知器 (MLP)。可以引入一些非线性的结构
-
第三代神经网络:脉冲神经网络 (SNN) ,除了神经元和突触状态之外,还将时间概念纳入了其中,更能模拟大脑神经元动力学。
SNN的常见模型
最基础SNN - 1902 被动膜模型
从生物机理的角度对模型进行构建,神经元可以认为是:
“盐水中的小袋子,上面有一些孔”
其中,
- 绝缘的细胞膜:认为是电容 C ,
- 膜上面的离子通道:认为是电阻 R,
- 通过树突接受其他神经元的电信号:表示为电流 I I I,
- 静息电位为 u rest u_{\text{rest}} urest:静息电位,由于浓度扩散效应和离子通道不均匀所导致
- 膜内外的电压差为 u u u:这就是主要关注膜电位的时间序列
被动膜模型 - 公式推导
-
电流 I ( t ) I(t) I(t) 进来之后分成2部分,写成
I ( t ) = I R ( t ) + I C ( t ) I(t)=I_R(t) + I_C(t) I(t)=IR(t)+IC(t)
-
根据电容 C 的公式 C = Q / U C=Q/U C=Q/U,移向后关于时间求导
C ⋅ d U d t = d d t Q C \cdot \frac{d U}{d t}=\frac{d}{d t} Q C⋅dtdU=dtdQ
根据电荷量与电流的公式: d d t Q = I C \frac{d}{d t} Q=I_C dtdQ=IC,所以
I C = C ⋅ d U d t I_C=C\cdot \frac{dU}{dt} IC=C⋅dtdU
-
根据电压电流的关系: U = R ⋅ I U=R\cdot I U=R⋅I,以及电压并联电压相等,
U = U r e s t + U R U=U_{rest}+U_R U=Urest+UR
我们可以得到: U − U r e s t = U R = R ⋅ I R U-U_{rest}=U_R=R\cdot I_R U−Urest=UR=R⋅IR,从而
I R = 1 R ( U − U r e s t ) I_R=\frac{1}{R}(U-U_{rest}) IR=R1(U−Urest) -
将上面两个公式带回公式(1),得:
I ( t ) = 1 R ( U − U rest ) + C ⋅ d U d t I(t)=\frac{1}{R}\left(U-U_{\text {rest }}\right)+C \cdot \frac{d U}{d t} I(t)=R1(U−Urest )+C⋅dtdU
移项:
C ⋅ d U d t = − 1 R ( U − U rest ) + I ( t ) C \cdot \frac{d U}{d t}=-\frac{1}{R}\left(U-U_{\text {rest }}\right)+I(t) C⋅dtdU=−R1(U−Urest )+I(t)
两边同时乘R:
R ⋅ C ⋅ d u d t = − ( U − U rest ) + R ⋅ I ( t ) R \cdot C \cdot \frac{d u}{d t}=-\left(U-U_{\text {rest }} \right)+R \cdot I(t) R⋅C⋅dtdu=−(U−Urest )+R⋅I(t)
将 R C RC RC记为 τ \tau τ,得:τ ⋅ d d t U = − ( U − U r e s t ) + R I ( t ) \tau \cdot \frac{d}{d t} U=-\left(U-U_{r e s t}\right)+R I(t) τ⋅dtdU=−(U−Urest)+RI(t)
这就是最终的被动膜模型,也可以对这个模型稍作化简
将 V = U − U r e s t V=U-U_{rest} V=U−Urest,得:
τ ⋅ d d t V = − V + R I ( t ) \tau \cdot \frac{d}{d t} V=-V+R I(t) τ⋅dtdV=−V+RI(t)
被动膜模型 - 稳态分析
τ ⋅ d d t V = − V + R I ( t ) \tau \cdot \frac{d}{d t} V=-V+R I(t) τ⋅dtdV=−V+RI(t)
对上述公式稍做分析:
- 如果 I = 0 I=0 I=0,则V会指数衰减到0
- 如果 I > 0 I>0 I>0,则当V变到与RI一样大时停止
- 当施加了一段时间得I之后取消,则V会先上升之后再衰减到0.
SNN模型种类 - LIF模型
在被动膜模型的基础上增加阈值重置条件,并在发放后设置绝对不应期之后,
得到LIF模型
τ ⋅ d d t U = − ( U − U r e s t ) + R I ( t ) if U ≥ U thresh then U ← U rest \tau \cdot \frac{d}{d t} U=-\left(U-U_{r e s t}\right)+R I(t) \\ \text { if } U \geq U_{\text {thresh }} \text { then } U \leftarrow U_{\text {rest }} τ⋅dtdU=−(U−Urest)+RI(t) if U≥Uthresh then U←Urest
SNN模型种类 - HH模型
将钠钾离子通道考虑其中,得到HH模型
{ V ˙ = 1 C [ − g ˉ N a h ( V − V N a ) m 3 − g ˉ K ( V − V K ) n 4 − g ˉ L ( V − V L ) + I ] m ˙ = a m ( V ) ( 1 − m ) − b m ( V ) m h ˙ = a h ( V ) ( 1 − h ) − b h ( V ) h n ˙ = a n ( V ) ( 1 − n ) − b n ( V ) n \left\{\begin{array}{l} \dot{V}=\frac{1}{C}\left[-\bar{g}_{\mathrm{Na}} h\left(V-V_{\mathrm{Na}}\right) m^3-\bar{g}_{\mathrm{K}}\left(V-V_{\mathrm{K}}\right) n^4-\bar{g}_{\mathrm{L}}\left(V-V_{\mathrm{L}}\right)+I\right] \\ \dot{m}=a_m(V)(1-m)-b_m(V) m \\ \dot{h}=a_h(V)(1-h)-b_h(V) h \\ \dot{n}=a_n(V)(1-n)-b_n(V) n \end{array}\right. ⎩ ⎨ ⎧V˙=C1[−gˉNah(V−VNa)m3−gˉK(V−VK)n4−gˉL(V−VL)+I]m˙=am(V)(1−m)−bm(V)mh˙=ah(V)(1−h)−bh(V)hn˙=an(V)(1−n)−bn(V)n
其中,
- V \mathrm{V} V 是膜电位,
- C \mathrm{C} C 是用来代表细胞膜的电容
- I ( t ) I(t) I(t) 是 t \mathrm{t} t 时刻的外接电流
-
V
N
a
,
V
K
V_{N a}, V_K
VNa,VK 是钠钾通道的电势,
V L V_L VL 是其他通道平衡电势 - g ˉ N a , g ˉ K \bar{g}_{\mathrm{Na}}, \bar{g}_{\mathrm{K}} gˉNa,gˉK 是不同通道的电导
- m , h , n m, h, n m,h,n 用来控制离子通道的开关
{ a m ( V ) = 0.1 ( V + 40 ) 1 − exp ( − V + 40 10 ) b m ( V ) = 4 exp ( − V + 65 18 ) a h ( V ) = 0.07 exp ( − V + 65 20 ) b h ( V ) = 1 1 + exp ( − V + 35 10 ) a n ( V ) = 0.01 ( V + 55 ) 1 − exp ( − V + 55 10 ) b n ( V ) = 0.125 exp ( − V + 65 80 ) \left\{\begin{array}{l} a_m(V)=\frac{0.1(V+40)}{1-\exp \left(-\frac{V+40}{10}\right)} \\ b_m(V)=4 \exp \left(-\frac{V+65}{18}\right) \\ a_h(V)=0.07 \exp \left(-\frac{V+65}{20}\right) \\ b_h(V)=\frac{1}{1+\exp \left(-\frac{V+35}{10}\right)} \\ a_n(V)=\frac{0.01(V+55)}{1-\exp \left(-\frac{V+55}{10}\right)} \\ b_n(V)=0.125 \exp \left(-\frac{V+65}{80}\right) \end{array}\right. ⎩ ⎨ ⎧am(V)=1−exp(−10V+40)0.1(V+40)bm(V)=4exp(−18V+65)ah(V)=0.07exp(−20V+65)bh(V)=1+exp(−10V+35)1an(V)=1−exp(−10V+55)0.01(V+55)bn(V)=0.125exp(−80V+65)
一般认为钠离子通道的作用是去极化,钾离子通道是恢复变量。 V N a > V K V_{N a}>V_{K} VNa>VK
当 V < V N a V<V_{N a} V<VNa且钠离子通道打开后,钠离子流入导致正电流,从而膜电位上升;
同理可以分析,钾离子的作用主要作为恢复电位。
将SNN用于实验
本文使用SNN - lzhikevich模型 2003
这个模型主要对神经元的上升阶段,用二次函数来进行简化刻画。用
d v i d t = 0.04 v i 2 + 5 v i + 140 − u i + η + I i , d u i d t = a ( b v i − u i ) , \begin{gathered} \frac{\mathrm{d} v_i}{\mathrm{~d} t}=0.04 v_i^2+5 v_i+140-u_i+\eta+I_i, \\ \frac{\mathrm{d} u_i}{\mathrm{~d} t}=a\left(b v_i-u_i\right), \end{gathered} dtdvi=0.04vi2+5vi+140−ui+η+Ii, dtdui=a(bvi−ui),
当神经元发放之后,与LIF模型类似,直接将膜电位和恢复变量重置
if v i > 30 m V , then { v i ← c u i ← u i + d \text { if } v_i>30 \mathrm{mV} \text {, then }\left\{\begin{array}{l} v_i \leftarrow c \\ u_i \leftarrow u_i+d \end{array}\right. if vi>30mV, then {vi←cui←ui+d
-
其中 v i v_i vi表示膜电位, u i u_i ui表示恢复变量。
-
0.04 v i 2 + 5 v i 0.04 v_i^2+5 v_i 0.04vi2+5vi刻画了钠离子通道去极化的过程,
-
钾离子通道或恢复变量,用 u i u_i ui 统一刻画。
-
η \eta η是噪声,噪声强度这里取1
-
为了简化,本文将所有神经元的参数都设为相同
a = 0.02, b = 0.2, c = −65 mV, d = 8
突触电流的作用方式
从第 i 个节点到第 j 个节点的电流,由下面公式给出
I i j ( t ) = ∑ t l < t W i j exp ( − t − t l − Δ i j τ ) H ( t − t l − Δ i j ) I_{i j}(t)=\sum_{t_l<t} W_{i j} \exp \left(-\frac{t-t_l-\Delta_{i j}}{\tau}\right) H\left(t-t_l-\Delta_{i j}\right) Iij(t)=tl<t∑Wijexp(−τt−tl−Δij)H(t−tl−Δij)
其中
-
W i j W_{i j} Wij为连边权重,
-
t l t_l tl是第 l l l 次发放的时间
-
当 t > 0 t>0 t>0, H ( t ) = 1 H(t)=1 H(t)=1,否则 H ( t ) = 0 H(t)=0 H(t)=0
-
exp ( − t − t l − Δ i j τ ) \exp \left(-\frac{t-t_l-\Delta_{i j}}{\tau}\right) exp(−τt−tl−Δij) 描述了外部电流的作用时间
τ = 10 ms \tau=10\text{ms} τ=10ms 是突触常数 (Orlandi et al., 2011)
-
Δ i j \Delta_{i j} Δij 是发放的作用时延,取均值为0.6ms,标准差0.1ms的随机数
(Shimba et al., 2021)
连边权重的设置
考虑一个拓扑培养皿群的结构如下
-
如果 i 和 j 位于不耦合的培养皿,则 W i j = 0 W_{ij}=0 Wij=0
-
如果培养皿耦合,且顺着培养皿的连接方向,则设为 ( 1 + D ) p inter (1+\mathcal{D}) p_{\text {inter }} (1+D)pinter ;
若逆着培养皿的方向,则设为 ( 1 − D ) p inter (1-\mathcal{D}) p_{\text {inter }} (1−D)pinter , p inter ∈ [ 0 , 0.5 ] p_{\text {inter }} \in[0,0.5] pinter ∈[0,0.5]D = 1 \mathcal{D}=1 D=1 意味着完全按照方向来连接, D = 0 \mathcal{D}=0 D=0 意味着没有方向。
如右图所示 -
同一个培养皿中的神经元连接概率为1。
右图只是示意
-
有连接之后,再确定连接权重 W i j W_{ij} Wij,连接权重设置为均值为3而标准差为1。
分析SNN仿真结果
方向性对同步的影响
- 无方向性实验:设置D=0,此时培养皿没有方向性,此时神经元之间的连接为随机连接。神经元的发放频率较低,而且发放的模式比较同步。
- 严格的方向性实验:设置D=1,此时神经元连接完全按照拓扑结构的方向进行连接,此时神经元的发放频率更高,而且不那么同步。
统计指标:全局网络激活 global network activation (GNA)
全局网络激活(GNA),符号表示为Φ,被定义为参与集体活动事件的神经元的平均比例。如每次集体活动,参与神经元比例为100%,认为这个系统是完全同步的。
识别集体活动的算法。
- 从第一个尖峰神经元i开始,在 2 τ 2\tau 2τ时间窗口扫描从神经元 i i i接受信号的神经元的尖峰, τ \tau τ是突触时间常数10ms
- 拿到新的峰进来之后,对新的峰再在 2 τ 2\tau 2τ的时间内迭代执行,直到没有进一步的尖峰被检测到
如果一轮检测完成,有超过5个尖峰被检测到,就被定义为集体时间。
统计指标:平均相关系数
- 将尖峰序列与高斯核卷积,得到平滑波形。记平滑之后的波形为 J i ( t ) J_i(t) Ji(t)
- 将神经元 i 与神经元 j 的平滑后波形进行逐点乘积,然后对乘机进行积分
- 将得到的结果除以两个波形个字的标准差,即得到相关系数。
统计指标 - 功能复杂性指标
因为不同的状态最终是以概率分布的形式呈现,皮尔逊相关系数也存在一个概率分布。将概率分布从 0 到 1 切分成
B
=
20
B=20
B=20 份,第 k 份的相关系数的概率大小用
p
k
(
r
i
j
)
p_k(r_{ij})
pk(rij) 表示。注意这里k表示份数,而不是状态索引
Θ = 1 − B 2 ( B − 1 ) ∑ k = 1 B ∣ p k ( r i j ) − 1 B ∣ \Theta=1-\frac{B}{2(B-1)} \sum_{k=1}^B\left|p_k\left(r_{i j}\right)-\frac{1}{B}\right| Θ=1−2(B−1)Bk=1∑B pk(rij)−B1
其实我感觉公式应该是
Θ = 1 − B ( B − 1 ) ∑ k = 1 B ∣ p k ( r i j ) − 1 B ∣ \Theta=1-\frac{B}{(B-1)} \sum_{k=1}^B\left|p_k\left(r_{i j}\right)-\frac{1}{B}\right| Θ=1−(B−1)Bk=1∑B pk(rij)−B1
比如
-
当相关系数平均分布于每一个小格子中时,此时意味系统在某个时刻的状态,完全平均的处于任何一种状态。
此时每个格子中的概率都是 1 / B 1/B 1/B,此时 Θ = 1 \Theta=1 Θ=1 -
当系统的复杂性没那么强,对于某一个特定的相关系数有很大的概率,比如某个相关系数的概率为1。此时
Θ = 1 − B ( B − 1 ) ⋅ ( B − 1 B ) = 0 \Theta=1-\frac{B}{(B-1)} \cdot\left(\frac{B-1}{B}\right)=0 Θ=1−(B−1)B⋅(BB−1)=0
方向性对统计指标的影响
- 左图:展示了 Φ ( GNA ) \Phi (\text{GNA}) Φ(GNA) 在 无方向 和 有方向 的 SNN模型 中的差异。小方块标识了它们的中位数。可以看到,增加了方向性之后,全局网络激活 指标变小了。这意味着方向性的增加会导致同步性的减弱。这与实验的数据是一致的。
- 中图:平均相关系数。增加方向性之后,平均相关系数变小了。
- 右图:功能复杂度。增加方向性之后,网络的功能复杂度增加了。
SNN的适用场景
-
优点:
- SNN可以产生连续化的输出
- SNN的方程形式较简单,仿真速度块
-
缺点:
- SNN作为不连续的模型,缺乏有效的数学工具对SNN的长期的动力学进行分析。只适用于仿真场景
下期预告
SNN部分讲完了,很感激您能看到这里,大家如果对于文中的内容有什么问题或建议,都可以在评论区提出。我们之后也会努力去改正!
下一期我们将讲解 状态转移模型 的用法,这是一个更简单但更数学的模型,很容易进行大规模的神经元仿真,并且可以用来系统的长期稳态。
欢迎点赞+关注呀。