I’m currently trying to implement my own version of HTM and stumbled across an interesting problem:
Imaging a cyclic sequence to be learned, let’s say the big handle of a clock. I’d assume that HTM should be able to easily predict the next position of the handle given the current position. There is no ambiguity to the prediction so this task should be rather simple and should be solvable using a single distal dendrite segment.
However there appears to be a problem.
Let’s say we only read the clock every 15 minutes so we get 4 patterns running in a cyclic sequence. For the sake of illustration let’s say there are only 4 minicolumns with 1 being active at a time, so the sequence of minicolumn activations the SP has generated might be:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Let’s further assume there are at least 2 cells per minicolumn.
At first every presentation of the pattern will make the active column burst as there is no prediction, activating all its cells, making the cell with the best matching distal dendrite segment (or a random cell if there is none) the winner and connecting it distally to the winner cells of the previous presentation in order to facilitate its own prediction.
The problem is that when the sequence is repeated a new cell will be selected as the winner (not the winner cell from the first iteration) because it will choose a cell with the least distal segments.
This effect will propagate in such a way that there will always be one (shifting) position in the cyclic sequence in which nothing is predicted and all the minicolumns will burst.
However I see that there are situations in which this behaviour is required, e.g. having a sequence like ‘XABCABCABCY’ the system should not assume a cyclic ‘ABC’ and forget in which part of the sequence it is by reusing the same code for it.
Is there any idea out there on how to properly predict truly cyclic sequences without bursting at some point while also properly predict sequences in which only parts are cyclic (and therefore should not exactly share the same code) ?