前言:
在學習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,難道說該函數曲線本身是一個概率曲線嗎?希望能深入瞭解一下。