Moving an internal discussion about this topic into the public mailing list. See below for details and please continue this discussion here.

--
Matt Taylor
OS Community Flag-Bearer
Numenta

-------- Original Message --------
Subject:        Re: New design for spatial pooler
Date:   Sat, 13 Jul 2013 17:53:27 -0700
From:   Subutai Ahmad <[email protected]>
To:     Rahul Agarwal <[email protected]>, Scott Purdy
<[email protected]>
CC:     Gil Shotan <[email protected]>, Engineering
<[email protected]>




I'm a bit confused here. My understanding was also similar to Scott's,
in that the base class would handle arbitrary topologies. A flat spatial
pooler is simply a parameter setting such that the receptive fields of
columns include the whole input space and there is no specific potential
field for the synapses.  Global inhibition as we have it today would
automatically work since "local" includes everything. As such there is
no code for a "flat spatial pooler" to implement and (I believe) there
is no real efficiency loss. What would this class contain?

Similarly, what would the "topology spatial pooler" implement that is
different from the base class?

In addition, I don't think we should spend time implementing cloning
right now.

So, why do we need more than one class right now??

-- Subutai


From: Rahul Agarwal <[email protected]
<mailto:[email protected]>>
Date: Friday, July 12, 2013 4:35 PM
To: Scott Purdy <[email protected] <mailto:[email protected]>>
Cc: Gil Shotan <[email protected]
<mailto:[email protected]>>, Engineering
<[email protected] <mailto:[email protected]>>
Subject: Re: New design for spatial pooler

Oh ok, then that was a misunderstanding I had.

If that is the case, however, then we should re-think where the
"CloningSpatialPooler" would fall in the hierarchy. I don't think the
cloning functionality is specific to vision use cases. It was a
technique for speeding up learning, and it could be used in multiple use
cases that have topology built in.

-Rahul

From: Scott Purdy <[email protected]
<mailto:[email protected]>>
Date: Friday, July 12, 2013 4:14 PM
To: Rahul Agarwal <[email protected]
<mailto:[email protected]>>
Cc: Gil Shotan <[email protected]
<mailto:[email protected]>>, Engineering
<[email protected] <mailto:[email protected]>>
Subject: Re: New design for spatial pooler

Rahul, my impression was that the "SpatialPooler" base class would be
designed for arbitrary topologies.  Then "FlatSpatialPooler" would
specifically implement our current topology and "VisionSpatialPooler"
would have a 2D topology and potentially other vision-specific changes.


On Fri, Jul 12, 2013 at 3:48 PM, Rahul Agarwal
<[email protected] <mailto:[email protected]>> wrote:

    Gil,
    That breakdown looks good. The only suggestion I would have would be
    to rename the "VisionSpatialPooler" to the "TopologySpatialPooler".
    This would more accurate reflect the real difference between it and
    the FlatSpatialPooler, and make it clear that it's uses are not
    restricted to vision use cases.

    -Rahul

    From: Gil Shotan <[email protected]
    <mailto:[email protected]>>
    Date: Friday, July 12, 2013 10:32 AM
    To: Engineering <[email protected]
    <mailto:[email protected]>>
    Subject: New design for spatial pooler


    Hey Guys,

    For those of you who are interested, here is the design I came up
    with for the spatial pooler (see image attached). Basically there
    will be one common ancestor class called SpatialPooler that will
    handle the implementation. It will handle all the calls to the
    Sparse Matrix functions.

    The FlatSpatialPooler will include only the bare functionality that
    we currently use, I.e. No topology and global inhibition.

    The VisionSpatialPooler will include local inhibition, a 2D
    topology, Gaussian-initialized permanence option, etc.

    The ClonedVisionSpatialPooler will include cloning functionality.

    This design will tease apart all these separate functionalities,
    while under the hood use a fast and efficient implementation using a
    sparse matrix. It would also allow us to change the underlying
    implementation (the SpatialPooler class) without affecting the
    public interface exposed through the FlatSpatialPooler class.

    If you have any questions or comments please send them my way!

    Gil.






_______________________________________________
nupic mailing list
[email protected]
http://lists.numenta.org/mailman/listinfo/nupic_lists.numenta.org

Reply via email to