One technical reason is that in order to activate, a dendrite needs an average 6 input synapses to fire simultaneously. Thatâs a biology inheritance.
TM is designed to handle noisy or foggy environments, where not everything is as sharply distinguishable as a 5 vs a 6. Quantities are approximates.
If there are fewer than 6 simultaneous active inputs, then it increases the chance of incorrect activating the dendrite.
Now why not just set the encoding to 6 bits instead of 8? Because it accounts for possibility some of the bits will be missed.
Of course you might argue that if you carefully select encodings and avoid âmaking noiseâ from the very start the above arguments donât really apply.
In this case you can indeed reduce both SDR length and solidity (number of ON bits) to e.g. 3 bits, but youâll have to remember to reduce the dendrite activation threshold from 6 to no more than 3.
But still you might want to reuse a TM trained âin vitroâ in a different context where some other module approximately outputs the number sequence you trained for, and if you stack on that a TM trained on a ânarrowâ, precise encoding, it will perform poorly.
Another reason you can call it âproximity influenceâ. Not sure how it matters in TM, but I used SDR encodings for input in the RLtask of balancing the cartpole, and I found that exagerated âthickâ SDRs from HTM perspective perform very well. The agent learns much faster with 30% solidity than with 15%, 5% or smaller
The reason is that when you have a robot that learns whether to move left or right, on input it never seen before, with more solid SDRs it increase the chances of making a good enough choice because the new (unseen) number encoding has a significant overlap with one (or more) close previous value(s) for which it already learned the correct answer.
So it is important to:
- between encodings of close values have a high overlap.
- overlap should be gradual - the farther away two numbers, the less overlap, till they become entirely different encodings
For the reasons above is a good choice to begin with fairly âthickâ encodings, to encode not only the value you want but also to have a gradual shift between neighboring values and resist noise.