Why do we need binary representation(encoder) and can we directly not create SDRs?

Hello all,

I am new to HTM. I would like to know why do we have to create a binary representation of input data instead of directly creating an SDR from the input data

Thank you in advance!

1 Like

If you can extract proper SDR from input, you don’t have to feed it to SP to get one.
Just make sure it satisfies the following requirements:

  • Extreme sparsity(usually about 2%)
  • Fixed/non-varying sparsity for every representation.
  • Semantic similarity between two representation with common bits.

Plus, it would be ideal to have the bits to be active uniformly(sparsity over time).


Hey @abirami_ravi, welcome!

For a good overview of the purpose & requirements for encoders I’d highly recommend this paper:


Encoder or no encoder?
I would say it depends. For instance, If you are dealing with images, there is no need to use an encoder (binarize the images before presenting them to HTM. However, using unbinarized images can boost the performance by 2-3 precent). In the case of time-series data such as audio signals, EEG, etc, definitely you need an encoder (more details are provided in the reference - previous post.)


Thank you:-)
I am finding it really difficult to visualize the minicolumns and not able to correlate with the biological neuron. Can you suggest some source that could help me in visualization?

1 Like

I’d highly recommend HTM School on YouTube if you haven’t seen it already, very engaging and visual:

There’s also the online book “Biological and Machine Intelligence” (BAMI), which has pseudocode and some figures:

Also for Encoding and Spatial Pooling there’s “Building HTM Systems”, which has some interactive functionality: