技術メモ

役に立てる技術的な何か、時々自分用の覚書。幅広く興味があります。

pythonでスパイキングニューロンのシミュレーション (Brianについて)

スパイキングニューロンのシミュレータの一つBrianを紹介したい。
http://briansimulator.org/

Brian以外にもニューロンのシミュレータにはいくつか存在する。
特にPythonでコーディングできるものに限定すれば、
有名なものにNEURON。他にも、NEST(pyNEST),PyNN,Nengo,PCSIMなどがある。

  1. NEURON:一番ポピュラー、C++が原型
  2. PyNEST:こちらもC++が原型
  3. PyNN:よくわからないけどニューロンサイズが大きめなものにたまに使われるっぽい
  4. Nengo:PyNNがコアになっている。開発者のEliasmith氏の手がけるSpaunは一見の価値あり。
  5. PCSIM:こちらもC++がコアになっている。PyNNと開発元は同じらしい。

一番有名で情報が豊富でGUIの操作もできるNEURONがとにかく触ってみたいという人にはおすすめ。
だが、これらのシミュレータは決められたモデルの中から使う分自由度は下がってしまう。
それに対し、Brianはパラメータはもちろん、方程式まで自分で定義できることから一番自由度が高いと言える。(一階微分方程式なら任意のモデルを記述できるかも)
でもその分、複雑で記法が独特になっているのが残念なところ。

チュートリアル

pipで簡単にインストールできる。

pip install brian2

手始めに公式サイトのサンプルプログラムを動かしてみる。
LIFニューロンの集団発火をシミュレートしたやつ。

from brian2 import *
eqs = '''
dv/dt  = (ge+gi-(v+49*mV))/(20*ms) : volt
dge/dt = -ge/(5*ms)                : volt
dgi/dt = -gi/(10*ms)               : volt
'''
P = NeuronGroup(4000, eqs, threshold='v>-50*mV', reset='v=-60*mV')
P.v = -60*mV
Pe = P[:3200]
Pi = P[3200:]
Ce = Synapses(Pe, P, on_pre='ge+=1.62*mV')
Ce.connect(p=0.02)
Ci = Synapses(Pi, P, on_pre='gi-=9*mV')
Ci.connect(p=0.02)
M = SpikeMonitor(P)
run(1*second)
plot(M.t/ms, M.i, '.')
show()

f:id:swdrsker:20161207051806p:plain:w600

発火しすぎじゃね?パラメータの問題だろうけど



続編:izhikevichモデルを書いてみる。