Spatial Pooler

class nupic::algorithms::spatial_pooler::SpatialPooler

CLA spatial pooler implementation in C++.

Description

The Spatial Pooler is responsible for creating a sparse distributed representation of the input. Given an input it computes a set of sparse active columns and simultaneously updates its permanences, duty cycles, etc.

The primary public interfaces to this function are the “initialize” and “compute” methods.

Example usage:

SpatialPooler sp;
sp.initialize(inputDimensions, columnDimensions, <parameters>);
while (true) {
   <get input vector>
   sp.compute(inputVector, learn, activeColumns)
   <do something with output>
}

Inherits from nupic::Serializable< SpatialPoolerProto >

Public Functions

virtual void initialize(vector<UInt> inputDimensions, vector<UInt> columnDimensions, UInt potentialRadius = 16, Real potentialPct = 0.5, bool globalInhibition = true, Real localAreaDensity = -1.0, UInt numActiveColumnsPerInhArea = 10, UInt stimulusThreshold = 0, Real synPermInactiveDec = 0.01, Real synPermActiveInc = 0.1, Real synPermConnected = 0.1, Real minPctOverlapDutyCycles = 0.001, UInt dutyCyclePeriod = 1000, Real boostStrength = 0.0, Int seed = 1, UInt spVerbosity = 0, bool wrapAround = true)

Initialize the spatial pooler using the given parameters.

Parameters
  • inputDimensions: A list of integers representing the dimensions of the input vector. Format is [height, width, depth, ...], where each value represents the size of the dimension. For a topology of one dimesion with 100 inputs use [100]. For a two dimensional topology of 10x5 use [10,5].
  • columnDimensions: A list of integers representing the dimensions of the columns in the region. Format is [height, width, depth, ...], where each value represents the size of the dimension. For a topology of one dimesion with 2000 columns use 2000, or [2000]. For a three dimensional topology of 32x64x16 use [32, 64, 16].
  • potentialRadius: This parameter deteremines the extent of the input that each column can potentially be connected to. This can be thought of as the input bits that are visible to each column, or a ‘receptive field’ of the field of vision. A large enough value will result in global coverage, meaning that each column can potentially be connected to every input bit. This parameter defines a square (or hyper square) area: a column will have a max square potential pool with sides of length (2 * potentialRadius + 1).
  • potentialPct: The percent of the inputs, within a column’s potential radius, that a column can be connected to. If set to 1, the column will be connected to every input within its potential radius. This parameter is used to give each column a unique potential pool when a large potentialRadius causes overlap between the columns. At initialization time we choose ((2*potentialRadius + 1)^(# inputDimensions) * potentialPct) input bits to comprise the column’s potential pool.
  • globalInhibition: If true, then during inhibition phase the winning columns are selected as the most active columns from the region as a whole. Otherwise, the winning columns are selected with resepct to their local neighborhoods. Global inhibition boosts performance significantly but there is no topology at the output.
  • localAreaDensity: The desired density of active columns within a local inhibition area (the size of which is set by the internally calculated inhibitionRadius, which is in turn determined from the average size of the connected potential pools of all columns). The inhibition logic will insure that at most N columns remain ON within a local inhibition area, where N = localAreaDensity * (total number of columns in inhibition area). If localAreaDensity is set to a negative value output sparsity will be determined by the numActivePerInhArea.
  • numActiveColumnsPerInhArea: An alternate way to control the sparsity of active columns. If numActivePerInhArea is specified then localAreaDensity must be less than 0, and vice versa. When numActivePerInhArea > 0, the inhibition logic will insure that at most ‘numActivePerInhArea’ columns remain ON within a local inhibition area (the size of which is set by the internally calculated inhibitionRadius). When using this method, as columns learn and grow their effective receptive fields, the inhibitionRadius will grow, and hence the net density of the active columns will decrease. This is in contrast to the localAreaDensity method, which keeps the density of active columns the same regardless of the size of their receptive fields.
  • stimulusThreshold: This is a number specifying the minimum number of synapses that must be active in order for a column to turn ON. The purpose of this is to prevent noisy input from activating columns.
  • synPermInactiveDec: The amount by which the permanence of an inactive synapse is decremented in each learning step.
  • synPermActiveInc: The amount by which the permanence of an active synapse is incremented in each round.
  • synPermConnected: The default connected threshold. Any synapse whose permanence value is above the connected threshold is a “connected synapse”, meaning it can contribute to the cell’s firing.
  • 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.
  • dutyCyclePeriod: The period used to calculate duty cycles. Higher values make it take longer to respond to changes in boost. Shorter values make it potentially more unstable and likely to oscillate.
  • 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.
  • seed: Seed for our random number generator. If seed is < 0 a randomly generated seed is used. The behavior of the spatial pooler is deterministic once the seed is set.
  • spVerbosity: spVerbosity level: 0, 1, 2, or 3
  • wrapAround: boolean value that determines whether or not inputs at the beginning and end of an input dimension are considered neighbors for the purpose of mapping inputs to columns.

virtual void compute(UInt inputVector[], bool learn, UInt activeVector[])

This is the main workshorse method of the SpatialPooler class.

This method takes an input vector and computes the set of output active columns. If ‘learn’ is set to True, this method also performs learning.

Parameters
  • inputVector: An array of integer 0’s and 1’s that comprises the input to the spatial pooler. The length of the array must match the total number of input bits implied by the constructor (also returned by the method getNumInputs). In cases where the input is multi-dimensional, inputVector is a flattened array of inputs.
  • learn: A boolean value indicating whether learning should be performed. Learning entails updating the permanence values of the synapses, duty cycles, etc. Learning is typically on but setting learning to ‘off’ is useful for analyzing the current state of the SP. For example, you might want to feed in various inputs and examine the resulting SDR’s. Note that if learning is off, boosting is turned off and columns that have never won will be removed from activeVector. TODO: we may want to keep boosting on even when learning is off.
  • activeVector: An array representing the winning columns after inhibition. The size of the array is equal to the number of columns (also returned by the method getNumColumns). This array will be populated with 1’s at the indices of the active columns, and 0’s everywhere else. In the case where the output is multi-dimensional, activeVector represents a flattened array of outputs.

void stripUnlearnedColumns(UInt activeArray[]) const

Removes the set of columns who have never been active from the set of active columns selected in the inhibition round.

Such columns cannot represent learned pattern and are therefore meaningless if only inference is required.

Parameters
  • activeArray: An array of 1’s and 0’s representing winning columns calculated by the ‘compute’ method after disabling any columns that are not learned.

virtual UInt version() const

Get the version number of this spatial pooler.

Return
Integer version number.

virtual void save(ostream &outStream) const

Save (serialize) the current state of the spatial pooler to the specified file.

Parameters
  • fd: A valid file descriptor.

virtual void load(istream &inStream)

Load (deserialize) and initialize the spatial pooler from the specified input stream.

Parameters
  • inStream: A valid istream.

virtual UInt persistentSize() const

Returns the number of bytes that a save operation would result in.

Note: this method is currently somewhat inefficient as it just does a full save into an ostream and counts the resulting size.

Return
Integer number of bytes

vector<UInt> getColumnDimensions() const

Returns the dimensions of the columns in the region.

Return
Integer number of column dimension.

vector<UInt> getInputDimensions() const

Returns the dimensions of the input vector.

Return
Integer vector of input dimension.

UInt getNumColumns() const

Returns the total number of columns.

Return
Integer number of column numbers.

UInt getNumInputs() const

Returns the total number of inputs.

Return
Integer number of inputs.

UInt getPotentialRadius() const

Returns the potential radius.

Return
Integer number of potential radius.

void setPotentialRadius(UInt potentialRadius)

Sets the potential radius.

Parameters
  • potentialRadius: integer number of potential raduis.

Real getPotentialPct() const

Returns the potential percent.

Return
real number of the potential percent.

void setPotentialPct(Real potentialPct)

Sets the potential percent.

Parameters
  • potentialPct: real number of potential percent.

bool getGlobalInhibition() const

Return
boolen value of whether global inhibition is enabled.

void setGlobalInhibition(bool globalInhibition)

Sets global inhibition.

Parameters
  • globalInhibition: boolen varable of whether global inhibition is enabled.

Int getNumActiveColumnsPerInhArea() const

Returns the number of active columns per inhibition area.

Return
integer number of active columns per inhbition area, Returns a value less than 0 if parameter is unuse.

void setNumActiveColumnsPerInhArea(UInt numActiveColumnsPerInhArea)

Sets the number of active columns per inhibition area.

Invalidates the ‘localAreaDensity’ parameter.

Parameters
  • numActiveColumnsPerInhArea: integer number of active columns per inhibition area.

Real getLocalAreaDensity() const

Returns the local area density.

Returns a value less than 0 if parameter is unused”.

Return
real number of local area density.

void setLocalAreaDensity(Real localAreaDensity)

Sets the local area density.

Invalidates the ‘numActivePerInhArea’ parameter”.

Parameters
  • localAreaDensity: real number of local area density.

UInt getStimulusThreshold() const

Returns the stimulus threshold.

Return
integer number of stimulus threshold.

void setStimulusThreshold(UInt stimulusThreshold)

Sets the stimulus threshold.

Parameters
  • stimulusThreshold: (positive) integer number of stimulus threshold

UInt getInhibitionRadius() const

Returns the inhibition radius.

Return
(positive) integer of inhibition radius/

void setInhibitionRadius(UInt inhibitionRadius)

Sets the inhibition radius.

Parameters
  • inhibitionRadius: integer of inhibition radius.

UInt getDutyCyclePeriod() const

Returns the duty cycle period.

Return
integer of duty cycle period.

void setDutyCyclePeriod(UInt dutyCyclePeriod)

Sets the duty cycle period.

Parameters
  • dutyCyclePeriod: integer number of duty cycle period.

Real getBoostStrength() const

Returns the maximum boost value.

Return
real number of the maximum boost value.

void setBoostStrength(Real boostStrength)

Sets the strength of boost.

Parameters
  • boostStrength: real number of boosting strength, must be larger than 0.0

UInt getIterationNum() const

Returns the iteration number.

Return
integer number of iteration number.

void setIterationNum(UInt iterationNum)

Sets the iteration number.

Parameters
  • iterationNum: integer number of iteration number.

UInt getIterationLearnNum() const

Returns the learning iteration number.

Return
integer of the learning iteration number.

void setIterationLearnNum(UInt iterationLearnNum)

Sets the learning iteration number.

Parameters
  • iterationLearnNum: integer of learning iteration number.

UInt getSpVerbosity() const

Returns the verbosity level.

Return
integer of the verbosity level.

void setSpVerbosity(UInt spVerbosity)

Sets the verbosity level.

Parameters
  • spVerbosity: integer of verbosity level.

bool getWrapAround() const

Returns boolean value of wrapAround which indicates if receptive fields should wrap around from the beginning the input dimensions to the end.

Return
the boolean value of wrapAround.

void setWrapAround(bool wrapAround)

Sets wrapAround.

Parameters
  • wrapAround: boolean value

UInt getUpdatePeriod() const

Returns the update period.

Return
integer of update period.

void setUpdatePeriod(UInt updatePeriod)

Sets the update period.

Parameters
  • updatePeriod: integer of update period.

Real getSynPermTrimThreshold() const

Returns the permanence trim threshold.

Return
real number of the permanence trim threshold.

void setSynPermTrimThreshold(Real synPermTrimThreshold)

Sets the permanence trim threshold.

Parameters
  • synPermTrimThreshold: real number of the permanence trim threshold.

Real getSynPermActiveInc() const

Returns the permanence increment amount for active synapses inputs.

Return
real number of the permanence increment amount for active synapses inputs.

void setSynPermActiveInc(Real synPermActiveInc)

Sets the permanence increment amount for active synapses inputs.

Parameters
  • synPermActiveInc: real number of the permanence increment amount for active synapses inputs, must be >0.

Real getSynPermInactiveDec() const

Returns the permanence decrement amount for inactive synapses.

Return
real number of the permanence decrement amount for inactive synapses.

void setSynPermInactiveDec(Real synPermInactiveDec)

Returns the permanence decrement amount for inactive synapses.

Parameters
  • synPermInactiveDec: real number of the permanence decrement amount for inactive synapses.

Real getSynPermBelowStimulusInc() const

Returns the permanence increment amount for columns that have not been recently active.

Return
positive real number of the permanence increment amount for columns that have not been recently active.

void setSynPermBelowStimulusInc(Real synPermBelowStimulusInc)

Sets the permanence increment amount for columns that have not been recently active.

Parameters
  • synPermBelowStimulusInc: real number of the permanence increment amount for columns that have not been recently active, must be larger than 0.

Real getSynPermConnected() const

Returns the permanence amount that qualifies a synapse as being connected.

Return
real number of the permanence amount that qualifies a synapse as being connected.

void setSynPermConnected(Real synPermConnected)

Sets the permanence amount that qualifies a synapse as being connected.

Parameters
  • synPermConnected: real number of the permanence amount that qualifies a synapse as being connected.

Real getSynPermMax() const

Returns the maximum permanence amount a synapse can achieve.

Return
real number of the max permanence amount.

void setSynPermMax(Real synPermMax)

Sets the maximum permanence amount a synapse can achieve.

Parameters
  • synPermCMax: real number of the maximum permanence amount that a synapse can achieve.

Real getMinPctOverlapDutyCycles() const

Returns the minimum tolerated overlaps, given as percent of neighbors overlap score.

Return
real number of the minimum tolerated overlaps.

void setMinPctOverlapDutyCycles(Real minPctOverlapDutyCycles)

Sets the minimum tolerated overlaps, given as percent of neighbors overlap score.

Parameters
  • minPctOverlapDutyCycles: real number of the minimum tolerated overlaps.

void getBoostFactors(Real boostFactors[]) const

Returns the boost factors for all columns.

‘boostFactors’ size must match the number of columns.

Parameters
  • boostFactors: real array to store boost factors of all columns.

void setBoostFactors(Real boostFactors[])

Sets the boost factors for all columns.

‘boostFactors’ size must match the number of columns.

Parameters
  • boostFactors: real array of boost factors of all columns.

void getOverlapDutyCycles(Real overlapDutyCycles[]) const

Returns the overlap duty cycles for all columns.

‘overlapDutyCycles’ size must match the number of columns.

Parameters
  • overlapDutyCycles: real array to store overlap duty cycles for all columns.

void setOverlapDutyCycles(Real overlapDutyCycles[])

Sets the overlap duty cycles for all columns.

‘overlapDutyCycles’ size must match the number of columns.

Parameters
  • overlapDutyCycles: real array of the overlap duty cycles for all columns.

void getActiveDutyCycles(Real activeDutyCycles[]) const

Returns the activity duty cycles for all columns.

‘activeDutyCycles’ size must match the number of columns.

Parameters
  • activeDutyCycles: real array to store activity duty cycles for all columns.

void setActiveDutyCycles(Real activeDutyCycles[])

Sets the activity duty cycles for all columns.

‘activeDutyCycles’ size must match the number of columns.

Parameters
  • activeDutyCycles: real array of the activity duty cycles for all columns.

void getMinOverlapDutyCycles(Real minOverlapDutyCycles[]) const

Returns the minimum overlap duty cycles for all columns.

Parameters
  • minOverlapDutyCycles: real arry to store mininum overlap duty cycles for all columns. ‘minOverlapDutyCycles’ size must match the number of columns.

void setMinOverlapDutyCycles(Real minOverlapDutyCycles[])

Sets the minimum overlap duty cycles for all columns.

‘_minOverlapDutyCycles’ size must match the number of columns.

Parameters
  • minOverlapDutyCycles: real array of the minimum overlap duty cycles for all columns.

void getPotential(UInt column, UInt potential[]) const

Returns the potential mapping for a given column.

‘potential’ size must match the number of inputs.

Parameters
  • column: integer of column index.
  • potential: integer array of potential mapping for the selected column.

void setPotential(UInt column, UInt potential[])

Sets the potential mapping for a given column.

‘potential’ size must match the number of inputs.

Parameters
  • column: integer of column index.
  • potential: integer array of potential mapping for the selected column.

void getPermanence(UInt column, Real permanence[]) const

Returns the permanence values for a given column.

‘permanence’ size must match the number of inputs.

Parameters
  • column: integer of column index.
  • permanence: real array to store permanence values for the selected column.

void setPermanence(UInt column, Real permanence[])

Sets the permanence values for a given column.

‘permanence’ size must match the number of inputs.

Parameters
  • column: integer of column index.
  • permanence: real array of permanence values for the selected column.

void getConnectedSynapses(UInt column, UInt connectedSynapses[]) const

Returns the connected synapses for a given column.

‘connectedSynapses’ size must match the number of inputs.

Parameters
  • column: integer of column index.
  • connectedSynapses: integer array to store the connected synapses for a given column.

void getConnectedCounts(UInt connectedCounts[]) const

Returns the number of connected synapses for all columns.

‘connectedCounts’ size must match the number of columns.

Parameters
  • connectedCounts: integer array to store the connected synapses for all columns.

void printParameters() const

Print the main SP creation parameters to stdout.

const vector<UInt> &getOverlaps() const

Returns the overlap score for each column.

const vector<Real> &getBoostedOverlaps() const

Returns the boosted overlap score for each column.

UInt mapColumn_(UInt column)

Maps a column to its respective input index, keeping to the topology of the region.

It takes the index of the column as an argument and determines what is the index of the flattened input vector that is to be the center of the column’s potential pool. It distributes the columns over the inputs uniformly. The return value is an integer representing the index of the input bit. Examples of the expected output of this method: If the topology is one dimensional, and the column index is 0, this method will return the input index 0. If the column index is 1, and there are 3 columns over 7 inputs, this method will return the input index 3. If the topology is two dimensional, with column dimensions [3, 5] and input dimensions [7, 11], and the column index is 3, the method returns input index 8.

Parameters
  • index: The index identifying a column in the permanence, potential and connectivity matrices.
  • wrapAround: A boolean value indicating that boundaries should be ignored.

vector<UInt> mapPotential_(UInt column, bool wrapAround)

Maps a column to its input bits.

This method encapsultes the topology of the region. It takes the index of the column as an argument and determines what are the indices of the input vector that are located within the column’s potential pool. The return value is a list containing the indices of the input bits. The current implementation of the base class only supports a 1 dimensional topology of columns with a 1 dimensional topology of inputs. To extend this class to support 2-D topology you will need to override this method. Examples of the expected output of this method: If the potentialRadius is greater than or equal to the entire input space, (global visibility), then this method returns an array filled with all the indices If the topology is one dimensional, and the potentialRadius is 5, this method will return an array containing 5 consecutive values centered on the index of the column (wrapping around if necessary). If the topology is two dimensional (not implemented), and the potentialRadius is 5, the method should return an array containing 25 ‘1’s, where the exact indices are to be determined by the mapping from 1-D index to 2-D position.

Parameters
  • column: An int index identifying a column in the permanence, potential and connectivity matrices.
  • wrapAround: A boolean value indicating that boundaries should be ignored.

Real initPermConnected_()

Returns a randomly generated permanence value for a synapses that is initialized in a connected state.

The basic idea here is to initialize permanence values very close to synPermConnected so that a small number of learning steps could make it disconnected or connected.

Note: experimentation was done a long time ago on the best way to initialize permanence values, but the history for this particular scheme has been lost.

Return
real number of a randomly generated permanence value for a synapses that is initialized in a connected state.

Real initPermNonConnected_()

Returns a randomly generated permanence value for a synapses that is to be initialized in a non-connected state.

Return
real number of a randomly generated permanence value for a synapses that is to be initialized in a non-connected state.

vector<Real> initPermanence_(vector<UInt> &potential, Real connectedPct)

Initializes the permanences of a column.

The method returns a 1-D array the size of the input, where each entry in the array represents the initial permanence value between the input bit at the particular index in the array, and the column represented by the ‘index’ parameter.

corresponding to indices for which the mask value is 1.

Parameters
  • potential: A int vector specifying the potential pool of the column. Permanence values will only be generated for input bits
Parameters
  • connectedPct: A real value between 0 or 1 specifying the percent of the input bits that will start off in a connected state.

void updatePermanencesForColumn_(vector<Real> &perm, UInt column, bool raisePerm = true)

This method updates the permanence matrix with a column’s new permanence values.

The column is identified by its index, which reflects the row in the matrix, and the permanence is given in ‘dense’ form, i.e. a full array containing all the zeros as well as the non-zero values. It is in charge of implementing ‘clipping’ - ensuring that the permanence values are always between 0 and 1 - and ‘trimming’ - enforcing sparsity by zeroing out all permanence values below ‘_synPermTrimThreshold’. It also maintains the consistency between ‘self._permanences’ (the matrix storing the permanence values), ‘self._connectedSynapses’, (the matrix storing the bits each column is connected to), and ‘self._connectedCounts’ (an array storing the number of input bits each column is connected to). Every method wishing to modify the permanence matrix should do so through this method.

Parameters
  • perm: An int vector of permanence values for a column. The array is “dense”, i.e. it contains an entry for each input bit, even if the permanence value is 0.
  • column: An int number identifying a column in the permanence, potential and connectivity matrices.
  • raisePerm: a boolean value indicating whether the permanence values should be raised until a minimum number are synapses are in a connected state. Should be set to ‘false’ when a direct assignment is required.

void calculateOverlap_(UInt inputVector[], vector<UInt> &overlap)

This function determines each column’s overlap with the current input vector.

The overlap of a column is the number of synapses for that column that are connected (permanence value is greater than ‘_synPermConnected’) to input bits which are turned on. The implementation takes advantage of the SparseBinaryMatrix class to perform this calculation efficiently.

Parameters
  • inputVector: a int array of 0’s and 1’s that comprises the input to the spatial pooler.
  • overlap: an int vector containing the overlap score for each column. The overlap score for a column is defined as the number of synapses in a “connected state” (connected synapses) that are connected to input bits which are turned on.

void inhibitColumns_(const vector<Real> &overlaps, vector<UInt> &activeColumns)

Performs inhibition.

This method calculates the necessary values needed to actually perform inhibition and then delegates the task of picking the active columns to helper functions.

Parameters
  • overlaps: an array containing the overlap score for each column. The overlap score for a column is defined as the number of synapses in a “connected state” (connected synapses) that are connected to input bits which are turned on.
  • activeColumns: an int array containing the indices of the active columns.

void inhibitColumnsGlobal_(const vector<Real> &overlaps, Real density, vector<UInt> &activeColumns)

Perform global inhibition.

Performing global inhibition entails picking the top ‘numActive’ columns with the highest overlap score in the entire region. At most half of the columns in a local neighborhood are allowed to be active. Columns with an overlap score below the ‘stimulusThreshold’ are always inhibited.

Parameters
  • overlaps: a real array containing the overlap score for each column. The overlap score for a column is defined as the number of synapses in a “connected state” (connected synapses) that are connected to input bits which are turned on.
  • density: a real number of the fraction of columns to survive inhibition.
  • activeColumns: an int array containing the indices of the active columns.

void inhibitColumnsLocal_(const vector<Real> &overlaps, Real density, vector<UInt> &activeColumns)

Performs local inhibition.

Local inhibition is performed on a column by column basis. Each column observes the overlaps of its neighbors and is selected if its overlap score is within the top ‘numActive’ in its local neighborhood. At most half of the columns in a local neighborhood are allowed to be active. Columns with an overlap score below the ‘stimulusThreshold’ are always inhibited.

Parameters
  • overlaps: an array containing the overlap score for each column. The overlap score for a column is defined as the number of synapses in a “connected state” (connected synapses) that are connected to input bits which are turned on.
  • density: The fraction of columns to survive inhibition. This value is only an intended target. Since the surviving columns are picked in a local fashion, the exact fraction of surviving columns is likely to vary.
  • activeColumns: an int array containing the indices of the active columns.

void adaptSynapses_(UInt inputVector[], vector<UInt> &activeColumns)

The primary method in charge of learning.

Adapts the permanence values of the synapses based on the input vector, and the chosen columns after inhibition round. Permanence values are increased for synapses connected to input bits that are turned on, and decreased for synapses connected to inputs bits that are turned off.

Parameters
  • inputVector: an int array of 0’s and 1’s that comprises the input to the spatial pooler. There exists an entry in the array for every input bit.
  • activeColumns: an int vector containing the indices of the columns that survived inhibition.

void bumpUpWeakColumns_()

This method increases the permanence values of synapses of columns whose activity level has been too low.

Such columns are identified by having an overlap duty cycle that drops too much below those of their peers. The permanence values for such columns are increased.

void updateInhibitionRadius_()

Update the inhibition radius.

The inhibition radius is a meausre of the square (or hypersquare) of columns that each a column is “connected to” on average. Since columns are not connected to each other directly, we determine this quantity by first figuring out how many inputs a column is connected to, and then multiplying it by the total number of columns that exist for each input. For multiple dimension the aforementioned calculations are averaged over all dimensions of inputs and columns. This value is meaningless if global inhibition is enabled.

Real avgColumnsPerInput_()

REturns the average number of columns per input, taking into account the topology of the inputs and columns.

This value is used to calculate the inhibition radius. This function supports an arbitrary number of dimensions. If the number of column dimensions does not match the number of input dimensions, we treat the missing, or phantom dimensions as ‘ones’.

Return
real number of the average number of columns per input.

Real avgConnectedSpanForColumn1D_(UInt column)

The range of connected synapses for column.

This is used to calculate the inhibition radius. This variation of the function only supports a 1 dimensional column topology.

Parameters
  • column: An int number identifying a column in the permanence, potential and connectivity matrices.

Real avgConnectedSpanForColumn2D_(UInt column)

The range of connectedSynapses per column, averaged for each dimension.

This vaule is used to calculate the inhibition radius. This variation of the function only supports a 2 dimensional column topology.

Parameters
  • column: An int number identifying a column in the permanence, potential and connectivity matrices.

Real avgConnectedSpanForColumnND_(UInt column)

The range of connectedSynapses per column, averaged for each dimension.

This vaule is used to calculate the inhibition radius. This variation of the function supports arbitrary column dimensions.

Parameters
  • column: An int number identifying a column in the permanence, potential and connectivity matrices.

void updateMinDutyCycles_()

Updates the minimum duty cycles defining normal activity for a column.

A column with activity duty cycle below this minimum threshold is boosted.

void updateMinDutyCyclesGlobal_()

Updates the minimum duty cycles in a global fashion.

Sets the minimum duty cycles for the overlap and activation of all columns to be a percent of the maximum in the region, specified by minPctOverlapDutyCycle and minPctActiveDutyCycle respectively. Functionally it is equivalent to _updateMinDutyCyclesLocal, but this function exploits the globalilty of the computation to perform it in a straightforward, and more efficient manner.

void updateMinDutyCyclesLocal_()

Updates the minimum duty cycles.

The minimum duty cycles are determined locally. Each column’s minimum duty cycles are set to be a percent of the maximum duty cycles in the column’s neighborhood. Unlike _updateMinDutyCycles

void updateDutyCycles_(vector<UInt> &overlaps, UInt activeArray[])

Updates the duty cycles for each column.

The OVERLAP duty cycle is a moving average of the number of inputs which overlapped with the each column. The ACTIVITY duty cycles is a moving average of the frequency of activation for each column.

Parameters
  • overlaps: an int vector containing the overlap score for each column. The overlap score for a column is defined as the number of synapses in a “connected state” (connected synapses) that are connected to input bits which are turned on.
  • activeArray: An int array containing the indices of the active columns, the sprase set of columns which survived inhibition

void updateBoostFactors_()

Update the boost factors for all columns.

The boost factors are used to increase the overlap of inactive columns to improve their chances of becoming active, and hence encourage participation of more columns in the learning process. The boosting function is a curve defined as: boostFactors = exp[ - boostStrength * (dutyCycle - targetDensity)] Intuitively this means that columns that have been active at the target activation level have a boost factor of 1, meaning their overlap is not boosted. Columns whose active duty cycle drops too much below that of their neighbors are boosted depending on how infrequently they have been active. Columns that has been active more than the target activation level have a boost factor below 1, meaning their overlap is suppressed

The boostFactor depends on the activeDutyCycle via an exponential function:

        boostFactor
        ^
        |
        |\
        | \
  1  _  |  \
        |    _
        |      _ _
        |          _ _ _ _
        +--------------------> activeDutyCycle
              |
        targetDensity

void updateBoostFactorsLocal_()

Update boost factors when local inhibition is enabled.

In this case, the target activation level for each column is estimated as the average activation level for columns in its neighborhood.

void updateBoostFactorsGlobal_()

Update boost factors when global inhibition is enabled.

All columns share the same target activation level in this case, which is the sparsity of spatial pooler.

void updateBookeepingVars_(bool learn)

Updates counter instance variables each round.

Parameters
  • learn: a boolean value indicating whether learning should be performed. Learning entails updating the permanence values of the synapses, and hence modifying the ‘state’ of the model. setting learning to ‘off’ might be useful for indicating separate training vs. testing sets.

bool isUpdateRound_()

Return
boolean value indicating whether enough rounds have passed to warrant updates of duty cycles

void seed_(UInt64 seed)

Initialize the random seed.

Parameters
  • seed: 64bit int of random seed

void printState(vector<UInt> &state)

Print the given UInt array in a nice format.

void printState(vector<Real> &state)

Print the given Real array in a nice format.

Public Static Functions

static void updateDutyCyclesHelper_(vector<Real> &dutyCycles, vector<UInt> &newValues, UInt period)

Updates a duty cycle estimate with a new value.

This is a helper function that is used to update several duty cycle variables in the Column class, such as: overlapDutyCucle, activeDutyCycle, minPctDutyCycleBeforeInh, minPctDutyCycleAfterInh, etc. returns the updated duty cycle. Duty cycles are updated according to the following formula:

              (period - 1)*dutyCycle + newValue
  dutyCycle := ----------------------------------
                          period
Parameters
  • dutyCycles: A real array containing one or more duty cycle values that need to be updated.
  • newValues: A int vector used to update the duty cycle.
  • period: A int number indicating the period of the duty cycle