指数関数型シナプスモデル
Contents
指数関数型シナプスモデル#
シナプスのモデルは複数あるが, 良く用いられるのが指数関数型シナプスモデル(exponential synapse model)である.このモデルは生理学的な過程を無視した現象論的モデルであることに注意しよう.指数関数型シナプスモデルには2つの種類, 単一指数関数型モデル (single exponential model)と二重指数関数型モデル (double exponential model)がある.
数式の説明の前にモデルの挙動を示す.次図は2種類のモデルにおいて
using PyPlot
rc("axes.spines", top=false, right=false)
td, tr = 2e-2, 2e-3 # synaptic decay time, synaptic rise time (sec)
dt, T = 5e-5, 0.1 # タイムステップ, シミュレーション時間 (sec)
nt = Int(T/dt) # シミュレーションの総ステップ
# 単一指数関数型シナプス
r_single = zeros(nt)
for t in 1:nt-1
spike = ifelse(t == 1, 1, 0)
r_single[t+1] = r_single[t]*(1-dt/td) + spike/td
#r_single[t+1] = r_single[t]*exp(-dt/td) + spike/td
end
# 二重指数関数型シナプス
r_double, hr = zeros(nt), zeros(nt)
for t in 1:nt-1
spike = ifelse(t == 1, 1, 0)
r_double[t+1] = r_double[t]*(1-dt/tr) + hr[t]*dt
hr[t+1] = hr[t]*(1-dt/td) + spike/(tr*td)
#r_double[t+1] = r_double[t]*exp(-dt/tr) + hr[t]*dt
#hr[t+1] = hr[t]*exp(-dt/td) + spike/(tr*td)
end
time = (1:nt)*dt
figure(figsize=(4, 3))
plot(time, r_single, linestyle="dashed", label="single exponential")
plot(time, r_double, label="double exponential")
xlabel("Time (s)"); ylabel("Post-synaptic current (pA)")
legend(); tight_layout()

2種類の指数関数型シナプスの動態.破線は単一指数関数型シナプスで, 実線は二重指数関数型シナプスである.
単一指数関数型モデル(Single exponential model)#
シナプス前ニューロンにおいてスパイクが生じてからのシナプス後電流の変化はおおよそ指数関数的に減少する, というのが単一指数関数型モデルである 2. 式は次のようになる.
この関数を時間的なフィルターとして, 過去の全てのスパイクについての総和を取る.
ここで
別の表記法としてスパイク列に対する畳み込みを行うというものもある.畳み込み演算子を
微分方程式による表現#
上の手法ではニューロンの発火時刻を記憶し, 時間毎に全てのスパイクについての和を取る必要がある.そこで, 実装する場合は次の等価な微分方程式を用いる.
ここで
となる.ここで
二重指数関数型モデル(Double exponential model)#
2重の指数関数によりシナプス後電流の立ち上がりも考慮するのが, 二重指数関数型モデル(Double exponential model)である3.
ただし,
規格化定数
関数#
上記の式において,
この式は二重指数関数型シナプスの式に単に代入するだけでは導出できない.これらの式の対応については後述する.
微分方程式による表現#
ここで, 二重指数関数型シナプスの式に対応する, 補助変数
単一指数関数型シナプスの場合と同様にEuler法で差分化すると
となる.
念のため, 微分方程式と元の式が一致することを確認しておこう.
となるので, これを
となる.これを解くには両辺に積分因子
ただし
この式の最大値
となる.
なお,
となる.若干の係数の違いはあるが, 同じ形の関数が導出された.