nomenclature callerID-SNN
callerID-SNNs: Nomenclature and computer program symbols
Only a few concepts are listed here at present
- synaptic :
- blurb - NOT a spike, but is the "signal"
fir example : perhaps a temporary membrane potential increase for a neuron from one of the synaptic releases due to the firing of another neuron
- pattern (synPatA)
- is a sequence of all nSynPat*tSyn [past, future] synPatA due to the firing of all connected neurons, with respect to a specific neuron
- keep in mind that the synPats from the same firing neuron differ for each connected neuron due to [dendritic synapse] connection geometries and delays!
- sequence :
- is a sequence of all nSynPat*tSyn [past, future] synaptic [blurb, noise]s with respect to a specific neuron
- this includes, but is distict from, synPatAs
Computer programming symbols (written in the QNial language)
- fireT_[01, 02, 03,...] (*)= firing (spiking) timeScales. T_01 is the lowest (first) = tSyn*nSynSeq. For now (23Aug2023), subsequent timeScales are a fractal (multiple) of the previous - factor-of-3 is used in honour of Puetz's "Universal Wave Series" (super-duper Mayan calendar-like for many known periodicities).
- firT_01L (L) = firing for a given nur that has occurred at T01 timeScale, as recognized from synPatA for nur.
- futureSynSeqA = synSeq that will occur in future nSynPat*tSyn from firing of other neurons
- nNur (*) = number of neurons connected to nur
- nSynPat (*) = number of synaptic blurbs in synPat
- nSynSeq (*) = number of synaptic blurbs in synSeq
- first spike on left (oldest to newest) - just an easy convention on QNial
- nurInnL = input neurons (eg from sensory, whatever), have synPatL, don't have firPatL
- patMatchL = nSynPat list that has l for each nur that matches pat
- seqMatchL = nSynSeq list that has l for each nur that matches seq
- patL_match_patL = list of lists because pat is already a list
- seqL_match_patL = synSeqL EACHLEFT EACHRIGHT synPat_in_synSeq synPatL
- list of lists because seq is already a list
- synFracPat (*) = fraction of synPat that is l, for initial random generation of synPats
- synFracNse (*) = fraction of synSeq that is noise, for initial random generation of synSeqs
- synPatA (L) = "synaptic blurb" time sequences for nurs connected to a specific nur
- this is how nur IDs other nurs, for now assume starts in soma
- different neur(j) perceive different synPats for same nur(i)!
- here it is assumed that synaptic connections are "tuned" (see below)
- synSeqA (L) = [past current, future" synaptic blurbs seen by a nur, including :
- future blurbs coming in from a spike from a connected neuron
- noise
- these time sequences advance one position each tSyn
- tSyn (*) = smallest delta(time) in callerID-SNN, detects post-synaptic blurbs
- assume something like 1 millisecond (will have to check this, no effect for now)
symbols after words defined above :
- (*) common basis for ALL nurs (simplicity)
- (A) denotes an array, usually 2D, but can be any integer dimension to the limit of computer memory
- (L) denotes a list
- appending an L often indicates that the symbol applies to ALL neurons in overall system
- [pat, seq] are already lists by definition, so L is not appended for one [pat, seq]
- appending to symbols above mean that some symbols end with 'LL', 'AL' etc
synPatA [tune, fire] :
- "tuning" of synPatA : must ensure "pragmatic novelty" for each nur in SynPatA (connected neurons). It is not important to [maximize, optimize] dissimilarities at this stage. A "pragmatic difference" is sufficient.
This is VERY different from normal Neural Network "parameter adjustment" (training). It is nowhere close to network evolution.
- pre-training to ensure sufficent dissimilarities of synPats .
- perhaps easiest to generate & test, than to plan?
- very easy to add a nur synPat when these are sparse
- much harder when synPats are dense (approaching limits, for example)
- I'm thinking of "waves" for tuning retinotopic mapping (J.P. Thivierge)
- "ID recognition" of a synPat in synSeq :
- first syn (synaptic blurb) is on the left (oldest to newest)
- this means that the leftmost syn must = l, for BOTH syn[Pat, Seq] for there to be a test of callerID (test is run each tSyn)
- if synPatA is [complete, recognized] in updated synSeqA,
- it changes nurSpkA@(nur nurInn) (@tSyn=0) to l (true)
- it also may NOT match the actual spiking of nurInn!,
- due to losses, confusion of source, etc
other symbol components
- str string
- pat pattern
- fir firing sequence (already is a list, so no ending L for a single nur)
post-fix notations :
- _init = initializing value
- _std = standard test value to compare to calculated result
- _test = operator that tests operator with same name root (without _test)
$ loaddefs (link d_Qndfs 'MindCode/callerID-SNNs/callerID-SNNs.ndf')
library file, NOT run by itself, run from header
- create new [patterns, sequences] - randomness approach
- nSeq_makeRdm_spkSeq IS OP spkTimeFrac nSeq - random spike sequence of length nSeq
- spkSeq_in_spkPat IS OP spkSeq spkPat - simplest filter requires an absolute match
in the sense that ALL spkPat = 1 are also in spkSeq, noise doesn't matter
$ loaddefs link d_Qndfs 'MindCode/callerID-SNNs/code test/callerID-SNNs- test.ndf'
- input pattern pat_in@(neur(i) neur(j) synPat(neur(i))), where :
- synPatL_synSeqL_matchTest IS
- nSynSeq_patFrac_seqFrac_matchTest IS OP nSynSeq nsynPatL nsynSeqL patFrac seqFrac
- nSynSeq used for both synPatL and synSeqL (easy to compare!, buffer nsynPat if too short)
- firT01L_synSeqA_advance_test IS - firing of one nur only
- advances synSeqA, including "future" synSeqA to come in from firT01L
- current tSyn is midpoint of synSeqA
- current tSyn is midpoint of synSeqA
- firT01L_synSeqA_advance_test IS - for testing, wouldn't normally know firT01L in future
- for simplicity, it is assumed that firing occurs only tFire = nSynPat * tSyn
- that way, all nSynPat old synSeqA are cleared
- current tSyn is midpoint of synSeqA