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
