@minddll,
Izvini za kasnjenje, evo kako stvari stoje oko vSTDP-a:
vSTDP se sastoji od dve nezavisne komponente: depresije (LTD) i potencijacije (LTP). Obe komponente koriste varijable koje su vezane za post-sinapticki potencijal membrane (neurona ili kompartmenta).
Nazovimo te dve komponente vLTP i vLTD. One se dobijaju low-pass filtriranjem trenutne vrednosti membranskog potencijala post-sinaptickog neurona/kompartmenta.
Dakle, u svakom koraku simulacije (time-stepu) se ove 2 varijable racunaju u momentu kada se izracuna nova vrendost membranskog potencijala:
Code:
void UpdateStdpVoltages( float v, float &vLtd, float &vLtp, const float tMinus, const float tPlus)
{
vLtd += (v - vLtd) / tMinus;
vLtp += (v - vLtp) / tPlus;
}
^ tMinus i tPlus su konstante koje mozete preuzeti iz radova Claudie Clopath.
LTD doprinos se racuna prilikom "dolaska" pre-sinaptickog akcionog potencijala na post-sinapticki sinapticki receptor (sto znaci da se moze procesirati kao 'event' u momentu dostavljanja AP-a na ciljani neuron):
LTD se radi ako i samo ako filtrirani post-sinapticki potencijal (vLtd) jeste veci od thetaMinus konstante za konkretan neuron.
Takodje, u ovom momentu se varijabla X (za svaku sinapsu) uvecava za 1. X predstavlja filtrirani post-sinapticki potencijal koji eksponencijalno opada brzinom tX
Code:
void LtdUpdate( float &w, float &X, const float vLtd, const float thetaMinus, const float aMinus)
{
//
// w = jacina sinapse
// vLtd = trenutna vrednost filtriranog post-sinaptickog potencijala (u okolini sinaptickog receptora)
// thetaMinus = vSTDP prag za LTD (konstanta)
// aMinus = maksimalna jacina depresije za konkretan post-sinapticki neuron
float ltdFac = vLtd - thetaMinus;
if (ltdFac > 0.0f)
{
//
// Slabljenje sinapticke veze (LTD)
w += aMinus * ltdFac;
}
//
// Uvecati sinapticku varijablu X za 1
// Ako se zeli ograniciti uticaj AP-ova samo na poslednji += treba biti zamenjeno sa =
X += 1.0f;
}
LTP doprinos se racuna prilikom obrade post-sinaptickog potencijala (recimo unutar rutine koja racuna trenutne vrednosti voltaze post-sinaptickog neurona)
LTP se aktivira ako i samo ako su zadovoljena 2 uslova:
- Trenutni membranski potencijal post-sinaptickog neurona je veci od thetaPlus konstante
- Filtirani post-sinapticki potencijal (vLtp) je veci od thetaMinus konstate
Takodje, LTP je zavistan od varijable X, koja predstavlja filtrirani niz akcionih potesnicjala:
Code:
void LtpUpdate( float &w, float &X, const float v, const float vLtp, const float thetaPlus, const float thetaMinus, const float aPlus)
{
//
// w = jacina sinapse
// vLtp = trenutna vrednost filtriranog post-sinaptickog potencijala (u okolini sinaptickog receptora)
// thetaPlus, thetaMinus = vSTDP pragovi (konstante)
// aPlus = maksimalna jacina povecavanja za konkretan post-sinapticki neuron
float ltpFac1 = v - thetaPlus;
float ltpFac2 = vLtp - thetaMinus;
float ltpFac = ltpFac1 * ltpFac2;
if(ltpFac > 0.0f)
{
//
// Pojacavanje sinapticke veze (LTP)
w += aPlus * ltpFac * X;
}
}
Ostaje jos samo jedna stvar: sinapticka varijabla X mora opadati u svakom vremenskom koraku: X -= X / tX
Medjutim, vrlo je neefikasno ovo raditi u svakom vremenskom koraku, posto se ova operacija radi za svaku plasticnu sinapsu.
Ovo je moguce izvesti efikasno tako sto cemo X umanjiti u momentu kada nam vrednost X i treba, i to tako sto ce se X umanjiti za broj proteklih vremenskih koraka: exp(-ts/tX), gde je ts vreme izmedju poslednjeg "osvezavanja" X varijable i trenutnog vremena (delta).
Za ovo je neophodno znati kada je poslednji put X promenjeno, ali ovo obicno nije problem posto se ovaj parametar obicno cuva za svaku sinapsu u simulaciji.
U ovoj varijanti se X "osvezava" pre nego sto mu se doda 1 u LtdUpdate(). Takodje, u LtpUpdate() pre nego sto se vrednost varijable X upotrebi, ona mora biti umanjena za vreme proteklo izmedju trenutnog momenta i poslednjeg osvezavanja koje je izvedeno u LtdUpdate(), posto je moguce da je proteklo vreme od poslednjeg pre-sinaptickog AP-a i momenta kada se radi LTP.
--
Konacno, ovo gore je najjednostavnija implementacija vSTDP-a. Ovu implementaciju je moguce prosiriti sa homeostazom (gde jacina LTD depresije nije konstantna tj. aMinus, vec varijabilna u zavisnosti od prosecne aktivnosti neurona u proteklih N sekundi), renormalizacijom sinaptickih jacina, modulacijom efekta vSTDP-a u zavisnosti od koncentracije dopamina itd...
DigiCortex (ex. SpikeFun) - Cortical Neural Network Simulator:
http://www.digicortex.net/node/1 Videos:
http://www.digicortex.net/node/17 Gallery:
http://www.digicortex.net/node/25
PowerMonkey - Redyce CPU Power Waste and gain performance! -
https://github.com/psyq321/PowerMonkey