Hello NuPIC,

I've seen a lot of new names on the mailing lists lately, so I thought
this might be helpful.

When NuPIC went open-source in 2013, it was a Python program with a
C++ core. Almost immediately after we open-sourced, the community
wanted to extract all the C++ out of the project and make it
independent of the Python code. Makes sense right? So we did it. But.
not. quite. all. the. way. (that will be important later...)

Almost all the algorithms are written in both Python and C++. We
implement new algorithms in Python and port them to C++ once they are
vetted and optimization is required. So the newest algorithms are
still not ported to C++.

The nupic.core Extraction Plan [1] is outdated, but it contains some
diagrams that outline the basic architecture of NuPIC and nupic.core.
You can see how there is both a C++ interface and a Python API that
can be installed with pip (requires python development headers).
Either one gives you the same algorithmic capacity. The Python API is
easier to use, and contains a basic framework for running experiments
called the OPF [2]. I use the OPF for my experiments, but those with
bigger plans use the Network API [3]. The Network API offers the
building blocks for hierarchy. The OPF is hard-coded to set up a
Network with only one layer, so no hierarchy. The Network API is
basically the same whether you are using the Python or C++ interface.
They each give you ability to build out flexible hierarchies.

But there's a catch. The hierarchy has limited utility without
temporal pooling, and there are still ideas to implement in that field
[4]. We (Numenta) aren't even working on it right now. We think there
are still things to improve within one layer for cells before moving
on to a hierarchy. But the hierarchy will come. (FYI we've implemented
hierarchy in the past in a closed-source project, so we have proven to
ourselves that it works.)

All the recent research [5] has been about sensorimotor integration.
In fact, due to Numenta's open research policy, you can see exactly
what Subutai, Chetan, and other NuPIC research engineers have been
working on [6].

This is basically what NuPIC looks like today [7]. We are in the
process of Step #2 of the "extraction" plan [8]. Richard Crowder [9],
a NuPIC contributor, is working on moving the Temporal Memory
algorithm from Python into C++ right now. Subutai and Scott just had a
video chat with him about the work [10]. This is important because
without the TM algorithm ported to C++, the nupic.core project is not
very useful. The idea has always been to have the C++ nupic.core
project completely independent and feature complete. This will allow
anyone in the community with a language preference to create bindings
to the C++ interface and create an API in their favorite language,
thus exposing the core HTM functionality to many runtime environments
besides Python.

We are also working on a platform-independent serialization technique
using Capn Proto [11], which will allow anyone running NuPIC to save
their Network states completely and re-instantiate them with complete
memory on different platforms. Once all this work is complete, users
of any NuPIC runtime should be able to transfer models across
networks, sharing all the knowledge they've learned about the data
they have seen so far. This should prove to be really useful as NuPIC
evolves and more people are running it in different environments.

So there's a bunch of stuff to digest! I'm trying to get more people
involved, but we are pretty strict with PR reviews. Always nice, but
strict. Anyone in the community is welcome to sign our contributor
license [12] and start working on newbie or "help wanted" [13] tasks.
We are especially interested in getting people more versed in the
algorithms themselves. Several community members have worked on their
own implementations of HTM [14], which seems to be an excellent way to
really understand them. We have bi-weekly planning meetings that are
open to the public [15] and we occasionally have Numenta Office Hours
[16] where Jeff and Subutai address community questions and comments.

[1] https://github.com/numenta/nupic/wiki/nupic.core-Extraction-Plan
[2] https://github.com/numenta/nupic/wiki/Online-Prediction-Framework
[3] https://github.com/numenta/nupic/wiki/NuPIC-Core-Network-API
[4] https://github.com/numenta/nupic/wiki/New-Ideas-About-Temporal-Pooling
[5] https://github.com/numenta/nupic.research
[6] https://github.com/numenta/nupic.research/wiki/Current-Research-Tasks
[7] https://github.com/numenta/nupic/wiki/images/nupic-core-extraction-step3.jpg
[8] 
https://github.com/numenta/nupic/wiki/nupic.core-Extraction-Plan#2-consolidate-all-cla-algorithms-in-nupiccore
[9] https://github.com/rcrowder
[10] https://www.youtube.com/watch?v=OKiO7WTRMm4
[11] https://github.com/numenta/nupic/issues/1450
[12] http://numenta.org/licenses/cl
[13] https://github.com/numenta/nupic/labels/newbie
[14] https://github.com/nupic-community
[15] 
https://www.youtube.com/watch?v=qdB--kl1TLU&index=34&list=PL3yXMgtrZmDrtAuw9jJCNbaJmW3nSD3hC
[16] 
https://www.youtube.com/watch?v=4V9J4tE_cL4&index=10&list=PL3yXMgtrZmDqsqo6hytKjhrkfFNEYDqfn

Questions and comments welcome :).

---------
Matt Taylor
OS Community Flag-Bearer
Numenta

Reply via email to