Giter VIP home page Giter VIP logo

htm's Introduction

Experiments in Numenta-style hierarchical temporal memory, i.e. a boiled-down model of the neocortex.

See: http://www.numenta.com

Equally, experiments in OpenGL, using it to visualize the state of the HTM.

Re: sparse distributed HTM:

Conceptually, I think of HTM as having similarities to Git: Git encodes the state of a project
into a signature that can be used to uniquely identify and recall that state. If the signature
space is large enough and the encoding algorithm is sufficiently "hashy", you never need to
worry about collisions in the signature space. HTM takes a theoretically unlimited (but
_practically_ bounded) input space, generates a "signature", and then reinforces just the
subset of a grossly overbuilt neural network that generates the signature, and temporal
derivitives of it... Winner-take-all mechanisms, inhibition mechanisms, (micro/macro) columnar
organization, etc. are all variations on a "reinforce the signature-subset of an overbuilt
neural network" theme.

The neocortex probably isn't as good as git/RSA at generating unique signatures... The brain is
eager to make connections, sometimes to a fault: optical/aural/etc. illusions can be
attributed to over-eager spatial or temporal associations... On the other hand, these over-
eager associations can also be an engine of generalization, inference, and imagination.

Departures of my implementation from the "canonical" HTM:

* I process non-binary inputs by simulating sensors which are assigned a sensitivity threshold;
They'll only fire if the input exceeds the sensitivity threshold, i.e. some cells will fire only
for "bright" inputs, while others will fire for both "bright" _and_ "dim" inputs. Intuitively
it seems biologically plausible; and regardless it should be amenable to the HTM "algorithm".

* My implementation simulates, right or wrong, an "afterimage" effect by storing activation
states in the high bit of a word that is right shifted (i.e. it decays with a half-life)
with each time step of the network. This ties in with the sensitivity-assigned sensor concept
for feed-fwd inter-region interactions.

* I add a new state beyond "active" and "predicting": "Imagining". It's a layer above predicting
that propagates predictions based on predictions, that importantly does not impact the network-
reinforcing mechanisms. These "imaginations" do decay with the same half-life mechanism described
above, to avoid a "prediction/imagination storm" where all of the cells feed each other in an
endless, incoherent loop.  My hope is that when my HTM is implemented and tuned properly, that the
"imagination" layer will behave just like its name implies, producing an internally-generated
"train-of-thought" that can be back-propagated down through the regions towards the sensory layers;
Ideally where "hallucinations" could be directly visualized.

Re: OpenGL

If nothing else, the visualization component of this little project can be of use to someone, it
does make pretty pictures. :)

Ultimately, I'd like to implement the HTM critical paths in GLSL.


This is a work-in-progress, and probably always will be...
Comments in the code are about as sparse as this README.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.