NEST (oprogramowanie)

NEST (narzędzie do symulacji neuronowej)
Oryginalni autorzy Markus Diesmann, Marc-Oliver Gewaltig, Abigail Morrison, Hans Ekkehard Plesser
Deweloperzy Inicjatywa NEST
Pierwsze wydanie 1 sierpnia 2004 ( 01.08.2004 )
Wersja stabilna
2.20.0 / 31 stycznia 2020 ; 3 lata temu ( 2020-01-31 )
Napisane w C++ , Python , Cython
System operacyjny wieloplatformowy
Dostępne w język angielski
Typ Neuronauka obliczeniowa
Licencja GPLv 2+
Strona internetowa www .nest-initiative .org

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

Raster NEST

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

Modele sieciowe

Modele synaps

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

Zobacz też

Linki zewnętrzne