Been working on understanding the theory/code by writing a C# version and I might found a bug in the SpatialPooler, not sure as I’m still learning.
The noise that goes into overlaps is the same for the whole running time, so the same medium-low probability columns will be activated.
It sounds wrong because some columns with the exact overlap score wont ever be activated for the same input, and the network will learn less to deal with noises?.
I looked over on the py version and they dont seem to use tieBreaker, but looked over the issues and its still not solved.
Second thing I found is updateDutyCycles, allocates overlapArray and passes it to updateDutyCyclesHelper, so it always passes a zeroed array, should probably use overlaps?
Welcome! Thank you for bring these to our attention. I’m still waiting back on the first issue you mentioned, I became aware of this a few days ago and put a question in on what should happen here. You should definitely open an issue for this to be resolved as soon as we hear back from the Numenta engineers regarding how “tieBreakers” should be treated. As far as the theory of how tieBreakers is used, I can’t really speak to your concerns of the effects of adding noise, however. You should probably ask this in the developer topic category.
Regarding the second, this is definitely a bug. Feel free to open issue for this too. The overlapsArray should be used not the overlaps that are passed in, I wouldn’t structure the method to do destructive work on data structures that are passed in - just my two cents. There is already a array set up there to handle the work, it just isn’t updated with the “1’s” from the indexes where overlaps > 0.