Discrete Cortical Circuits

Articles

28 September 2024

Introduction to 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.

Discrete Cortical Circuit

The main distinguishing characteristics of DCCs are:

  1. Neuron activation outputs are binary instead of a continuous function.
  2. Synaptic connections have binary gates instead of scalar weights that open and close based on some criteria.
  3. Neurons don’t activate independently, but are part of a group that selects winners based on some k-Winner-Take-All (k-WTA) strategy.
  4. A DCC takes only binary input. Therefore, user-provided data needs to be processed by an encoder before the algorithm can begin.

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.

Discrete Cortical Circuit Model

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:

  1. Cells (how they work)
  2. Activation Strategy (for the cells)
  3. Connectivity (synapses, permanences, dendrites)
  4. Learning (how to update the connectivity)

The implementation using BrainBlocks follows the general pattern as below:

BrainBlocks Block

tags: