-
[Dynamic network model] #1 Leaky Integrate and Fire Model카테고리 없음 2025. 1. 26. 21:29
Leaky Integrate and Fire Model
생물학적 뉴런을 모델링한 Leaky Integrate and Fire Model(LIF model)에 대해 설명하고자 한다.
1) 개념
1-1. 뉴런의 전기적 특성과 전기회로의 유사성
1. Pre synaptic neuron에서 오는 input을 dendrites에서 입력 받고, soma 부분에서 integrated된다. 그리고 axon을 통해 output을 출력한다. 시냅스로부터 입력받은 전류는 외부 입력 전류(I(t))로 표현할 수 있다.
2. 뉴런 막(membrane)는 전하의 이동을 조절하고, 전하를 축적하는 역할을 한다. 이는 커페시터 역할(C)을 한다.
3. 뉴런 막의 이온 채널들은 막 전위가 평형 상태가 되도록 유도한다. 열려있는 이온 채널들을 통해 전류가 흐르게 된다. 이러한 이온 채널은 전류를 누출시키는 역할을 한다.(Leaky)
1-2. 회로로 표현

저항 - membrane에서 이온이 빠져나가면서 전류가 누출되는 것
C - membrane에서 이온을 축적하면서 막전위가 올라가는 것
I - 외부전력은 pre synaptic에서 온 전류
1-3. RC 개념
1. 커패시터
Q = C × V
Q: 전하 C: 막 용량 V: 전
C가 커질 수록, 많은 전하를 저장할 수 있다는 의미이다. 저장할 수 있는 용량을 의미한다.
2. 키르히호프의 법칙(Kirchhoff's Law)
한 노드로 들어가는 전류와 나가는 전류의 양은 같다.
폐쇄형 회로에서 모든 전압의 합은 0이다.
3. 전류
전류란 단위시간동안 통과하는 전하의 양이다.

카페시터의 전류는 다음과 같이 정리할 수 있다.

2) LIF 유도
2-1. 누출 전도도

*gL : 누출 전도도
gL = 1 / Rm 으로 표현한다.
이 공식은 옴의 법칙으로 이해하면 된다. V = IR 를 참고하면 된다.
gL는 어느정도의 강도로 누출되고 있는지 라고 생각하면 된다.
*EL : Resting potential of the neuron
평형 전위라고 생각하면 된다.
여기서 V-EL 인 이유는 전위 차의 개념으로 이해하면 된다. 전위 차가 전압이기 때문이다.
즉 V > EL 일 경우에는 depolarized, 반대의 경우에는 hyperpolarized이다.
2-2. KCL

카페시터에 저장되는 전류 I는 저항에 누출되는 전류(IL) + 외부에 주입되는 전류(Ix)이다.
위의 두 가지 식을 합치면

이를 시간 상수에 대한 식으로 정리하면

여기서 시간 상수는

이다.
시간 상수의 의미는 외부 입력에 따라 막전위가 변화하는 정도이다.
시간 상수가 크면, 느리게 변한다.
타우가 클 수록, -> 1/타우
dV/dt = 타우가 작아야지 빠르게 막전위는 빠르게 변화하게 됩니다. 속도의 계산으로 변화할 수 있음
뉴런의 외부 입력에 따라 얼마나 빠르게 변화하는지를 의미

이는 이 미분 방정식의 해를 구한 것이다.
3) 해석
3.1 수식을 전압에 대한 식으로 변환하였을 때

다음과 같은 식을 얻을 수 있다.
여기서 t가 무한대로 갈 때 전압은 subthreshold 상태에서 일정한 막전위 값을 갖는다는 것을 확인할 수 있다.
3.2 spike 표현

불응기 및 spike를 표현하기 위해서 다음과 같이 나타낸다.
4) 구현
def run_LIF(pars, Iinj, stop=False): # Set parameters V_th, V_reset = pars['V_th'], pars['V_reset'] tau_m, g_L = pars['tau_m'], pars['g_L'] V_init, E_L = pars['V_init'], pars['E_L'] dt, range_t = pars['dt'], pars['range_t'] Lt = range_t.size # Lt는 총 time step 수 tref = pars['tref'] # Initalize v = np.zeros(Lt) # 막전위를 저장할 배열 v[0] = V_init #막전위 초기값은 V_init Iinj = Iinj * np.ones(Lt) # 입력 전류의 값이 일정하게 만들어준다. # If current pulse, set beginning and end to 0, Pulse 모양을 만들기 위해서. if stop: Iinj[:int(len(Iinj) / 2) - 1000] = 0 #앞과 끝부분을 입력 전류를 0으로 초기화 한다. Iinj[int(len(Iinj) / 2) + 1000:] = 0 # Loop over time rec_spikes = [] # record spike times 스파이크 발생 시점 기록 tr = 0. # the count for refractory duration 불응기 계산. for it in range(Lt - 1): if tr > 0: # check if in refractory period, 0보다 크면 불응기 기간 v[it] = V_reset # set voltage to reset, 그 시점에는 reset된 막전위 tr = tr - 1 # reduce running counter of refractory period, 불응기 한 time step만큼 감소 elif v[it] >= V_th: # if voltage over threshold rec_spikes.append(it) # record spike event 스파이크 튄 시점 기록 v[it] = V_reset # reset voltage tr = tref / dt # set refractory time, 불응기 시간인 tr 계산 # Calculate the increment of the membrane potential dv = (-(v[it] - E_L) + Iinj[it] / g_L) * (dt / tau_m) #시간 상수로 이루어진 식으로 dv 계산 # Update the membrane potential v[it + 1] = v[it] + dv # Get spike times in ms rec_spikes = np.array(rec_spikes) * dt #time step 번호에 시간 간격을 곱해 실제 spike가 일어난 시간을 알아냄. return v, rec_spikes # Simulate LIF model v, sp = run_LIF(pars, Iinj=250, stop=True)https://colab.research.google.com/drive/1IkmEFUaP2s8HT6nQG0GcalwQWUG8MEqi#scrollTo=m_vEr8-pKsGo
LIF model
Colab notebook
colab.research.google.com