CEO summary:
1/ drop InSynapse, move to map[] ?
2/ drop unlimited synapses per Seg, set activation treshold automatically?
----------------------------------------------------------


This work started as a memory-reduction, but leads to how we want to
represent the abstract structures.. Classic tradeoff between readability
and speed.

I want to run huge (human like) regions, which is unbearable with current
demands. So for optimization, I started with InSynapse which is lowest in
the hierarchy, thus brings highest gains (#cols * #cells * #segments *
#synapses).

My first uptake is in https://github.com/numenta/nupic/pull/343
it consists of removing 2 (out of 4) fields from InSynapse, thus dealing
(observable, will publish results later*) mem reduction (about half mem
consumed).

The second solution, and my first question, is more drastical. It removes
InSynapse class completely and stores values in a map[srcCellIdx]=perm.

Drawback: code doesnt 100% fit the whitepaper, separate synapse class was
intuitive (although it only holds a few values).

Advantage:
further mem reduction-no need for class and struck objects (btw, how much
mem does a class and a struct take in c++, I fiddled w/ it in Java?)

code is simpler
good for future optimisations  by the GPGPU guys.

So, what do you think about it?




The other question is about how to handle segmentActivationTreshold ?

it's defined as a fixed #of ON synapses, while I find it biologically
accurate, as neurons also have membrane potential, that when reaches a
certain level, the synapses open. My problem is you have to set both
#synapses per segment, and activationTr., it's a big difference a 6active
out of 16, and out of 60. Could we find some reasonable default (nature
inspired?) and make one of these params dependant on the other? (set
#synapses per Seg, and active treshold is 0.3 of that) thus removing this
knowledge from the user. Or is there a usecase where it'd be of an
advantage to set both of these?

It becomes even worse when you allow "unlimited synapse #" per seg. You can
start with 6 out of 10, and end up with 6 out of 100, what's the meaning?

There's comments in the code that this unlimited synapses (-1 on OPF)
should be removed, do you agree?

Thanks to Subutai for first discussion on this!



Mark

-- 
Marek Otahal :o)
_______________________________________________
nupic mailing list
[email protected]
http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org

Reply via email to