指数関数型シナプスモデル#

シナプスのモデルは複数あるが, 良く用いられるのが指数関数型シナプスモデル(exponential synapse model)である.このモデルは生理学的な過程を無視した現象論的モデルであることに注意しよう.指数関数型シナプスモデルには2つの種類, 単一指数関数型モデル (single exponential model)と二重指数関数型モデル (double exponential model)がある.

数式の説明の前にモデルの挙動を示す.次図は2種類のモデルにおいてt=0でスパイクが生じてからのシナプス後電流の変化を示している.ただし, 実際のシナプス後電流はこれにシナプス強度 (Synaptic strength)1を乗じて総和を取ったものとなる.

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()
../_images/expo-synapse_3_0.png

2種類の指数関数型シナプスの動態.破線は単一指数関数型シナプスで, 実線は二重指数関数型シナプスである.

単一指数関数型モデル(Single exponential model)#

シナプス前ニューロンにおいてスパイクが生じてからのシナプス後電流の変化はおおよそ指数関数的に減少する, というのが単一指数関数型モデルである 2. 式は次のようになる.

f(t)=1τsexp(tτs)

この関数を時間的なフィルターとして, 過去の全てのスパイクについての総和を取る.

r(t)=tk<tf(ttk)

ここでr(t)は前節におけるシナプス動態(ssyn)で, tkはあるニューロンのk番目のスパイクの発生時刻である.tk<tの意味は現在の時刻tまでに発生したスパイクについての和を取るという意味である.なお,スパイクが生じてから, ある程度の時間が経過した後はそのスパイクの影響はないと見なせるので, 一定の時間までの総和を取るのがよい.

別の表記法としてスパイク列に対する畳み込みを行うというものもある.畳み込み演算子をとし, シナプス前細胞のスパイク列をS(t)=tk<tδ(ttk)とする (ただし, δはDiracのdelta関数においてδ(0)=1とした関数).このとき, r(t)=fS(t)と表すことができる.畳み込み演算子を用いると簡略な表記ができるが,実装上は他と同じ手法を用いる.

微分方程式による表現#

上の手法ではニューロンの発火時刻を記憶し, 時間毎に全てのスパイクについての和を取る必要がある.そこで, 実装する場合は次の等価な微分方程式を用いる.

drdt=rτs+1τstk<tδ(ttk)

ここでτsはシナプスの時定数(synaptic time constant)である. また, δ()はDiracのdelta関数です(ただしδ(0)=1です). これをEuler法で差分化すると

r(t+Δt)=(1Δtτs)r(t)+1τsδt,tk

となる.ここでδt,tkはKroneckerのdelta関数で, t=tkのときに1, それ以外は0となる.また減衰度として(1Δt/τd)の代わりにexp(Δt/τd)を用いる場合もある.

二重指数関数型モデル(Double exponential model)#

2重の指数関数によりシナプス後電流の立ち上がりも考慮するのが, 二重指数関数型モデル(Double exponential model)である3t=0にシナプス前細胞が発火したときのシナプス後電流の時間変化の関数は次のようになる.

f(t)=A[exp(tτd)exp(tτr)]

ただし, τrは立ち上がり時定数(synaptic rise time constant), τdは減衰時定数(synaptic decay time constant)である.τdτsと同じく神経伝達物質の減少速度を決定している.Aは規格化定数で次のように表される.

A=τdτdτr(τrτd)τrτrτd

規格化定数Aを乗じることで最大値が1となる.ただし, シミュレーションをする上で実際に規格化をする場合は少ない.

α関数#

上記の式において, τ=τr=τdの場合は α 関数 (alpha function, alpha synapse)と呼ぶ (Rall, 1967).式としては次のようになる.

α(t)=tτexp(1tτ)

この式は二重指数関数型シナプスの式に単に代入するだけでは導出できない.これらの式の対応については後述する.

微分方程式による表現#

ここで, 二重指数関数型シナプスの式に対応する, 補助変数hを用いた微分方程式を導入する.

drdt=rτd+hdhdt=hτr+1τrτdtk<tδ(ttk)

単一指数関数型シナプスの場合と同様にEuler法で差分化すると

r(t+Δt)=(1Δtτd)r(t)+h(t)Δth(t+Δt)=(1Δtτr)h(t)+1τrτdδt,tjk

となる.

念のため, 微分方程式と元の式が一致することを確認しておこう.t=0のときにシナプス前細胞が発火したとし, それ以降の発火はないとする.このとき, h(0)=1/τrτd,r(0)=0 である.hについての微分方程式の解は

h(t)=h(0)exp(tτr)

となるので, これをrについての式に代入して

drdt=rτd+h(0)exp(tτr)

となる.これを解くには両辺に積分因子exp(t/τd)をかけてから積分をするかLaplace変換をするかである.今回はLaplace変換を用いる.右辺一項目を移行した後に両辺をLaplace変換すると以下のようになる.

L[drdt+r/τd]=L[h(0)exp(t/τr)]sF(s)r(0)+1τdF(s)=h(0)s+1/τrF(s)=h(0)(s+1/τr)(s+1/τd)

ただしr(t)のLaplace変換をF(s)とした. ここで逆Laplace変換を行うと次のようになる.

r(t)=L1(F(s))=L1[h(0)(s+1/τr)(s+1/τd)]=L1[h(0)1/τr1/τd(1s+1/τd1s+1/τr)]=1τdτr[exp(t/τd)exp(t/τr)]

この式の最大値rmaxを求めておこう. r(t)を微分して0と置いた式の解tmaxを代入すれば求められる.計算すると,

tmax=ln(τd/τr)1/τr1/τd,  rmax=1τd(τrτd)τrτdτr

となる.

なお, α関数の導出は逆Laplace変換をする前にτ=τd=τrとすればよく,

Fα(s)=h(0)(s+1/τ)2α(t)=tτ2exp(tτ)

となる.若干の係数の違いはあるが, 同じ形の関数が導出された.


1

シナプス強度というのは便宜上の呼称で, 実際には神経伝達物質の種類や, その受容体の数など複数の要因によって決定されている. また, このシナプス強度はシナプス重みということもある.これはどちらかと言えば機械学習の表現に引っ張られたものである.このため, このサイトでは重みという語も使う.

2

薬学動態の静注1コンパートメントモデルと同じ式である.

3

薬学動態の内服1コンパートメントモデルと同じ式である.