fsfffb

package
v1.6.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2022 License: BSD-3-Clause Imports: 1 Imported by: 0

README

FS (Fast & Slow) FFFB Inhibition

FFFB is the feedforward (FF) and feedback (FB) inhibition mechanism, originally developed for the Leabra model. It applies inhibition as a function of the average Ge (excitatory conductance) of units in the layer (FF = reflecting all the excitatory input to a layer) and average Act rate-code-like activation within the layer (FB = reflecting the activity level within the layer itself), which is slowly integrated over time as a function of the ISI (inter-spike-interval).

This new FS -- fast and slow -- version of FFFB starts directly with spike input signals instead of using "internal" variables like Ge and Act, and uses time dynamics based on an emerging consensus about the differences between three major classes of inhibitory interneurons, and their functional properties, e.g., Cardin, 2018.

  • PV: fast-spiking basket cells that target the cell bodies of excitatory neurons and coexpress the calcium-binding protein parvalbumin (PV). These are the "first responders", and are also rapidly depressing -- they provide quick control of activity, responding to FF new input and FB drive, allowing the first spiking pyramidal neurons to quickly shut off other competitors.

  • SST: more slowly-responding, low-threshold spiking cells that target the distal dendrites of excitatory neurons and coexpress the peptide somatostatin (SST). These require repetitive, facilitating, afferent input to be activated, and may regulate the dendritic integration of synaptic inputs over a longer timescale. The dependence in the original FFFB of FB on the slower integrated Act variable, which only comes on after the first spike (in order to compute the ISI), is consistent with these slower SST dynamics.

  • VIP: sparse dendrite-targeting cells that synapse onto SST interneurons and the dendrites of pyramidal neurons, and coexpress vasoactive intestinal peptide (VIP). VIP interneurons are a subset of the larger 5HT3aR-expressing interneuron class. These can provide disinhibition of SST inhibition. These are targeted by thalamic projections into layer 1 of cortex, and may be responsible for arousal and gating-like modulation from the thalamus. We do not directly implement them in axon, but do indirectly capture their effects in the gating dynamics of the pcore model.

Remarkably, the parameters that work to enable successful error-driven learning in axon using the new FS-FFFB equations end up very closely reproducing the net inhibition produced by the original FFFB model, as shown in the following figure.

FS-FFFB vs original FFFB

Figure 1: Comparison of original FFFB inhibition (OGi) vs. new FS-FFFB inhibition (SGi) from the inhib example simulation, showing that the FS-FFFB parameters that enable successful learning produce nearly identical overall levels of inhibition compared to the original. Act.Avg shows the time-averaged activity in the lower layer that feeds into the one shown, and resembles the slow SST response, while the jagged ups and downs are due to the fast PV component.

PV is fast and highly chaotic

The dramatic swings in Gi levels as shown in the above figure are all due to the PV Fast component, which increases directly as a function of incoming FF and FB spikes, and decays with a fast time constant of 6 msec (default):

	FSi += (FFs + FB*FBs) - FSi/FSTau

where:

  • FSi = fast PV contribution to inhibition, time-integrated.
  • FFs = normalized sum of incoming FF spikes.
  • FBs = normalized sum of incoming FB spikes from neurons in the same pool being inhibited.
  • FB = weighting factor for FB spikes, which defaults to 1 but needs to be smaller for smaller networks (0.5) and larger for larger ones (e.g., 4).
  • FSTau = time constant for decaying FSi (6 msec default).

SST is a slow time-average

The slow SST contribution slowly tracks overall spiking activity in the pool, roughly as the Act.Avg green line in the above figure, based on the following equations:

	SSi += (SSf*FBs - SSi) / SSiTau
	SSf += FBs*(1-SSf) - SSf / SSfTau

where:

  • SSi = slow SST contribution to inhibition, time-integrated.
  • SSf = synaptic facilitation component for SS, which increases as a function of spiking activity as shown in the 2nd equation.
  • FBs = normalized sum of incoming FB spikes from neurons in the same pool being inhibited.
  • SSiTau = integration time constant for SSi, which is 50 msec by default (slow).
  • SSfTau = time constant for SSf, which is 20 msec by default.

Combined Gi

The combined overall inhibitory conductance Gi is based on a thresholded version of the FSi component plus a weighted contribution of the SSi level, which tends to be very weak due to the long time integral:

    Gi = |FSi > FS0|_+ + SS * SSi

where:

  • Gi = overall inhibitory conductance.
  • FSi = fast-spiking inhibition per above.
  • SSi = slow-spiking inhibition per above.
  • FS0 = threshold for FSi, default .1 as in the original FFFB, below which it contributes 0. This factor is important for filtering out small levels of incoming spikes and produces an observed nonlinearity in the Gi response.
  • SS = multiplier for SSi, which is 30 by default: SSi is relatively weak so this needs to be a strong multiplier to get into the range of FSi.

References

Documentation

Overview

Package fsfffb provides Fast and Slow feedforward (FF) and feedback (FB) inhibition (FFFB) based on incoming spikes (FF) and outgoing spikes (FB).

This produces a robust, graded k-Winners-Take-All dynamic of sparse distributed representations having approximately k out of N neurons active at any time, where k is typically 10-20 percent of N.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Inhib

type Inhib struct {
	FFsRaw   float32 `desc:"all feedforward incoming spikes into neurons in this pool -- raw aggregation"`
	FBsRaw   float32 `desc:"all feedback outgoing spikes generated from neurons in this pool -- raw aggregation"`
	GeExtRaw float32 `desc:"all extra GeExt conductances added to neurons"`
	FFs      float32 `desc:"all feedforward incoming spikes into neurons in this pool, normalized by pool size"`
	FBs      float32 `desc:"all feedback outgoing spikes generated from neurons in this pool, normalized by pool size"`
	GeExts   float32 `desc:"all extra GeExt conductances added to neurons, normalized by pool size"`
	Clamped  bool    `desc:"if true, this layer is hard-clamped and should use GeExts exclusively for PV"`
	FSi      float32 `desc:"fast spiking PV+ fast integration of FFs feedforward spikes"`
	SSi      float32 `desc:"slow spiking SST+ integration of FBs feedback spikes"`
	SSf      float32 `desc:"slow spiking facilitation factor"`
	FSGi     float32 `desc:"overall fast-spiking inhibitory conductance"`
	SSGi     float32 `desc:"overall slow-spiking inhibitory conductance"`
	Gi       float32 `desc:"overall inhibitory conductance = FSGi + SSGi"`
	GiOrig   float32 `desc:"original value of the inhibition (before pool or other effects)"`
	LayGi    float32 `` /* 127-byte string literal not displayed */
}

Inhib contains state values for computed FFFB inhibition

func (*Inhib) Decay

func (fi *Inhib) Decay(decay float32)

Decay reduces inhibition values by given decay proportion

func (*Inhib) GiFmFSSS added in v1.6.1

func (fi *Inhib) GiFmFSSS() float32

GiFmFSSS returns the sum of FSGi and SSGi as overall inhibition

func (*Inhib) Init

func (fi *Inhib) Init()

func (*Inhib) InitRaw

func (fi *Inhib) InitRaw()

InitRaw clears raw spike counters -- done every cycle prior to accumulating

func (*Inhib) LayerMax

func (fi *Inhib) LayerMax(li *Inhib)

LayerMax updates given pool-level inhib values from given layer-level with resulting value being the Max of either

func (*Inhib) PoolMax

func (fi *Inhib) PoolMax(pi *Inhib)

PoolMax updates given layer-level inhib values from given pool-level with resulting value being the Max of either

func (*Inhib) SaveOrig

func (fi *Inhib) SaveOrig()

SaveOrig saves the current Gi values as original values

func (*Inhib) SpikesFmRaw

func (fi *Inhib) SpikesFmRaw(npool int)

SpikesFmRaw updates spike values from raw, dividing by given number in pool

func (*Inhib) Zero

func (fi *Inhib) Zero()

Zero resets all accumulating inhibition factors to 0

type Inhibs

type Inhibs []Inhib

Inhibs is a slice of Inhib records

type Params

type Params struct {
	On     bool    `desc:"enable this level of inhibition"`
	Gi     float32 `` /* 249-byte string literal not displayed */
	FB     float32 `` /* 204-byte string literal not displayed */
	FSTau  float32 `` /* 188-byte string literal not displayed */
	SS     float32 `` /* 152-byte string literal not displayed */
	SSfTau float32 `` /* 284-byte string literal not displayed */
	SSiTau float32 `` /* 215-byte string literal not displayed */
	FS0    float32 `` /* 145-byte string literal not displayed */
	FS0Ext bool    `viewif:"On" desc:"apply FS0 to GeExt external excitatory input"`

	FSDt  float32 `inactive:"+" view:"-" json:"-" xml:"-" desc:"rate = 1 / tau"`
	SSfDt float32 `inactive:"+" view:"-" json:"-" xml:"-" desc:"rate = 1 / tau"`
	SSiDt float32 `inactive:"+" view:"-" json:"-" xml:"-" desc:"rate = 1 / tau"`
}

Params parameterizes feedforward (FF) and feedback (FB) inhibition (FFFB) based on incoming spikes (FF) and outgoing spikes (FB) across Fast (PV+) and Slow (SST+) timescales. FF -> PV -> FS fast spikes, FB -> SST -> SS slow spikes (slow to get going)

func (*Params) Defaults

func (fb *Params) Defaults()

func (*Params) FS

func (fb *Params) FS(fsi, gext float32, clamped bool) float32

FS returns the current effective FS value based on fsi and fsd if clamped, then only use gext, without applying FS0

func (*Params) FS0Thr added in v1.6.5

func (fb *Params) FS0Thr(val float32) float32

FS0Thr applies FS0 threshold to given value

func (*Params) FSiFmFFs

func (fb *Params) FSiFmFFs(fsi *float32, ffs, fbs float32)

FSiFmFFs updates fast-spiking inhibition from FFs spikes

func (*Params) Inhib

func (fb *Params) Inhib(inh *Inhib, gimult float32)

Inhib is full inhibition computation for given inhib state which has aggregated FFs and FBs spiking values

func (*Params) SSFmFBs

func (fb *Params) SSFmFBs(ssf, ssi *float32, fbs float32)

SSFmFBs updates slow-spiking inhibition from FBs

func (*Params) Update

func (fb *Params) Update()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL