Placeholder for development of this idea in our repo is
Definition: Boosting =
SP parameter boostStrength:
A number greater or equal than 0, used to
control boosting strength. No boosting is applied if it is set to 0.
The strength of boosting increases as a function of boostStrength.
Boosting encourages columns to have similar activeDutyCycles as their
neighbors, which will lead to more efficient use of columns. However,
too much boosting may also lead to instability of SP outputs.
This is what I referred to as homeostatic boosting.
SP parameter minPctOverlapDutyCycles:
A number between 0 and 1.0, used to set
a floor on how often a column should have at least
stimulusThreshold active inputs. Periodically, each column looks
at the overlap duty cycle of all other column within its
inhibition radius and sets its own internal minimal acceptable
duty cycle to: minPctDutyCycleBeforeInh * max(other columns’
duty cycles). On each iteration, any column whose overlap duty
cycle falls below this computed value will get all of its
permanence values boosted up by synPermActiveInc. Raising all
permanences in response to a sub-par duty cycle before
inhibition allows a cell to search for new inputs when either
its previously learned inputs are no longer ever active, or when
the vast majority of them have been “hijacked” by other columns.
Why? To help columns/cells more effectively cover the input space (those underperforming are artificially given chance to find new niche)
There’s no good biological explanation of how our current implementation can correlate.
- Add concept of energy for each unit (should it be a cell, segment, synapse?).
- when a cell activates, the energy increases (cell gets new food)
- otherwise, each time energy decays
- cells with low energy die, are removed.
- this would help implementation problems as https://github.com/htm-community/nupic.cpp/issues/267 , I think @marty1885 ran into similar issues.
- that way we have implemented pruning
- spawn new cells
- when? at random, to keep a constant cell count, …
- where? randomly over inputspace, at hotspots (where most cells are), at deserts (opposite)
- what do you think of this model?
- its implementation (with regards to speed)
- are there good datasets to test boosting?
- I recall a counter “dataset”: have a large SP with simple pattern (line), boosting will go crazy and generate artificial spikes in anomalies (I had a few methods to mitigate that)