Releases: NACLab/ngc-learn
v1.2.0-beta release: major cleanup of base, docs update, new utils/features and now conv/deconv synapses
Highlights
The release contains several improvements/upgrades, including many patches and bug-fixes and notably revised utilities/components. Notably, among the newest significant additions/changes -- monitors have been integrated, Lava-specific components were integrated, a BCM-based synapse was itnegrated, convolution/deconvolution synaptic components are now supported with variants that adjust through 2-factor Hebbian learning and trace-based STDP. In addition, a weight_distribution
utility file has been written to streamline random initialization of initial conditions for desired variables (e.g., voltage thresholds, synaptic parameter values, etc.). The numerical ntegration/ODE back-end has also been updated.
The following key/recent updates have been made (this list is non-exhaustive):
- BCM synapse was integrated (under
ngclearn.components.synapses.hebbian
) - Convolution and deconvolution synapses have been integrated (including static and plastic variants)
- Monitors (for tracking compartment values over time) have been integrated
- Core lava/loihi2 support has been integrated -- notably through
ngclearn.components.lava
with Lava-compliant components that interface with ngc-lava (separate project repo to use in tandem with these) - New
weight_distribution
utility written for streamlining initial condition initialization - RK-4 has been integrated into numerical integration backend
- Patches and bug-fixes have been applied throughout (since last several intermediate beta versions)
- Documentation has been updated/revised and revamped to reflect new changes in ngc-learn/sim-lib and now features Lava docs for ngc-lava usage
v1.0.2-beta release: full simulation backend upgrade (migration to JAX)
Highlights
The release contains several improvements/upgrades, particularly a complete rewrite and reformulation of the backend (i.e., the nodes-and-cables system), notably constructing a core dependency library called ngc-sim-lib (ngcsimlib), which focuses on handling the generic/abstract simulation machinery for complex systems, while ngc-learn focuses on the neuroscience components and neurocognitive mechanisms.
The following updates have been made (this list is non-exhaustive):
- Complete rewrite and reformulation of nodes-and-cables system; now a controller-component-command general structure provides the core machinery for conducting simulation of arbitrary time-evolving complex systems. Additional elements were written to carry over prior ngc-learn functionality (prior tensorflow2 version migrated to ngc-learn-legacy). Backend offers more general, flexible construction of systems, particularly making writing custom/novel elements easier. A JSON configuration scheme has been added to provide modularity and ease of importing of relevant tools/portions of ngc-learn for any given local project.
- RateCell and Gaussian/Laplacian error cells (these are now labeled as "graded cells") have been written to carry over previous ngc-learn-legacy functionality while LIFCell, sLIFCell, and QuadLIF cells have been written to carry over previous spiking cell functionality. An izhikevich cell stub/base has been written and will be developed for subsequent beta versions. Other nodes/operators were written to carry over variable traces and input encodings (such as those for sampling Poisson spike trains).
- UPDATE over beta0 and beta1 -- latencyCell integrated/validated in "input_encoders"; clamp_min and clamp_max routines have been written/integrated in "model_utils"
- Utils was rewritten to be compliant with new JAX backend/framing -- density and visualization tools have been moved as subset of utils; density currently has a JAX stub/base for re-integration of the GMM sampling wrapper. A new optim (optimization) subset has been added with simple plug-in-play of optimized sgd and adam adaptive learning rates. Patching tools, other model, and I/O utilities (as well as primary mathematical routines) have been re-integrated into utils to be compliant with new JAX formulation.
- STDP is now a first-class citizen of the built-in synaptic components offered by ngc-learn; in addition to re-integrating the two-factor Hebbian update (as simple hebbian synapse component), two variations of spike-timing-dependent plasticity have been integrated as two core component synapses.
- All components have had their core dynamics sub-routines optimized to leverage the just-in-time compiler.
- Documentation has been rewritten to be compliant and account for the revised backend and JAX formulation of ngc-learn; more tutorials focused on neurocognitve modeling will be rolled out with subsequent beta versions (to recover old tutorials from prior version).
- The model museum has been extracted and will now exist as a separate repository for ease of maintenance and to promote further community contributions of models that are simulated with ngc-learn (documentation forthcoming to account for this significant change)
v0.5.0 release with Spiking Nodes
Highlights
The release contains several improvements/upgrades, including graph visualization functionality (using networkx and pyvis -- currently this module is under ngclearn.utils.experimental and is optional though it has been tested and used to generate visualizations for all of the models in the Model Museum documentation). Notably, this iteration of ngc-learn showcases how to use its dynamics simulator for modeling networks of spiking neurons with the introduction of the SpNode_LIF (leak integrate-and-fire node) and SpNode_Enc (Poisson spike train encoder) which appear formally in the newly added Walkthrough #7.
The following updates have been made (this list is non-exhaustive):
- Modification made to decouple/expose the local Hebbian rule system with the introduction of the UpdateRule class and HebbRule and CHebbRule (contrastive rule) a sub-classes (HebbRule usage is illustrated in Walkthrough 7 and is also the default rule used by ngc-learn if nothing is done by the user)
- Integration of the SpNode_LIF -- leak integrate-and-fire node -- and the SpNode_Enc -- Poisson spike train encoder -- as well as a specialized convenience/helper node FNode_BA (for easily supporting broadcast alignment learning mechanisms)
- Added new viz_utils module (specifically ngclearn.utils.viz_utils) which also includes support for raster plot creation (for visualizing spike trains)
- Created Walkthrough #7 which walks through the process of creating a spiking neural network classifier in ngc-learn using the low-level online simulation API
- Graph visualization (through networkx and pyvis) now offered in ngclearn.utils.experimental
- Minor patches, doc edits (including updates to API doc and Model Museum -- each model now includes a graphical visualization of their nodes-and-cables graph), and bug testing given new rule API and spiking nodes
v0.4.0 (with improvements from v0.3.0-alpha integrated)
Highlights
The release contains several improvements/upgrades, including the modifications made in v0.3.0-alpha for the cable API, which have now been tested and all walkthroughs work properly.
The following updates have been made (this list is non-exhaustive):
- Improved Cable API (from v0.3.0-alpha), synapse decay option integrated into the DCable class
- Harmonium integrated into Model Museum (guidance offered in included Walkthrough 6)
- "demonstrations" have been renamed to "walkthroughs" (and documentation updated to reflect these changes)
- Several test scripts that check for correctness in NGC dynamics and Harmonium evolution
- The low-level online ".step()" API/functionality has been cleaned up (and ".settle()" has been cleaned up to remove some unnecessary calls to compartment zero-ing out functions -- alterations were tested again tests and walkthroughs and all checks passed)
- Tutorial Lesson 1 has been created detailing how users/experimenters can work with ngc-learn's nodes-and-cables system (and to aid newcomers to work with the core elements of the library to build their own NGC circuits)
- The InfiMIST data generator has been integrated into the "/generator/experimental" module sub-directory of ngc-learn core (also a few minor bugs were fixed in the NoisySinusoid temporal data generator)
v0.3.0-alpha
Highlights
The intermediate release contains the modifications made with the inclusion of the Demonstration 6 restricted Boltzmann machine tutorial:
- the API for Cable/DCable was altered to provide more flexibility in the local learning rule update specification as well as the argument kernel controlling the nature of a "shared" synaptic cable (with additional internal revisions to make sure the dynamics respects the new Cable API)
- a sampling function compartment was added to the SNode, allowing for easy integration/configuration of stochastic sampling to occur within a state node if desired (note that the default for stochastic sampling is set to the identity function and must be turned on by the user)
- an additional test was added to /tests/ folder that now checks the dynamics of an NGC Harmonium graph against a hand-coded/analytical model
- Demonstration 6 for building Harmoniums was written/integrated into the documentation (the Harmonium class was formally added to the Model Museum)
v0.2.0 release with TF static graph optimization
Highlights
The following aspects of ngc-learn were revamped/revised (the list is not exhaustive):
- the ngc graph and projection graph simulation objects, as well as all nodes and cables, were revised to utilize a ".compile()" routine to allow for Tensorflow 2 static graph optimized calculations (as well as to generate "property" hash tables to allow post-compilation examination). Internal modules, such as nodes, now use in-place memory calculations to further speed up simulation (a 5-7.5 times simulation speed improvement was observed) and elements of cables, such as the symbol flags used to indicate what type of transformation is to be applied have been edits (for example, in the shared_param_path, "symm_tied" is now "A^T" and the "point_to" argument has been folded into shared_param_path where direct synapse sharing is indicated simply with the symbol "A")
- documentation was added/improved (and edited to reflect the API alterations), and two new demonstrations/tutorials (Demonstrations 4 and 5) were included (see both docs and examples/)
- node and cable system internally rewritten (with only a few alterations to the surface-level API) to better facilitate future expansions and community contributions
- community guidelines was built/published
Initial Release
Initial release of the NGC-Learn library.