NEST (oprogramowanie)
Oryginalni autorzy | Markus Diesmann, Marc-Oliver Gewaltig, Abigail Morrison, Hans Ekkehard Plesser |
---|---|
Deweloperzy | Inicjatywa NEST |
Pierwsze wydanie | 1 sierpnia 2004 |
Wersja stabilna | 2.20.0 / 31 stycznia 2020
|
Napisane w | C++ , Python , Cython |
System operacyjny | wieloplatformowy |
Dostępne w | język angielski |
Typ | Neuronauka obliczeniowa |
Licencja | GPLv 2+ |
Strona internetowa |
NEST to oprogramowanie symulacyjne do tworzenia modeli sieci neuronowych , w tym wielkoskalowych sieci neuronowych. NEST został pierwotnie opracowany przez Markusa Diesmanna i Marca-Olivera Gewaltiga, a obecnie jest rozwijany i utrzymywany przez NEST Initiative.
Filozofia modelowania
Symulacja NEST stara się podążać za logiką eksperymentu elektrofizjologicznego , który odbywa się wewnątrz komputera, z tą różnicą, że badany układ neuronowy musi być zdefiniowany przez eksperymentatora.
System neuronowy definiowany jest przez możliwie dużą liczbę neuronów i ich połączeń . W sieci NEST mogą współistnieć różne modele neuronów i synaps. Dowolne dwa neurony mogą mieć wiele połączeń o różnych właściwościach. Zatem łączność nie może być ogólnie opisana za pomocą macierzy wagi lub łączności , ale raczej jako lista sąsiedztwa .
Aby manipulować lub obserwować dynamikę sieci, eksperymentator może zdefiniować tak zwane urządzenia, które reprezentują różne instrumenty (do pomiaru i stymulacji) znalezione w eksperymencie. Te urządzenia zapisują swoje dane w pamięci lub w pliku.
NEST jest rozszerzalny i można dodawać nowe modele neuronów, synaps i urządzeń.
Przykład
Poniższy przykład symuluje aktywność skokową w rzadkiej losowej sieci z powtarzającym się wzbudzaniem i hamowaniem
Rysunek przedstawia aktywność szczytową 50 neuronów jako wykres rastrowy. Czas wzrasta wzdłuż osi poziomej, identyfikator neuronu rośnie wzdłuż osi pionowej. Każda kropka odpowiada skokowi odpowiedniego neuronu w danym czasie. Dolna część rysunku przedstawia histogram ze średnią szybkością odpalania neuronów.
import nest import nest.raster_plot J_ex = 0,1 # waga pobudzająca J_in = - 0,5 # waga hamująca p_rate = 20000. # zewnętrzny współczynnik Poissona neuron_params = { "C_m" : 1,0 , "tau_m" : 20,0 , "t_ref" : 2,0 , "E_L " : 0.0 , "V_reset" :
0.0 , "V_m" : 0.0 , "V_th" : 20.0 } # Ustaw parametry gniazd neuronów i urządzeń . Gniazdo SetDefaults ( "iaf_psc_delta" , neuron_params ) . SetDefaults ( "poisson_generator" , { "rate" : p_rate }) gniazdo . SetDefaults ( "spike_detector" ,
{ "withtime" : True , "withgid" : True }) # Utwórz neurony i urządzenia nodes_ex = nest . Utwórz ( "iaf_psc_delta" , 10000 ) nodes_in = gniazdo . Utwórz ( "iaf_psc_delta" , 2500 ) hałas = gniazdo . Utwórz ( "poisson_generator" )
kolce = gniazdo . Utwórz ( "spike_detector" ) # Skonfiguruj gniazdo modeli synaps . CopyModel ( "static_synapse" , "excitatory" , { "weight" : J_ex , "delay" : 1.5 }) gniazdo . CopyModel ( "static_synapse" , "inhibitory" , {
"weight" : J_in , "delay" : 1.5 }) # Połącz losową sieć i połącz ją z gniazdem urządzeń . Connect ( nodes_ex , nodes_ex + nodes_in , { "rule" : 'fixed_in degree' , "in degree" : 1000 }, "excitatory" ) gniazdo . Połącz ( nodes_in ,
nodes_ex + nodes_in , { "rule" : 'fixed_in degree' , "in degree" : 250 }, "hamujące" ) gniazdo . Connect ( hałas , nodes_ex + nodes_in , syn_spec = "excitatory" ) gniazdo . Połącz ( nodes_ex [ 1 : 51 ], espikes
) # Symulacja dla gniazda 100. ms . Symuluj ( 100. ) # Narysuj gniazdo wyników . wykres_rastrowy . from_device ( espikes , hist = True ) gniazdo . wykres_rastrowy . pokaż ()
Cechy
Modele neuronowe
- Zintegruj i wystrzel modele z różnymi typami prądów lub potencjałów synaptycznych
- Zintegruj i wystrzel modele z synapsami opartymi na przewodnictwie
- Jednokomorowe modele Hodgkina – Huxleya
- Adaptacyjna wykładnicza integracja i neuron odpalający (AdEx)
- Model neuronu MAT2
Modele sieciowe
- Losowa sieć neuronowa
- Sieci topologiczne
- Modele sieci sterowane danymi
Modele synaps
- Synapsy statyczne o jednorodnej lub niejednorodnej masie i opóźnieniu.
- Plastyczność zależna od czasu skoku
- Plastyczność krótkoterminowa (synapsy Tsodyks i Markram)
- Synapsy neuromodulowane z wykorzystaniem dopaminy .
Modele urządzeń
- Detektor skoków
- Multimetr do potencjałów, prądów itp.
- Generatory prądu przemiennego, stałego i krokowego
- Generatory szumów (Poissona, Gaussa, Gamma)
- Generatory skoków do odtwarzania skoków
Dokładność
- NEST dąży do wysokiej dokładności i precyzji swoich symulacji
- Każdy model neuronu ma swój odpowiedni solwer, a wiele modeli ma testy jednostkowe.
- Jeśli to możliwe, stosowana jest integracja dokładna.
- Domyślnie skoki spadają na siatkę, zdefiniowaną przez krok czasowy symulacji. Niektóre modele obsługują wymianę skoków w czasie ciągłym.
Symulacja równoległa i rozproszona
- Obsługa symulacji wielowątkowych przy użyciu wątków OpenMP lub POSIX .
- Obsługa hybrydowej, wielowątkowej i rozproszonej symulacji.
- Równoległość jest obsługiwana półautomatycznie przez jądro symulacji NEST.
- Skalowanie od ponadliniowego do liniowego dla maksymalnie 10 000 rdzeni .
Interoperacyjność
- Interfejs do Multi Simulator Coordinator, opracowany przez INCF .
- Interfejs do niezależnego od symulatora języka symulacji PyNN.
Historia
Rozwój NEST został zapoczątkowany w 1993 roku przez Markusa Diesmanna i Marca-Olivera Gewaltiga na Uniwersytecie Ruhry w Bochum w Bochum w Niemczech oraz w Instytucie Nauki Weizmanna w Rehovot w Izraelu . W tym czasie symulator nazywał się SYNOD, a symulacje były definiowane w języku symulacji opartym na stosie, zwanym SLI.
W 2001 roku oprogramowanie zmieniło nazwę z SYNOD na NEST. Do 2004 roku NEST był rozwijany i używany wyłącznie przez członków-założycieli Inicjatywy NEST. Pierwsze publiczne wydanie ukazało się latem 2004 roku. Od tego czasu NEST był wydawany regularnie, mniej więcej raz lub dwa razy w roku.
Od 2007 roku NEST obsługuje równoległość hybrydową przy użyciu wątków POSIX i MPI .
W 2008 roku język symulacji SLI oparty na stosie został zastąpiony nowoczesnym interfejsem Pythona , jednak stary język symulacji jest nadal używany wewnętrznie. W tym samym czasie opracowano niezależny od symulatora język specyfikacji PyNN z obsługą NEST. W 2012 roku NEST Initiative zmieniła licencję z zastrzeżonej licencji NEST na GNU GPL V2 lub nowszą.
Interfejsy użytkownika
- Podstawowym interfejsem użytkownika NEST jest PyNEST, pakiet Pythona , który kontroluje jądro symulacji NEST. PyNEST ma na celu łatwą użyteczność i bezproblemową interakcję z Pythonem i jego bibliotekami.
- PyNN to niezależny od symulatora język do symulacji neuronowych, który obsługuje NEST oraz BRIAN , NEURON , a także sprzęt neuromorficzny.
- NEST utrzymuje również własny interpreter języka symulacji (SLI), który rozumie prosty język programowania zorientowany na stos , na który ma wpływ PostScript . [ potrzebne źródło ]
Zobacz też
- Brian (oprogramowanie)
- Neuron (oprogramowanie)
- GENESIS (oprogramowanie)
- Neuronauka obliczeniowa
- MLDesigner
- OMNet++
- QualNet