Brian2学习——经典STDP模型简介及代码实现

经典STDP模型

STDP(Spike-Timing-Dependent Plasticity,脉冲时间依赖可塑性)可认为是对Hebb学习规则的一种拓展。在实际的生物体中,神经细胞是一个复杂的动力学系统,具有静息、兴奋、发放脉冲,接收脉冲、膜电位累积、不应期等多种状态和行为。研究发现,两个神经元之间突触连接强度的变化与神经元发放脉冲的精确时间紧密相关。具体地,突触前和突触后神经元发放脉冲的相对时间差对神经元之间突触连接权值改变的方向和大小具有关键作用。

STDP被如下等式定义[1]:
Δ w = ∑ t p r e ∑ t p o s t W ( t p o s t − t p r e ) W ( Δ t ) = { A p r e e − Δ t / τ p r e , Δ t > 0 A p o s t e Δ t / τ p o s t , Δ t < 0 \Delta w = \sum_{t_{pre}}\sum_{t_{post}}W(t_{post} - t_{pre}) \\ W(\Delta t) = \begin{cases} A_{pre} e^{-\Delta t/\tau_{pre}},\quad \Delta t > 0\\ A_{post} e^{\Delta t/\tau_{post}}, \quad \Delta t < 0 \end{cases} Δw=tpretpostW(tposttpre)W(Δt)={ApreeΔt/τpre,Δt>0AposteΔt/τpost,Δt<0
用brian2实现:

from brian2 import *
import numpy as np
import matplotlib.pyplot as plt

# 参数见Competitive Hebbian learning through spike-timing-dependent synaptic plasticity论文
tau_pre = tau_post = 20*ms
A_pre = 0.01
A_post = -A_pre * 1.05
delta_t = np.linspace(-50, 50, 100)*ms
W = where(delta_t > 0, A_pre * exp(-delta_t / tau_pre), A_post * exp(delta_t / tau_post))

plot(delta_t/ms, W)
xlabel(r'$\Delta t$ (ms)')
ylabel('W')
axhline(0, ls='-', c='k')

plt.savefig(r'C:\Users\wzc\Documents\自学技术笔记\img\demo_stdp.png')
plt.show()

得到如下的结果:
在这里插入图片描述

然而,直接使用这个方程模拟它将是非常低效的,因为我们必须对所有的尖峰对求和。这在生理上也是不现实的,因为神经元无法记住之前的所有尖峰时间。事实证明,有一种更有效、生理上更合理的方法可以获得同样的效果。我们定义两个新变量 a p r e 、 a p o s t a_{pre}、a_{post} apreapost,分别是前突触活动和后突触活动的‘trace’,并有如下的微分方程:
τ p r e d a p r e d t = − a p r e τ p o s t d a p o s t d t = − a p o s t \tau_{pre} \frac{da_{pre}}{dt} = -a_{pre} \\ \tau_{post} \frac{da_{post}}{dt} = -a_{post} τpredtdapre=apreτpostdtdapost=apost
当前突触神经元产生脉冲尖峰时,更新前突触trace和突触权重:
a p r e = a p r e + A p r e w = w + a p o s t a_{pre} = a_{pre} + A_{pre} \\ w = w + a_{post} apre=apre+Aprew=w+apost
类似地,当后突触神经元产生脉冲尖峰时:
a p o s t = a p o s t + A p o s t w = w + a p r e a_{post} = a_{post} + A_{post} \\w = w + a_{pre} apost=apost+Apostw=w+apre采用python中的Brian2公式格式实现如下,其中taupre和taupost是时间常数 τ p r e 、 τ p o s t \tau_{pre}、\tau_{post} τpreτpost,event-driven代表是脉冲事件驱动的,当有脉冲到来时,采用此STDP规则进行更新。

    'eqs_stdp': '''
       w : volt
       dapre/dt = -apre/taupre : volt (event-driven)
       dapost/dt = -apost/taupost : volt (event-driven)
       ''',
    'eqs_on_pre': '''
       v_post += w
       apre += Apre
       w = clip(w+nu_pre*apost, wmin, wmax)
       ''',
    'eqs_on_post': '''
       apost += Apost
       w = clip(w+nu_post*apre, wmin, wmax)
       '''

可以证明的,这种方式跟原始经典的STDP规则是完全一样的。

参考文献

[1] Song S, Miller K D, Abbott L F. Competitive Hebbian learning through spike-timing-dependent synaptic plasticity[J]. Nature neuroscience, 2000, 3(9): 919-926.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值