900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Matlab实现snn代码 SNN系列|神经元模型篇(3)SRM

Matlab实现snn代码 SNN系列|神经元模型篇(3)SRM

时间:2019-03-03 04:11:37

相关推荐

Matlab实现snn代码 SNN系列|神经元模型篇(3)SRM

Spike Response Model

参考:

[1] A Framework for spiking neuron models: Spike Response Model

[2] Neuron Dynamics

[3] Spiking Neuron Models

[4] Scholarpedia

LIF模型的发展,LIF是其特殊化情况

Wulfram Gerstner 于[1993][/article/Spike-response_model]年发表

不能描述以下现象:离子通道的阻断、延迟峰值启动、阈值对输入的依赖性

源起

Hodgkin-Huxley模型通过一个通用方程加三个参数方程来精确模拟神经元的动作电位,但是计算复杂。对HH方程组的简化方向有两个:

m用m 0 ( u ) m_0(u)m0​(u)代替,因为其变化很快

n和h粗略地用一个变量表示

于是就有了二维模型Morris LeCar Model和FitzHugh-Nagumo Model。

从阈值的角度单纯地模拟外形,观察精确的神经元模型,可以看到神经元脉冲发放是有一个阈值的,当神经元超过阈值便发放脉冲。

u ( t ( f ) ) = ϑ and d d t u ( t ( f ) ) > 0 u\left(t^{(f)}\right)=\vartheta \quad \text { and } \quad \frac{d}{d t} u\left(t^{(f)}\right)>0u(t(f))=ϑanddtd​u(t(f))>0

其次,神经元的脉冲的样子是相同的,于是假设神经元在t ^ \hat{t}t^发放脉冲,当此后没有电流输入时,神经元膜电势逐渐回落到静息电位。对t > t ^ t>\hat{t}t>t^,

u ( t ) = η ( t − t ^ ) + u r e s t η ( t − t ^ ) → 0 for t − t ^ → ∞ u(t)=\eta(t-\hat{t})+u_{\mathrm{rest}}\\ \eta(t-\hat{t}) \rightarrow 0 \text { for } t-\hat{t} \rightarrow \inftyu(t)=η(t−t^)+urest​η(t−t^)→0fort−t^→∞

u r e s t u_{rest}urest​表示静息电位,η \etaη表示一个脉冲的标准形式。

另当有外界电流输入时,神经元膜电势会变大,不仅与上次脉冲发放时间t ^ \hat{t}t^有关,也与外部电流I \mathcal{I}I有关,ϵ \epsilonϵ用来表示线性响应函数。

u ( t ) = η ( t − t ^ ) + ∫ 0 t − t ^ ϵ ~ ( t − t ^ , s ) I ( t − s ) d s + u r e s t u(t)=\eta(t-\hat{t})+\int_{0}^{t-\hat{t}} \tilde{\epsilon}(t-\hat{t}, s) \mathcal{I}(t-s) d s+u_{\mathrm{rest}}u(t)=η(t−t^)+∫0t−t^​ϵ~(t−t^,s)I(t−s)ds+urest​

这里要说明的是,因为要模拟动作电位的外形,通过线性变换,我们是可以把u r e s t u_{rest}urest​拿掉的。

那么该如何得到上述两个响应函数呢?使用刺激电流对静息态神经元进行刺激,使其产生动作电位

I ( t ) = c q 0 Δ for 0 < t < Δ \mathcal{I}(t)=c \frac{q_{0}}{\Delta} \quad \text { for } 0I(t)=cΔq0​​for0

然后测量神经元膜电势,即可得到

η ( t − t ^ ) = u ( t ) − u r e s t for t > t ^ \eta(t-\hat{t})=u(t)-u_{\mathrm{rest}} \quad \text { for } \quad t>\hat{t}η(t−t^)=u(t)−urest​fort>t^

若取电荷与时间差均为单位量,并假设神经元之前并未发放脉冲,一直处于静息状态,则

ϵ ~ ( ∞ , t ) = 1 c [ u ( t ) − u r e s t ] \tilde{\epsilon}(\infty, t)=\frac{1}{c}\left[u(t)-u_{\mathrm{rest}}\right]ϵ~(∞,t)=c1​[u(t)−urest​]

若t ^ \hat{t}t^时刻,神经元发放脉冲,然后对神经元施加刺激电流,测量膜电势,可得一般情况下的ϵ \epsilonϵ

ϵ ~ ( t − t ^ , t ) = 1 c [ u ( t ) − η ( t − t ^ ) − u r e s t ] \tilde{\epsilon}(t-\hat{t}, t)=\frac{1}{c}\left[u(t)-\eta(t-\hat{t})-u_{\mathrm{rest}}\right]ϵ~(t−t^,t)=c1​[u(t)−η(t−t^)−urest​]

当然,生物中的神经元不可能总是以单个存在,也不能总是外部电极施加刺激电流,而是突触前神经元释放脉冲而导致突触后电流I ( t ) = α ( t − t j ( f ) ) \mathcal{I}(t)=\alpha\left(t-t_{j}^{(f)}\right)I(t)=α(t−tj(f)​),然后公式同上。

标准S R M SRMSRM

标准的SRM主要考虑两个部分:一是脉冲发放后的膜电势变化,二是对外部刺激电流(电极电流或突触前神经元发放的脉冲的突触后电流)。

对前者,对应上图的η ( t − t ^ i ) \eta(t-\hat{t}_i)η(t−t^i​),这个核函数描述的是当膜电势达到阈值后的脉冲发放以及复极化于超极化阶段;对后者,对应的上图小的虚线,这个核函数描述的是脉冲发放后(若之前没有脉冲发放,则认为是∞ \infty∞时间时发放了脉冲)膜电势对输入刺激的响应,需要注意的是核函数ϵ \epsilonϵ和κ \kappaκ有两个输入参数,这是为什么呢?

这是因为神经元发放脉冲后,许多主动的离子通道与静息态是不同的,不能像静息态一样对输入刺激进行响应,即不应期(绝对不应期+相对不应期),所以第一个输入参数描述的就是脉冲发放后的一段时间内对输入刺激是有削弱作用的,方便理解,可以认为具有1 − e − t 1-e^{-t}1−e−t形式。

此外,在标准模型中,阈值使用恒定值。

u i ( t ) = η ( t − t ^ i ) + ∑ j w i j ∑ f ϵ i j ( t − t ^ i , t − t j ( f ) ) + ∫ 0 ∞ κ ( t − t ^ i , s ) I e x t ( t − s ) d s t = t i ( f ) ⇔ u i ( t ) = ϑ ( t − t ^ i ) and d u i ( t ) d t > 0 \begin{aligned} u_{i}(t)=& \eta\left(t-\hat{t}_{i}\right)+\sum_{j} w_{i j} \sum_{f} \epsilon_{i j}\left(t-\hat{t}_{i}, t-t_{j}^{(f)}\right)+\int_{0}^{\infty} \kappa\left(t-\hat{t}_{i}, s\right) I^{\mathrm{ext}}(t-s) \mathrm{d} s \end{aligned}\\ t=t_{i}^{(f)} \quad \Leftrightarrow \quad u_{i}(t)=\vartheta\left(t-\hat{t}_{i}\right) \text { and } \frac{\mathrm{d} u_{i}(t)}{\mathrm{d} t}>0ui​(t)=​η(t−t^i​)+j∑​wij​f∑​ϵij​(t−t^i​,t−tj(f)​)+∫0∞​κ(t−t^i​,s)Iext(t−s)ds​t=ti(f)​⇔ui​(t)=ϑ(t−t^i​)anddtdui​(t)​>0

简化模型S R M 0 SRM_0SRM0​

为了简化模型,将ϵ \epsilonϵ和κ \kappaκ的第一个参数设为∞ \infty∞,即不考虑脉冲发放后离子通道状态对膜电势对输入刺激的影响

ϵ 0 ( s ) = ϵ i j ( ∞ , s ) κ 0 ( s ) = κ i j ( ∞ , s ) \begin{aligned} \epsilon_{0}(s) &=\epsilon_{i j}(\infty, s) \\ \kappa_{0}(s) &=\kappa_{i j}(\infty, s) \end{aligned}ϵ0​(s)κ0​(s)​=ϵij​(∞,s)=κij​(∞,s)​

简化后的SRM模型表述如下

u i ( t ) = η ( t − t ^ i ) + ∑ j w i j ∑ t j ( f ) ϵ 0 ( t − t j ( f ) ) + ∫ 0 ∞ κ 0 ( s ) I ext ⁡ ( t − s ) d s η ( t − t ^ ) = δ ( t − t ^ ) − η 0 exp ⁡ ( − t − t ^ τ recov ) u_{i}(t)=\eta\left(t-\hat{t}_{i}\right)+\sum_{j} w_{i j} \sum_{t_{j}^{(f)}} \epsilon_{0}\left(t-t_{j}^{(f)}\right)+\int_{0}^{\infty} \kappa_{0}(s) I^{\operatorname{ext}}(t-s) \mathrm{d} s\\ \eta(t-\hat{t})=\delta(t-\hat{t})-\eta_{0} \exp \left(-\frac{t-\hat{t}}{\tau_{\text {recov }}}\right)ui​(t)=η(t−t^i​)+j∑​wij​tj(f)​∑​ϵ0​(t−tj(f)​)+∫0∞​κ0​(s)Iext(t−s)dsη(t−t^)=δ(t−t^)−η0​exp(−τrecov​t−t^​)

ϵ 0 \epsilon_0ϵ0​的一个可能例子:ϵ 0 ( s ) = 1 1 − ( τ s / τ m ) [ exp ⁡ ( − s τ m ) − exp ⁡ ( − s τ s ) ] \epsilon_{0}(s)=\frac{1}{1-\left(\tau_{s} / \tau_{m}\right)}\left[\exp \left(-\frac{s}{\tau_{m}}\right)-\exp \left(-\frac{s}{\tau_{s}}\right)\right]ϵ0​(s)=1−(τs​/τm​)1​[exp(−τm​s​)−exp(−τs​s​)]

简化后的模型的原理如上图,外部电流输入后,经过κ \kappaκ核函数滤波(视为一种影响),当膜电势增加到阈值时,神经元发放脉冲,反馈两个影响:提升阈值,以及做一个超极化到静息电位的过程。

为什么要改变阈值呢?在标准模型中,如果是脉冲发放后有电流输入,神经元对该刺激的响应是有削减的,但简化模型将第一个参数设为∞ \infty∞,使该影响消失,为了使该不应期阶段神经元对外界刺激的响应变差,除了削弱输入,还可以提高标准(阈值),于是也就有了动态阈值的说法。

η ( t − t ^ ) = δ ( t − t ^ ) − η 0 exp ⁡ ( − t − t ^ τ recov ) ϑ ( t − t ^ ) = ϑ − η 0 ( t − t ^ ) \eta(t-\hat{t})=\delta(t-\hat{t})-\eta_{0} \exp \left(-\frac{t-\hat{t}}{\tau_{\text {recov }}}\right)\\ \vartheta(t-\hat{t})=\vartheta-\eta_{0}(t-\hat{t})η(t−t^)=δ(t−t^)−η0​exp(−τrecov​t−t^​)ϑ(t−t^)=ϑ−η0​(t−t^)

使用动态阈值后的简化模型如图所示:

简化模型对外界刺激的整个过程如下:

Matlab代码

暂未实现

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。