Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strange handling of zero-delta-t spike pairs in STDP in stdp_facetshw - innocent spikes get thrown away #861

Closed
aserenko opened this issue Nov 27, 2017 · 2 comments
Labels
I: Behavior changes Introduces changes that produce different results for some users S: Normal Handle this with default priority T: Discussion Still searching for the right way to proceed / suggestions welcome ZC: Model DO NOT USE THIS LABEL ZP: Pending DO NOT USE THIS LABEL

Comments

@aserenko
Copy link
Contributor

This is a discussion issue about the implementation of the FACETS-STDP model.

The following code in stdp_connection_facetshw_hom.h is said to implement symmetric nearest-neighbour spike pairing scheme:

  if ( start != finish ) // take only first postspike after last prespike
  {
    minus_dt = t_lastspike - ( start->t_ + dendritic_delay );
  }

  if ( start != finish ) // take only last postspike before current spike
  {
    --finish;
    plus_dt = ( finish->t_ + dendritic_delay ) - t_spike;
  }

  if ( minus_dt != 0 )
  {
    a_causal_ += std::exp( minus_dt / cp.tau_plus_ );
  }

  if ( plus_dt != 0 )
  {
    a_acausal_ += std::exp( plus_dt / cp.tau_minus_ );
  }

If a postsynaptic spike happens at exactly the same moment as the presynaptic one (leading to minus_dt = 0), such a pair is excluded from accounting. This, as far as I know, is done by convention (see, for example, letter by Maximilian Schmidt on August 16, 2017 in the mailing list.

What I am complaining about is that we then do not come back to pick the next postsynaptic spike. For example, imagine presynaptic spikes at times, say, 10 and 30 and postsynaptic spikes at 10 and 20. Processing the update at time 30, we request the history of post-spikes accumulated so far, and get [10, 20]. Then we take the first spike at 10, omit it, and that's all, no facilitation at all during this update. Should we have proceeded next to the post-spike at 20 and accounted the pair post20-pre10 in this case?

@terhorstd terhorstd added ZC: Model DO NOT USE THIS LABEL I: Behavior changes Introduces changes that produce different results for some users ZP: Pending DO NOT USE THIS LABEL T: Discussion Still searching for the right way to proceed / suggestions welcome S: Normal Handle this with default priority labels Dec 11, 2017
@suku248
Copy link
Contributor

suku248 commented May 4, 2018

The issue is probably related to #894.

Comparison of double values has not yet been corrected in stdp_connection_facetshw_hom.h . I have overlooked the model in #924. Thanks @aserenko for spotting this!

A more precise comparison of double values as introduced for other STDP models in #924 could possibly solve this issue, too.

@aserenko
Copy link
Contributor Author

aserenko commented May 4, 2018

As far as I understand, it should indeed be resolved now.

As soon as Archiving_Node::get_history() does not return events with time equal to its start time argument t1, events that would lead to accounting coinciding (zero-delta-t) spike pairs can never be returned by get_history. So, the comparison if ( minus_dt != 0 ) just checks if minus_dt
or plus_dt retain their initial values, which can occur only if no events are returned by get_history().

@aserenko aserenko closed this as completed May 4, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I: Behavior changes Introduces changes that produce different results for some users S: Normal Handle this with default priority T: Discussion Still searching for the right way to proceed / suggestions welcome ZC: Model DO NOT USE THIS LABEL ZP: Pending DO NOT USE THIS LABEL
Projects
None yet
Development

No branches or pull requests

3 participants