前言:
在学习brian2中,最后一部分历程模拟了STDP突触模型。在阅读相关文献中了解到脉冲时间依赖可塑性(STDP,Spike Timing Dependent Plasticity)属于一种非监督学习机制。
- 最初Hebbian提出:
- 当两个位置上临近的神经元,在放电时间上也相近时,之间很有可能形成突触;
- 若突触能持续引起突出后神经元产生动作电位,则该突触强度会有所增加。
STDP 为脉冲时间编码信息的假说提供了实验基础,强调了发放时序不对称的重要性,扩展了 Hebb 学习理论的空间。
- 若突触后神经元在突出信息未到达之前产生脉冲,则两个神经元之间的突触权值会减弱;
- 反之,突触后神经元在突出信息未到达之后产生脉冲,则两个神经元之间的突触权值会加强。
两者的定义具体可参考文献:脉冲神经网络的监督学习算法研究综述
STDP算法具体可参考百度文库:STDP学习机制
本文主要想说明在实验中发现,更改神经元数目时,对应输出曲线有所变化。当神经元数目越多,左右两只曲线越逼近指数函数,而当神经元数目较少时,曲线不那么平滑,两只曲线的连接线斜率也更小。
from brian2 import *
start_scope()
taupre = taupost = 20*ms
Apre = 0.01
Apost = -Apre*taupre/taupost*1.05
tmax = 50*ms
N = 100
# Presynaptic neurons G spike at times from 0 to tmax
# Postsynaptic neurons G spike at times from tmax to 0
# So difference in spike times will vary from -tmax to +tmax
G = NeuronGroup(N, 'tspike:second', threshold='t>tspike', refractory=100*ms)
H = NeuronGroup(N, 'tspike:second', threshold='t>tspike', refractory=100*ms)
G.tspike = 'i*tmax/(N-1)'
H.tspike = '(N-1-i)*tmax/(N-1)'
S = Synapses(G, H,
'''
w : 1
dapre/dt = -apre/taupre : 1 (event-driven)
dapost/dt = -apost/taupost : 1 (event-driven)
''',
on_pre='''
apre += Apre
w = w+apost
''',
on_post='''
apost += Apost
w = w+apre
''')
S.connect(j='i')
run(tmax+1*ms)
plot((H.tspike-G.tspike)/ms, S.w)
xlabel(r'$\Delta t$ (ms)')
ylabel(r'$\Delta w$')
axhline(0, ls='-', c='k');
当神经元数目N = 100,输出如图1,而N = 6,输出如图2。
回顾STDP,难道说该函数曲线本身是一个概率曲线吗?希望能深入了解一下。