we can install & run the Nupic. When compare to Necortex/HTM theory, i still have question. Hope anyone help explain.
In NUPIC , in TM we use 2048 minicolums and 32 cell per colums that means we have totally 2048 * 32=65536 cells.
But every cell has only 128 dendrite segments ( for prediction), and each segment has maximum 32 synapes ( maxSegmentsPerCell=128,
maxSynapsesPerSegment=32) => each cell has only 128*32=4096 synapes .
That means each cell can not connect ( has synapes) to all other cells ( 65535 cells) in TM.
So the questions is:
Which 4096 cells that a cell connect to for prediction ( etablish synapes) ?
These synapses ( between a cell to 4096 orther cells) are fixed or changed everytime has a new feedforward ?
Which 4096 cells that a cell connect to for prediction ( etablish synapes) ?
The Temporal Memory layer learns the connection on the fly. To be particular, in every time step, segments can grow up-to maxNewSynapse synapses to previous winning cells.
These synapses ( between a cell to 4096 orther cells) are fixed or changed everytime has a new feedforward ?
They grow as time goes on can decays if the relation turns out to be false.
Yes, every cell can only go up to 32 synapses per segment. Thatâs the limit. Synapses doesnât grow in that segment anymore. Though it can grow in others if it choose to.
Indeed, a single cell does not connect to all of them. It connects sparsely, only to those that are relevant.
To one from a subset of those which were active at previous step, when it is time for this cell to âpredictâ that it will fire next. This works because activations are sparse, and a subset of a sparse vector is sufficient to identify another sparse vector with huge probability. So⊠in effect, only those synapses are required to be remembered for the TM to learn a sequence of events.
Connecting all of them would be self defeating. For TM and⊠for brains.
thank you @gmirey, i can understand that in the neocortex theory . But in the NUPIC, i mean in programming algorithm, it has to be defined clearly. So how can NUPIC choose the cells to make synapses to ?? ( random or near cells or �) do you know that ? pls show me. thank you.
Oh, okay.
Well, I have a limited knowledge of python and current NuPIC implementation, but after a quick search, I found that each post-synaptic cell in NuPIC has a map of its synapses per pre-synaptic cell. When one asks whether a cell had distal segments considered âactivatedâ (hence cell should be predictive), seems like NuPIC runs this:
[384] for cell in activePresynapticCells:
for synapse in self._synapsesForPresynapticCell[cell]:
flatIdx = synapse.segment.flatIdx
numActivePotentialSynapsesForSegment[flatIdx] += 1
if synapse.permanence > threshold:
numActiveConnectedSynapsesForSegment[flatIdx] += 1
itâs quite backwards as compared to how I envision that myself, but it should work for the purpose of identifying which particular cells a synapse is connected to, right? either presynaptic cell is an existing key to the â_synapsesForPresynapticCellâ map for that post-synaptic cell (and map carries seg index and permanence for it), or it is not.
[595] Pseudocode:
mark all cells as active
if there are any matching distal dendrite segments
find the most active matching segment
mark its cell as a winner cell
(learning)
grow and reinforce synapses to previous winner cells
else
find the cell with the least segments, mark it as a winner cell
(learning)
(optimization) if there are prev winner cells
add a segment to this winner cell
grow synapses to previous winner cells
(this learning algorithm applies to a bursting âcolumnâ: one which did not predict it would fire, where youâll see most of the segment or synaptic growth occurring).
Implementation details: in our software implementation, we make some simplifying assumptions that greatly speed up simulation time for larger networks. Instead of explicitly initializing a complete set of synapses across every segment and every cell, we greedily create segments on a random cell and initialize potential synapses on that segment by sampling from currently active cells. This happens only when there is no match to any existing segment. In our simulations N = 2048, M = 32, k = 40. We typically randomly connect between 20 and 40 synapses on a segment, and Ξ is around 15. Permanence values vary from 0 to 1 with a connection threshold of 0.5. p+ and pâ are small values that are tuned based on the individual dataset but typically less than 0.1. The full source code for the implementation is available on Github at GitHub - numenta/nupic-legacy: Numenta Platform for Intelligent Computing is an implementation of Hierarchical Temporal Memory (HTM), a theory of intelligence based strictly on the neuroscience of the neocortex..
But i still hope find a intuitive and easier document to undestand what method that Nupic Core use for choose synapes, dendrite segments (in phases initialization, learning+updating, âŠ)