I’d start with the scale problem this idea could address.
Consider one wants to build an abstract “SDR Machine” which roughly implements the following architecture:
- there is a so called “current input space” SDR. It could be a “state space” combining both inputs and predictions in a single SDR, or a couple SDRs encoding sensory inputs and previous predictions of these inputs, what follows addresses either. I’ll name this I-SDR
- what SDR machine does - it has a very large number of SDR decoders (which are basically minicolumns), and the generic work of the SDR machine is to match the above I-SDR against each minicolumn’s own Learned-SDR (L-SDR) to see if any particular minicolumn should be involved in further processing for the I-SDR.
So a big bottleneck for our SDR machine is this comparison of one I-SDR with potentially millions of L-SDRs. It could be a processing bottleneck or more likely a data bottleneck, depending on how SDRs are internally encoded, either 256 byte arrays (for 2kbit) or a vector of ~40 integers representing active synapses or maybe other encoding.
The trouble is it has to bring all that bunch of L-SDRs into CPIU cache and compare each with an I-SDR at every time step.
Now perceptual hashing is a technique used in image searches. There are several image hashing algorithms which all implement the same idea:
- take an arbitrary image and transform it into a 64 bit number called perceptual hash, or phash using a compression algorithm.
- this algorithm is designed in such a way that the resulting hashes have some very useful properties:
- hashing two arbitrary images are very unlikely to produce similar hashes
- it is resistant to multiple changes applied to an image - changes could be masking areas of an image, rescale on X, Y or both, blurring, adding noise, removing noise, shift colors,luminance, loosing JPG encoding. Regardless of these changes the hash of the resulting image is very close to the original image hash within a few bits difference between the two 64 bit hashes
- The 1. 2. properties above means an image hash is a reliable identifier of any image and thus allows indexing huge image databases (hundreds of millions or even billions) for quick search and retrieval of any image (or its variants resulting from processing) with a very good chance of finding good matches.
The proposal/idea I want to advance here is if someone devises similar hashing for SDRs it could eliminate the above mentioned bottleneck of the SDR machine: finding fast a very sparse subset of matching Learned-SDRs for any given Input-SDR .
And what also improves is this optimization would be quite insensitive to the size of the underlying SDRs - If a “normal” SDR machine is dragged down by the size of its SDRs - comparing two 20kbit SDRs is 10 time more expensive than 2kbit - once a SDR is hashed to a fixed 32 or 64 bit representation, speed of search&retrieval is unaffected by the actual SDR size.
Thoughts, ideas? I was thinking at this for a while maybe I missed something too obvious on why it couldn’t work. Or the SDR Machine above is totally irrelevant on how any future HTM processing is intended to work.
If anyone is interested I also have some implementation ideas for SDR perceptual hashes. As for images, where different algorithms were tested, there could be many ways to compute perceptual hashes for SDRs.
What is important is to have the first two numbered properties above - matching SDRs to have a very low probability of mismatching for their respective hashes, and un-matching SDRs to have a low probability of matching hashes.