by Jacob Everist
Hello all!
I just wanted to share a project I’ve been working on for some time. I cross-posted this over at the TBT forum and the old HTM forum since I’m not sure where the conversation is these days.
Now let’s get to it…
I was introduced to HTM around 2019 and started following the forums, watched the videos created by the great early HTM communicator Matt Taylor, and read the Numenta papers. I was always very excited by the very different approach to AI and modeling of the cortical computation. So much so that I partnered with another person I found on the Numenta forums, and we built our own HTM-like system called BrainBlocks, of which our development stopped around early 2022.
Since that that time, i’ve focused on a lot of various computational challenges and problems associated with this different style of computing. I’ve developed my own computational and theoretical framework called, Discrete Cortical Circuits (DCC), which is yet another opinionated methodology that heavily intersects with the early HTM-like systems. The briefest description would be that it bans the use of continuous (or floating point) data, requires neuron outputs and synaptic connections to be binary, and neurons are grouped into an ensemble, restricting which neuron activates as part of a winner-take-all algorithm.
As part of this exploration, I’ve always looked for new perspectives to analyze a system, for visualizing the dynamics, for quantifying and describing mathematical properties, and for communicating ideas to other people and also to myself. I’ve created a lot of data plots and a lot of animations to visualize many of these different phenomena. I can share these things with people, but when they are divorced from the context of a working system, it becomes very difficult to communicate the key concepts.
For that reason, in the past few months I’ve been working on a completely new DCC software library from the ground-up, that leverages all my lessons-learned from my experience working on BrainBlocks. In addition, I’ve put in all the optimizations that I know which makes it as very fast and capable of scaling to thousands of nodes in a system. I also built it with the intention for deploying interactive demonstrations on the web that run in the browser, without the need for a heavy backend server.
The simplest demonstration of the DCC tool can be seen below or viewed here with this direct link if the embedding below doesn’t work. This demonstrates a simple scalar data source and a scalar encoder. Feel free to start and stop, and particularly to change the speed. You will see that it is lightning fast and completely runs in your browser without a backend server.
It’s just the fixed configuration for the moment, but I’ll be sharing more interesting and complex networks, as well as the ability to build your own experiments. I need a way to annotate things so I can explain what’s going on, but it’s fully functional and algorithmically correct (although we do things differently from HTM in some respects).
You can also embed this demo on web pages or on forums using just use the iframe snippet below. However, for something like Discourse, my domain needs to be whitelisted so you can it loads properly. An admin will have to add this domain the whitelist: https://jacobeverist.github.io/dcc-public/. You can see it embedded in Discourse on my own forum .
<iframe
src="https://jacobeverist.github.io/dcc-public/embedded_dcc_viewer_v1/embed.html?demo=simpleEncoder"
title="DCC Viewer"
width="800"
height="600">
</iframe>
Below is a brief overview of this project, its goals, features, and design decisions.
Build a high-speed software library and visualizer for Discrete Cortical Circuits (DCC)
by Jacob Everist
We’ve defined a class of algorithms called Discrete Cortical Circuits (DCC). These algorithms are modeled or inspired from the microcircuits of the brain’s cortical column. With some deliberate choices to discretize many aspects of the network, while also focusing on the assembly of neurons into a “block” or “group” as a fundamental unit of computation, DCCs become very unlike classical artifical neural networks.
The main distinguishing characteristics of DCCs are:
There are many existing systems that already follow these principles, including BrainBlocks, HTM, Sparsey, and SPH.
We’ve found that there is a great many lessons to be learned by exploring the circuit design of the individual blocks, how information is represented, how the blocks are connected, and the overall computational dynamics. We’ve also found this to be an interdisciplinary problem. Since this touches on the mechanics of thought, a great many clues can be extracted from the related fields of #philosophy, #psychology, #linguistics, #neuroscience, #math, and #computerscience.
Here we provide a reference model of the DCC broken into components that are customizable. Each component has been implemented differently by the existing systems listed above.
Describing each of the component boxes briefly:
The implementation using BrainBlocks follows the general pattern as below: