新疆建網(wǎng)站程序站外推廣
HH神經(jīng)元模型基礎(chǔ)知識與實現(xiàn)
- HH神經(jīng)元模型的建立
- Hodgkin以及Huxley的工作
- 基礎(chǔ)知識
- 模型構(gòu)建
- 鉀離子電流
- 鈉離子電流
- 模型計算
- 實現(xiàn)代碼 -python
- 仿真結(jié)果
- 參考文獻
HH神經(jīng)元模型的建立
1963年,Hodgkin和Huxley通過他們對神經(jīng)元動作電位的解釋與Eccles分享了諾貝爾獎,這類神經(jīng)元模型也被稱為HH模型。盡管HH模型年代久遠,而且仍然有許多不足,但是這一模型在現(xiàn)在仍然在使用,并且有望在計算神經(jīng)科學領(lǐng)域發(fā)揮作用
Hodgkin以及Huxley的工作
1.他們利用電壓鉗位放大器來研究電流與電壓的關(guān)系。通過改變細胞外離子 的濃度(主要是鈉離子和鉀離子),推斷離子所攜帶的電流。
2. 將實驗結(jié)果與數(shù)學模型相擬合
3. 求解數(shù)學模型。通過比較模型的動作電位與實驗記錄的動作電位驗證模型的正確性
基礎(chǔ)知識
在開始介紹具體內(nèi)容前,我們先簡單復(fù)習一下神經(jīng)元的基礎(chǔ)知識。神經(jīng)元產(chǎn)生動作電位主要有五個階段,分別是極化,去極化,反極化,復(fù)極化,超極化。
1.極化:神經(jīng)纖維膜外正電荷聚集,膜內(nèi)負電荷聚集(外正內(nèi)負)。即神經(jīng)元的靜息狀態(tài)。
2.去極化: 神經(jīng)受到刺激時,門控Na?通道打開,膜外的Na?短期內(nèi)大量涌入膜內(nèi),造成了內(nèi)膜電位升高。
3.反極化:門控Na?通道關(guān)閉,門控K?通道打卡,K?大量外流,膜電位恢復(fù)靜息電位。
4.超極化:鉀離子通道完全打開后,這時鉀離子的大量外流使得質(zhì)膜再度極化,以至于超過原來的靜息電位,稱為超極化;超極化后膜電位會恢復(fù)至靜息電位。
模型構(gòu)建
在HH模型中主要研究三種離子電流,分別是上文提到的鈉離子電流 INa,鉀離子電流 IK,以及他們稱之為leak current 的泄露電流 IL。
神經(jīng)元的總體電流方程如下:
I = I C + I i = C m d V d t + I i . (1.1) I = I_C + I_i = C_m\frac {dV}{dt} + I_i \tag{1.1}. I=IC?+Ii?=Cm?dtdV?+Ii?.(1.1)
其中:
I i = I N a + I K + I L (1.2) I_i = I_Na+I_K+I_L \tag{1.2} Ii?=IN?a+IK?+IL?(1.2)
且C_m為常數(shù)。
每種粒子的電流大小都是由對應(yīng)的電壓乘以該離子的膜電導所計算出來:
I N a = g N a ( V ? E N a ) I K = g K ( V ? E k ) I L = g ˉ L ( V ? E L ) (1.3) I_Na = g_Na(V-E_Na)\\ I_K = g_K(V-E_k)\\ I_L = \bar g_L(V-E_L) \tag{1.3} IN?a=gN?a(V?EN?a)IK?=gK?(V?Ek?)IL?=gˉ?L?(V?EL?)(1.3)
由于漏電流中的電導為常數(shù),因此我們主要介紹如何計算鉀離子以及鈉離子電流。
鉀離子電流
Hodgkin和Huxley通過實驗發(fā)現(xiàn),對細胞膜上的鉀離子通道進行了假設(shè)。他們假設(shè)細胞膜上含有多個離子通道,且每個離子通道都有多個獨立的門控粒子控制,假設(shè)n是單個門控粒子打開狀態(tài)的概率。在他們的實驗中發(fā)現(xiàn),每個鉀離子通道都由四個獨立的門控離子所控制,因此鉀離子電導gk和門控粒子打開狀態(tài)概率n的關(guān)系為:
g k = g ˉ k n 4 (1.4) g_k = \bar g_kn^4 \tag{1.4} gk?=gˉ?k?n4(1.4)
其中g(shù)K bar 是一個常數(shù),表示的是鉀離子的最大電導值。
另外,如果處于開放狀態(tài)的粒子占比為n,那么關(guān)閉狀態(tài)的粒子就是1-n,并且他們的狀態(tài)可以相互轉(zhuǎn)化。我們假設(shè)從關(guān)閉狀態(tài)變?yōu)殚_放狀態(tài)粒子的概率為αn, 從開放狀態(tài)變?yōu)殛P(guān)閉狀態(tài)的粒子的概率為βn, 那么我們可以得到n隨著時間變化的公式:
d n d t = α n ( 1 ? n ) ? β n n (1.5) \frac {dn}{dt} = α_n(1 - n) - β_nn \tag{1.5} dtdn?=αn?(1?n)?βn?n(1.5)
通過實驗數(shù)據(jù)可以得到αn以及βn的公式:
α n = 0.01 V + 55 1 ? e x p ( ? ( V + 55 ) / 10 ) β n = 0.125 e x p ( ? ( V + 65 / 80 ) ) (1.6) α_n = 0.01 \frac {V+55}{1 - exp(-(V+55)/10)} \\ β_n = 0.125exp(-(V+65/80)) \tag{1.6} αn?=0.011?exp(?(V+55)/10)V+55?βn?=0.125exp(?(V+65/80))(1.6)
另外,我們設(shè)時間為無窮大時的n為:
n ∞ = α n α n + β n (1.7) n_∞ = \frac {\alpha_n}{\alpha_n+\beta_n} \tag{1.7} n∞?=αn?+βn?αn??(1.7)
時間常數(shù)為:
τ n = 1 α n + β n (1.8) \tau_n = \frac 1{\alpha_n + \beta_n} \tag{1.8} τn?=αn?+βn?1?(1.8)
鈉離子電流
我們可以使用推到鉀離子電流的類似方法推到鈉離子電流,但是鈉離子電流與鉀離子電流不同的是,在反極化的過程中鈉離子通道會關(guān)閉,也就是失活,而鉀離子通道會保持一直開放。因此Hodgking和Huxley認為不能想鉀離子一樣只包含一個門控變量n,為此他們引入了另一個門控變量h來表示失活水平,類似的,h隨著時間變化的公式為:
d h d t = α h ( 1 ? h ) ? β h h (1.9) \frac {dh}{dt} = \alpha_h(1-h) - \beta_h h \tag{1.9} dtdh?=αh?(1?h)?βh?h(1.9)
并且鈉離子通道中的門控粒子打開的概率設(shè)為m,m與n和h一樣,與時間變化的公式為:
d m d t = α m ( 1 ? m ) ? β m m (1.10) \frac {dm}{dt} = \alpha_m(1-m) - \beta_m m \tag{1.10} dtdm?=αm?(1?m)?βm?m(1.10)
最后,通過實驗驗證我們可以得到鈉離子電導的公式:
g N a = g ˉ N a m 3 h (1.11) g~Na~ = \bar g_Nam^3h \tag{1.11} g?Na?=gˉ?N?am3h(1.11)
m和h在時間無窮大的計算方式與n相同,只需將式子中的α和β?lián)Q成對應(yīng)下標的參數(shù)即可,在這里就不一一贅述。
αm和βm , αh和βh的計算公式:
α m = 0.1 V + 40 1 ? e x p ( ? ( V + 40 ) / 10 ) β m = 4 e x p ( ? ( V + 65 ) / 18 ) (1.12) \alpha_m = 0.1 \frac{V+40}{1-exp(-(V+40)/10)} \\ \beta_m = 4exp(-(V+65)/18) \tag{1.12} αm?=0.11?exp(?(V+40)/10)V+40?βm?=4exp(?(V+65)/18)(1.12)
α h = 0.07 e x p ( ? ( V + 65 ) / 20 ) β h = 1 e x p ( ? ( V + 35 ) / 10 ) + 1 (1.13) \alpha_h = 0.07exp(-(V+65)/20)\\ \beta_h = \frac1{exp(-(V+35)/10) +1} \tag{1.13} αh?=0.07exp(?(V+65)/20)βh?=exp(?(V+35)/10)+11?(1.13)
模型計算
簡要介紹一下如何計算并實現(xiàn)HH神經(jīng)元模型,具體參數(shù)可參考實現(xiàn)代碼
1.通過初始膜電壓(靜息電位)帶入α和β的相關(guān)公式將α和β的初始值計算出來。
2.將計算出來的α和β值代入1.7式計算出初始的n,m,h的值。這一步可以理解為n,m,h的初值就是靜息態(tài)時間無窮大的時候的值
3. 將計算出來的m, n, h待會電流表達式,計算出神經(jīng)元的總電流
4. 將總電流帶入1.1式計算神經(jīng)元膜電壓
實現(xiàn)代碼 -python
import numpy as np
import matplotlib.pyplot as pltnum_spike = 0
I_p = 10.0
dt = 0.01
T = 100
t = np.arange(0, T, dt)m = np.zeros(len(t))
n = np.zeros(len(t))
h = np.zeros(len(t))alpha_m = np.zeros(len(t))
beta_m = np.zeros(len(t))
alpha_n = np.zeros(len(t))
beta_n = np.zeros(len(t))
alpha_h = np.zeros(len(t))
beta_h = np.zeros(len(t))V_m = np.zeros(len(t))
g_K = np.zeros(len(t))
g_Na = np.zeros(len(t))g_K_max = 36
g_Na_max = 120
g_L = 0.3
E_K = -12
E_Na = 115
E_L = 10.6
V_rest = -70
C_m = 1.0for i in range(1, len(t) - 1):# V_m[1] = -65alpha_m[i] = 0.1 * ((25 - V_m[i]) / (np.exp((25 - V_m[i]) / 10) - 1))beta_m[i] = 4 * np.exp(-1 * V_m[i] / 18)alpha_n[i] = 0.01 * ((10 - V_m[i]) / (np.exp((10 - V_m[i]) / 10) - 1))beta_n[i] = 0.125 * np.exp(-1 * V_m[i] / 80)alpha_h[i] = 0.07 * np.exp(-1 * V_m[i] / 20)beta_h[i] = 1 / (np.exp((30 - V_m[i]) / 10) + 1)if i == 1:m[i] = alpha_m[i] / (alpha_m[i] + beta_m[i])n[i] = alpha_n[i] / (alpha_n[i] + beta_n[i])h[i] = alpha_h[i] / (alpha_h[i] + beta_h[i])g_Na[i] = m[i] ** 3 * g_Na_max * h[i]g_K[i] = n[i] ** 4 * g_K_maxI_Na = g_Na[i] * (V_m[i] - E_Na)I_K = g_K[i] * (V_m[i] - E_K)I_L = g_L * (V_m[i] - E_L)I_ion = I_p - I_K - I_Na - I_LV_m[i + 1] = V_m[i] + I_ion / C_m * dtm[i + 1] = m[i] + (alpha_m[i] * (1 - m[i]) - beta_m[i] * m[i]) * dtn[i + 1] = n[i] + (alpha_n[i] * (1 - n[i]) - beta_n[i] * n[i]) * dth[i + 1] = h[i] + (alpha_h[i] * (1 - h[i]) - beta_h[i] * h[i]) * dtif V_m[i] > 0 - V_rest:if (V_m[i] > V_m[i - 1]) and (V_m[i] > V_m[i + 1]):num_spike = num_spike + 1V_m = V_m + V_restplt.plot(t, V_m)
plt.show()
在這里使用的是歐拉法求解上文中的微分方程。
仿真結(jié)果
參考文獻
[1]: Principles of computational modelling in neuroscience-Cambridge University Press