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 LIFsampler
s. 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
LIFsampler
s 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 LIFsampler
s 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 install
Local install:
python setup.py install --user
Install 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)numpy
scipy
Cython
matplotlib
- 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.