Spike-based-sampling, sbs, implements stochastic LIF
sampling. It takes care of calibrating LIF
neurons for given neuron/input parameters and allows the evaluation of
arbitrary Boltzmann-distributions in static networks.
If you want to jump right in, just see the tutorial.
sbs clearly separates the abstract concept of stochastic LIF neurons and
Boltzmann machine (BM) from network communication code. Its two main conceptual
buildings blocks are LIFsampler as well as
BoltzmannMachine.
The LIFsampler is described by a neuron model, its corresponding parameters
and a back- ground source configuration (typically one excitatory and one
inhibitory Poisson source with set rate and synaptic weight). Given this
configuration, it is able to automatically calibrate itself to find the weight
conversion factors as well as the membrane potential at which the activation
function is exactly 0.5. For re-usability, a complete LIFsampler's
configuration is saved as JSON-file to allow for easy inspection. After
calibrating once, the LIFsampler can be created from file.
The BoltzmannMachine on the other hand implements – as the name suggests – a
BM of inter- connected
heterogeneously configured LIFsamplers. The user can specify either theoretical
or biological weight/bias configuration. The BoltzmannMachine takes care of
automatically translating between the two, taking into account each
LIFsamplers possibly unique calibration data. The network can then be run to
gather spike samples from the corresponding biological network, from which a
sample-based approximation of the underlying probability distributions is
automatically computed. Renewing synapses with custom
Tsodyks-Markram
parameters are also possible. For smaller networks, theoretical distributions
can be computed as well as the Kullback-Leibler divergence (DKL) computed
between the two. Demanding computations regarding probability distributions or
state computations from spike trains are implemented using
Cython, a library that converts type-annotated Python to
C that is then pre-compiled and loaded as shared library during execution.
An important feature of sbs is that no PyNN-specific code is run until the
user explicitly requests it, e.g., via each objects create()-routine. This is
necessary due to PyNN's inherent "statefulness". Even though a call to
sim.end()/sim.setup(…) is supposed to wipe the currently used simulator's
network state (according to the API-specification) it is not always the case.
This way, tasks such as computing theoretical probability distributions or
performing weight conversions of already calibrated LIFsamplers can be
accomplished without involving PyNN at all. Furthermore, tasks that involve
PyNN – e.g., calibration or the gathering of spikes given a BM-configuration
– can be offloaded into subprocesses in a fully transparent manner, allowing
for more than one of such tasks to be performed in a single run.
Another feature introduced by sbs is the ability to compute attributes of a
class on demand. Each attribute computes the values of other attributes it
depends on automatically. This is accomplished by decorating each attribute by
@DependsOn(...) where the arguments are the names of the corresponding
dependencies. The whole class object then needs to be decorated with
@HasDependencies. Values are stored and reused once computed and only
discarded when one of the dependencies is changed.
For example, accessing the sampled Boltzmann probability distribution of the
Boltzmann-object for the first time after automatically computes the
distribution from the recorded spike data. Each subsequent access does not lead
to a new computation, the probability distribution is stored. If, however, new
spike data is gathered, the old distribution is discarded and recomputed once
needed. The same relationship exists between the theoretical distribution and
the weights set for the network.
The attribute is a simple function accepting up to one argument. Akin to the
properties concept of Python itself, it has to implement both get and set
operations. If the optional argument is None (get-operation), the function has
to compute its current value from its dependencies and return it. If the
optional argument is defined (set-operation), the function has the ability to
transform the value before returning what should be stored.
The installation process is your plain old setuptools-workflow.
Global install:
python setup.py installLocal install:
python setup.py install --userInstall to specific <folder>:
python setup.py install --prefix=<folder>- Python 2 (upgrade to Python 3 happening soon™)
PyNN v0.8(and a corresponding neural simulator)numpyscipyCythonmatplotlib- For NEST, the speed-up improvements
are only tested with versions up to
2.14.0!
sbs was foolishly written by:
- Oliver Breitwieser, Kirchhoff Institute for Physics, Heidelberg University
The following people contributed to the code:
- Andreas Baumbach, Kirchhoff Institute for Physics, Heidelberg University
- Agnes Korcsak-Gorzo, Forschungszentrum Jülich
- Johann Klähn, Kirchhoff Institute for Physics, Heidelberg University
- Max Brixner, Kirchhoff Institute for Physics, Heidelberg University
sbs is based on a proof-of-concept prototype developed for the original LIF
sampling paper by Mihai A. Petrovici (University of Bern), who
also helped to guide the development of sbs in terms of theory.
Publications in which sbs was used include the following:
-
Stochasticity from function - why the Bayesian brain may need no noise Dominik Dold*, Ilja Bytschok*, Akos F. Kungl, Andreas Baumbach, Oliver Breitwieser, Walter Senn, Johannes Schemmel, Karlheinz Meier, Mihai A. Petrovici* Neural Networks 119 (2019) LINK
-
Deterministic networks for probabilistic computing Jakob Jordan, Mihai A. Petrovici, Oliver Breitwieser, Johannes Schemmel, Karlheinz Meier, Markus Diesmann, Tom Tetzlaff Scientific Reports 9, 18303 (2019) LINK
-
Spiking neurons with short-term synaptic plasticity form superior generative networks Luziwei Leng*, Roman Martel, Oliver Breitwieser, Ilja Bytschok, Walter Senn, Johannes Schemmel, Karlheinz Meier & Mihai A. Petrovici* Scientific Reports 8, 10651 (2018) LINK
-
Simulated Tempering in Biologically Inspired Neural Networks Agnes Korcsak-Gorzo, Luziwei Leng, Oliver Julien Breitwieser, Johannes Schemmel, Karlheinz Meier, Mihai Alexandru Petrovici Deutsche Physikerinnentagung (2017) LINK
-
Bayesian computing with spikes A. Baumbach, M. A. Petrovici, L. Leng, O. J. Breitwieser, D. Stoeckel, I. Bytschok, J. Schemmel, K. Meier 1st HBP Student Conference (2017) LINK
This open source software code was developed in part in the Human Brain Project, funded from the European Union’s Horizon 2020 Framework Programme for Research and Innovation under the Specific Grant Agreement No. 720270 (HBP SGA1) and 785907 (HBP SGA2).
sbs is licensed under LGPLv3. See LICENSE for more information.