Hi Kevin, It might be reinventing the wheel, but I agree with you. I feel the only way to really understand an algorithm is to implement it yourself, experiment with different variations, etc.
Here's an attempt to answer your questions: 1. There's no direct relationship between the number of columns and the number of synapses on each cell. Each spatial pooler cell gets a random percentage of the input bits assigned to it as potential inputs. For example, if you had 1000 columns and 200 input bits, you might want each column to be potentially connected to say 75% of the 200 inputs. Each potential input corresponds to a synapse with a random permanence. Some of the synapses will be initially unconnected, some will be connected. Usually we initialize the permanence so that roughly half are connected. I'm ignoring topology but see also page 34 under Initialization. (Note: I prefer not to use small numbers like 4 and 16, since spatial pooling really requires large numbers in order to work properly.) 2. This is more of an emergent property than something enforced specifically. With large numbers and random assignment it is extremely unlikely for two segments to contain identical input bits. It is definitely possible (and desirable) for segments to represent disjoint inputs, particularly after learning. Hope this helps, --Subutai On Thu, Jan 30, 2014 at 6:59 AM, Kevin Martin <[email protected]>wrote: > I know this is more or less like reinventing the wheel but I am convinced > that I have to write my own CLA program from scratch if I am to truly > understand the algorithm. Also I hope that I will be able to document the > project in detail so that beginners like me have a better shot at > understanding what's going on. I had cloned some of the fan-based open > source projects found in the wiki and made an attempt to go through them. > > I am trying to implement the spatial pooler first and quickly ran into > doubts : > > 1. Are the input bits grouped into segments equally? For example, if i > have 4 columns and an input vector of 16 bits, will each segment strictly > get 4 and only 4 bits? > > 2. I read in the white paper that no two segments contain the same subset > of inputs but there can be overlaps. Is this a necessary condition? What if > all my segments are disjoint? > > _______________________________________________ > nupic mailing list > [email protected] > http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org > >
_______________________________________________ nupic mailing list [email protected] http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org
