Building HTM Systems (WIP Document)

I recently asked who was building HTM systems and got quite a few people respond. That’s great, because I’m starting a big educational project, called Building HTM Systems. It is an interactive document with visualizations and sample code. It will explain SP and TM in enough detail that readers can implement it themselves, complete with running sample code and live visualizations in the browser (the sample HTM will be in JavaScript). I’m currently working on it at https://buildinghtm.systems.

This is a big project and I just started on it. I’d like to share updates and new content when I make progress, which is why I’m posting now.

I’m trying to explain why choosing receptive fields when setting up spatial pooling is important. You can see a couple of new visuals at https://buildinghtm.systems/spatial-pooling/. Please try them out and give feedback if you have any. This format is new to me and I’m trying to take advantage of it entirely.

06%20AM

13 Likes

Dude! This is looking really good! Keep it up!

I can’t wait see how this shapes up!

1 Like

Takes shape at great pace :slight_smile: keep up the great work

1 Like

A post was split to a new topic: How to implement Cortical Columns

It is excellent, especially because it presents the functioning of HTM in a dynamic and interactive way. I am new to the theory and as for the Spatial Pooler I was very clear about its operation as detailed on the website. I look forward to the following parties with enthusiasm

2 Likes

FYI: the URL changed to https://buildinghtm.systems. This, also, is probably temporary. I had to transfer the wordpress site and this made it easier, long story.

Thanks Matt, I really enjoy yours videos and I think I understood some ideas that are really cool like encoders, SP and SDR.

1 Like

The next phase in the SP docs is running computation. Before I can do that, I need to have at least one encoder, so now I’m working on number encoder docs. I have one visualization sort-of done (will be tweaked).

Super cool project, looks great! I’m a fan of D3/Observable with the interactive style, it will make it easy to learn when you can modify the code and see changes.

1 Like

If anyone wants to work on this, now is a good time. I will not have time to work on it for several months.

2 Likes

Sad to read that, I was just going to ask if there where any plans on adding temporal memory and the rest that is covered in the HTM School videos

I got lots of plans, no time to implement them all. I will get back to this document after I’ve produced 2 more HTM School videos and a new conference talk.

4 Likes

Just to clarify, by ‘this’ do you mean the number encoder docs overall?

Sure or more if you want

1 Like

For some updates on this project, see our latest Hackers’ Hangout at 14:48:

My plans are to flesh this project out on my Twitch stream, starting Thursday. It is currently a webpack’ed static delivery system, so I’ll be immediately updating it to use ReactJS. We’re going to build a whole HTM implementation in JavaScript (maybe Coffeescript) live. It’s going to be fun. Stay tuned!

2 Likes

Continuing from your Twitter thread, why does it need to have a server side component at all? And do you have an idea of the source(s) of the streaming data?

I guess I don’t really have a good reason. Something I’ll have to think about.

My original plan was to have one server with one HTM running. The server would constantly run data through the HTM. All the web pages would visualize components of the running HTM in different ways. They could use the actual HTM input / output by tapping into the server’s streams.

But now that I think more about it, I really don’t need to have a server. I could have the entire thing running in JavaScript on each browser. The data I was planning on using would be programmatically generated anyway. In that case I could just continue use parcel like I’ve been with @codeallthethingz on the other JS project.

3 posts were merged into an existing topic: 2D Object Recognition Project

Not having a server side component would make it much easier to get started with. If there’s a need to save state (tutorial progress etc), you can always persist the react/redux state to local storage.

I’m fairly certain we’ll be building a React static app. I have done a bit of prep-work at https://github.com/rhyolight/building-htm-systems/tree/react. If anyone wants to follow along or help out, here is the planning board I am using. If you think you might help, create a Trello account and I’ll start a new team. Please join me on Thursday, I’ll be working on this all day long and live-streaming.

To run, checkout the react branch on my fork above and run:

npm run dev

You’ll need node.js and npm of course, and don’t forget to npm install.

I will be putting some of the more boring tasks (like LaTeX conversion and syntax highlighting) off until we get the major changes worked out. On Thursday I will be converting the first “simple scalar encoder” visualization into a React component.