Interactive Visualization of Discrete Cortical Circuits (DCC)

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 since I’m not sure where the conversation is these days.

Just a bit about me.

I was introduced to HTM around 2019 and started following the forums, watching the HTM videos created by Matt Taylor, and reading 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 forum user and we built our own HTM-like system called BrainBlocks which we stopped working on back in 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 call my own computational and theoretical framework I’ve developed, Discrete Cortical Circuits (DCC), which is yet another opinionated methodology that heavily intersects with HTM-like systems. The briefest description would be that it bans the use of continuous/float data, requires neuron outputs and synaptic connections to be binary, and neurons can only activate only as part of a group winner-take-all algorithm.

As part of this exploration, I’ve always looked for new perspectives to analyze a system, for visualizing the dynamics, quantifying and describing mathematical properties, and communicating ideas to other people and also to myself. I’ve created a lot of plots and a lot of animations to visualize many of these different things. 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 salient points.

For that reason, in the past few months I’ve been working on a completely new rewrite of a DCC system, from the ground-up, that leverages all my lessons-learned from my work on BrainBlocks, puts in all the optimizations that I know, and makes it as fast and as scaleable as possible. I also built it with the intention for building interactive demonstrations that we can share on the web that won’t need a heavy backend server to run.

The simplest demonstration of the DCC tool can be viewed on my github page, demonstrating 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 using only your browser to compute.

Simple Scalar Encoder

Try it out and play around! It’s just the fixed configuration for the moment, but I’ll be sharing more interesting and complex networks. 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 this forum. Just use the iframe snippet below. If the admin of this Discourse forum whitelists this domain, https://jacobeverist.github.io/dcc-public/, this demo can be embedded right here on this forum and will show in this post. I’ve verified that it works on a discourse server I control.

<iframe
    src="https://jacobeverist.github.io/dcc-public/embedded_dcc_viewer_v1/embed.html?demo=simpleEncoder"
    title="DCC Viewer"
    width="800"
    height="600">
</iframe>

I want to highly plead with the admins to whitelist my domain so that I can begin building and sharing lots of DCC networks that we can discuss and analyze.

Anyway, that’s all for now, but below is some more details about my DCC project.


Abstract

Build a high-speed software library and visualizer for Discrete Cortical Circuits (DCC)

Goals

  • Improve on lessons learned from BrainBlocks
  • Provide a way to illustrate and understand DCC concepts
  • Enable live visual demonstrations of DCCs on the web
  • Enable large-scale circuits
  • Enable high-speed computation
  • Makes it easy to build new experiments and applications

Features

  • Executable binary, Python library, and WebAssembly module
  • Live web simulation of a DCC network using a web dashboard and the WebAssembly module
  • Embeddable interactive visual for blog posts and discussion boards
  • Library of highly configurable data sources for streaming scalar and discrete data
  • Comprehensive library of encoders for exploring how to represent data for DCCs
  • Library of computational blocks (pooler, sequence learner, contextual learner, classifier)
  • Templates for building custom computational components

Design

  • Developed core library in Rust for correctness, maintainability, and speed
  • Designed for high-speed single-threaded execution
  • Designed for asynchronous and multi-thread Rust execution
    • Enables 100x faster parallel and concurrent computation with DCCs
  • Uses compact bit-level representation of neuron activation patterns
    • Reduces memory footprint
    • Reduced data transfer between DCC blocks
  • Lazy data transfer between blocks for low-frequency updates
    • Avoids copying of unchanging data between blocks
  • Window of historical block output data preserved to enable computation with delays or signal lag
1 Like