Wednesday, September 3, 2008

Hierarchical Temporal Memory

It's been a while since I've posted a new topic, so I was thinking on what topic to post about on my blog. After a while of hard thinking and sleepless nights (just kidding) it stroked me... The idea entered my mind :)

I while ago I stumbled on an article somewhere regarding HTM (Hierarchical Temporal Memory)... 'What?' you may think? Well, it's an algorithm in A.I. invented by numenta if I'm not mistaken, and it's meant for classifying objects, or at least it can be used for it.

Imagine that you have a cat and a bowl of food in front of the cat, while the cat steps towards the bowl, the image of the bowl changes each step the cat takes.
The cat-brain must then determine whether the bowl is still the same bowl, it all happens in the sub-consciousness of the cat's brain, it's logical that it's the same bowl,
although the bowl is with every step different in size and perspective and if it’s a bummer the lighting may also be different.

Now if we want to translate it to image analysis with A.I., whether to know that an object is still in an image when we present a series of pictures (or movie) this methodology/technology becomes useful :)
It's an algorithm that functions in function of time.
You can pretty much compare it with an Self Organizing Map (SOM) network but in function of time, and with multiple layers.
Each layer is a specialization of the previous layer until the top layer has a classification answer with a certain belief that the thing in the picture is still the same thing.

The basic structure (from the algorithm document) is something like this:

I've found a particular document (paper) explaining the working of the algorithm and
for a more detailed and scientific explanation, I'll have to refer you to their amazing paper.
You can find it here.
As stubborn and curious I am, I'm trying to create something similar, but with my own twist of thought, actually I was thinking of such a mechanism for a long time before I’ve had found this algorithm, only the 'how to start on it' was still missing in my mind, this paper gave me a few ideas on how to create my own program/simulation.

I'll post my findings when my experiments with this algorithm are successful :)
Along with maybe if it's possible a basic peace of code for people who are interested in it for research or self-development.

I must mention that I've looked around on the web and didn't find a piece of code (except the numenta site) that implements this algorithm... such a bummer..
It has probably something to do with the patents obtained on this technology I guess.

Anyway, meanwhile receive my best regards and until the following post ;)