SNN_LIF模型
LIF模型
Leaky integrity-Fire(LIF)模型
输入信号直接影响神经元的状态,即神经元膜电位,只有当膜电位上升到阈值的时候,才会产生输出信号。
- 膜电位:细胞膜两侧的电位差。只有当膜电位到达阈值的时候,才会发送脉冲信号,影响下一个神经元。
- 动作电位:细胞膜受到外界刺激之后产生的电位变化。
- 静息电位:细胞膜未收到外界刺激的时候的电位。
- 过程:细胞膜受到脉冲刺激之后,变化过程为\(极化\to 去极化 \to 阈值\to 再极化\to 超极化\to 极化\to 不应期\)
基本思想:如果上一个神经元输入不超过阈值的时候,获得的电位会回到静息状态;如果神经元接收到的脉冲进行积分之后到达阈值,会发射一个脉冲信号,对下一个神经元进行刺激,激发之后会引起不应期,即使给予刺激也不会给出相应的反应。
公式:
\(q=\int I(t)dt\) 细胞膜电位积累,给细胞膜充电的过程
细胞膜的等效电流公式:
\(I(t)=I_R+I_C\)
\(I_C=C\frac{du(t)}{dt}\)
\(I_R=\frac{u(t)-u_{res}}{R}\)
\(RC\dot{u}(t)+u(t)-RI(t)=0\)
对方程进行求解:
\(u(t)=RI(t)+C_1e^{-\frac{t}{RC}}\)
计算\(t=0\)的时候,\(u(t)=u_0\),\(C_1\)的值为:
\(C_1=u_0-RI(t)\)
最终得出:
\(u(t)=RI(t)+[u_0-RI(t)]e^{-\frac{t}{RC}}\)
如果\(I(t)=0\),则\(u(t)=u_0e^{-\frac{t}{RC}}\)
如果要输入给计算机计算,则需要进行离散化和递归求解:
\(\tau\frac{du(t)}{dt}=-u(t)+RI(t)\)
\(\tau\frac{u(t+\Delta t)-u(t)}{\Delta t}=-u(t)+RI(t),\Delta t\to 0\)
\(u(t+\Delta t)=u(t)+\frac{\Delta t}{\tau}[-u(t)+RI(t)]\)
仿真参数设计:
仿真步长:0.001
初始状态:\(I(0)=0\)
\(R=5\times 10^{7}\)
\(C=1\times 10^{-10}\)
Python实现:
import matplotlib.pyplot as plt
def LIF(u,R=5e7,C=1e-10,I=0,step_time=1e-3):
u = u + step_time/(R*C)*(-u + R*I)
return u
u = 0.9
num_step = 100
u_trace = []
for step in range(num_step):
u_trace.append(u)
u = LIF(u)
plt.plot(u_trace)
plt.xlabel("Time step")
plt.ylabel("Membrane Potential")
plt.title("LIF")
plt.xlim([0, 50])
plt.ylim([0, 1])
plt.show()