
Un paquete Python utilizado para simular redes neuronales de picos (SNN) en CPU o GPU utilizando la funcionalidad Tensor Pytorch.
BindSnet es una biblioteca de simulación de red neuronal de picos orientada hacia el desarrollo de algoritmos de inspiración biológica para el aprendizaje automático.
Este paquete se utiliza como parte de la investigación en curso sobre la aplicación de los problemas de SNN, aprendizaje automático (ML) y aprendizaje de refuerzo (RL) en el laboratorio de sistemas neuronales y dinámicos de inspiración biológica (Binds) y el Centro de Discovery de Allen en la Universidad de Tufts.
Consulte los ejemplos de BindSnet para una colección de experimentos, funciones para el análisis de resultados, gráficos de resultados del experimento y más. La documentación para el paquete se puede encontrar aquí.

Para instalar la versión estable más reciente desde el repositorio de GitHub
pip install git+https://github.com/BindsNET/bindsnet.git
O, para construir el paquete bindsnet a partir de la fuente, clonar el repositorio de GitHub, cambiar el directorio al nivel superior de este proyecto y un problema
pip install .
O, para instalar en modo editable (permite la modificación del paquete sin reinstalar):
pip install -e .
Para instalar los paquetes necesarios para interactuar con la biblioteca de entornos Operai Gym RL, siga sus instrucciones para instalar los paquetes necesarios para ejecutar el simulador de entornos RL (en Linux / macOS).
Enlace al repositorio de Docker.
También proporcionamos un DockerFile en el que BindSnet y todas sus dependencias se instalan.
docker build .
En el directorio de nivel superior de este proyecto para crear una imagen Docker.
Para cambiar el nombre de la imagen recién construida, problema
docker tag <IMAGE_ID> <NEW_IMAGE_ID>
Para ejecutar un contenedor y obtener una terminal de Bash en su interior, problema
docker run -it <NEW_IMAGE_ID> bash
Para ejecutar una casi replicación del SNN de este documento, problema
cd examples/mnist
python eth_mnist.py
Hay una serie de argumentos de línea de comandos opcionales que se pueden transmitir, incluyendo --plot (muestra figuras de monitoreo útiles), --n_neurons [int] (número de neuronas inhibitorias excitadoras simuladas), --mode ['train' | 'test'] (establece la operación de red en la fase de capacitación o prueba), y más. Ejecute el script con el indicador --help o -h para obtener más información.
Hay varios otros ejemplos disponibles en el directorio examples que están destinados a mostrar la funcionalidad de BindSnet. ¡Echa un vistazo y háganos saber lo que piensas!
Emita lo siguiente para ejecutar las pruebas:
python -m pytest test/
Algunas pruebas fallarán si Open AI gym no está instalado en su máquina.
La simulación de la dinámica neuronal de picos biológicamente plausible puede ser un desafío. Por lo general, se realiza resolviendo ecuaciones diferenciales ordinarias (ODES) que describen dicha dinámica. Pytorch no admite explícitamente la solución de ecuaciones diferenciales (a diferencia de brian2 , por ejemplo), pero podemos convertir las ODES que definen la dinámica en ecuaciones de diferencia y las resuelvamos a intervalos regulares y cortos (un dt en el orden de 1 milisegundo) como una aproximación. Por supuesto, debajo del capó, paquetes como brian2 están haciendo lo mismo. Hacer esto en PyTorch es emocionante por algunas razones:
Podemos usar el objeto torch.Tensor poderoso y flexible, un envoltorio alrededor del numpy.ndarray que puede transferirse hacia y desde dispositivos GPU.
Podemos evitar "reinventar la rueda" reutilizando las funciones de la torch.nn.functional Submódulo Pytorch funcional en nuestras arquitecturas SNN; por ejemplo, funciones de convolución o agrupación.
El concepto de que el orden de neuronas y su tiempo relativo codifican información es un tema central en neurociencia. Markram et al. (1997) propusieron que las sinapsis entre las neuronas deberían fortalecerse o degradarse en base a este momento relativo, y antes de eso, Donald Hebb propuso la teoría del aprendizaje hebbiano, a menudo simplemente declarado como "neuronas que disparan, se alzan juntos". La extensión de Markram et al. De la teoría hebbiana se conoce como plasticidad dependiente de la velocidad del pico (STDP).
Estamos interesados en aplicar SNN a problemas de ML y RL. Utilizamos STDP para modificar pesos de sinapsis que conectan pares o poblaciones de neuronas en SNN. En el contexto de ML, queremos aprender una configuración de pesos de sinapsis que generará una actividad de pico dependiente de datos en SNN. Esta actividad nos permitirá realizar posteriormente una tarea de interés de ML; EG, discriminación o agrupación de datos de entrada. En el contexto de RL, podemos pensar en la red neuronal de picos como un agente de RL, cuya actividad de pico puede convertirse en acciones en el espacio de acción de un entorno.
Hemos proporcionado algunos scripts de inicio simples para hacer un aprendizaje no supervisado (aprender una representación totalmente conectada o convolucional a través de STDP), el aprendizaje supervisado (sujetar las neuronas de salida a la conducta deseada del aumento de los picos dependiendo de las etiquetas de datos) y el aprendizaje de refuerzo (convergir observaciones de los invasores de espacio de juegos ATARI a la entrada a un SNN y la actividad de la red de la red de la red en las acciones en el juego).
Simulamos una red con una población de N neuronas de entrada de Poisson con tasas de disparo (en Hertz) extraída al azar de U (0, 100), conectado total con una población igualmente de neuronas integradas con fugas (LIF), con pesos de conexión muestreados a partir de n (0,1). Variamos N sistemáticamente de 250 a 10,000 en pasos de 250, y ejecutamos cada simulación con cada biblioteca durante 1,000 ms con una resolución de tiempo DT = 1.0. Probamos Bindsnet (con CPU y cálculo de GPU), Brian2, Pynest (la interfaz de Python a la interfaz Nest SLI que ejecuta el simulador de núcleo de Nest C ++), anarquía (con CPU y computación GPU) y Brian2genn (el front-end del simulador GenN).
Varios paquetes, incluidos Brian y Pynest, permiten el establecimiento de ciertas preferencias globales; Por ejemplo, el número de subprocesos de CPU, el número de procesos OpenMP, etc. Elegimos estas configuraciones para nuestro estudio de referencia en un intento de maximizar la velocidad de cada biblioteca, pero tenga en cuenta que BindSnet no requiere una configuración de tales opciones. Nuestro enfoque, heredar el modelo computacional de Pytorch, parece hacer el mejor uso del hardware disponible y, por lo tanto, simplifica que los profesionales obtengan el mejor rendimiento de su sistema con el menor esfuerzo.

Todas las simulaciones se ejecutan en Ubuntu 16.04 LTS con Intel (R) Xeon (R) CPU E5-2687W V3 @ 3.10GHz, 128GB RAM @ 2133MHz y dos GPU GEFORCE GTX Titan X (GM200). Python 3.6 se usa en todos los casos. El tiempo del reloj se registró para cada ejecución de simulación.
Si usa BindSnet en su investigación, cite el siguiente artículo:
@ARTICLE{10.3389/fninf.2018.00089,
AUTHOR={Hazan, Hananel and Saunders, Daniel J. and Khan, Hassaan and Patel, Devdhar and Sanghavi, Darpan T. and Siegelmann, Hava T. and Kozma, Robert},
TITLE={BindsNET: A Machine Learning-Oriented Spiking Neural Networks Library in Python},
JOURNAL={Frontiers in Neuroinformatics},
VOLUME={12},
PAGES={89},
YEAR={2018},
URL={https://www.frontiersin.org/article/10.3389/fninf.2018.00089},
DOI={10.3389/fninf.2018.00089},
ISSN={1662-5196},
}
Hecho con contribuciones.
GNU Affero General Public License v3.0