情報

フィッツヒュー-南雲モデルの理論とPythonによる実装

本記事では、連続時間ニューロンの一種であるフィッツヒュー-南雲モデルについて実装コードも含めて紹介していきます。

フィッツヒュー-南雲モデル

フィッツヒュー-南雲モデル(FitzHugh-Nagumo model)とは、神経細胞の活動電位変化を2つの微分方程式で表現した膜電位モデルで、4つの微分方程式で膜電位をモデル化したHodgkin Huxleyモデルの下位互換となっています。

2つの変数\(u, v\)に関する微分方程式で表されます。

$$\begin{eqnarray}
\frac{du}{dt} &=& c\left(u - \frac{u^3}{3} - v + I_{inj}(t) \right)\\
\frac{dv}{dt} &=& u - bv + a
\end{eqnarray}$$

ここで、パラメータ\(a, b, c\)は0.7, 0.8, 10が一般的に使用されます。

PythonによるFHNモデルの実装

class FitzHughNagumo:
    """Full Hodgkin-Huxley Model implemented in Python"""

    def __init__(self, dt=0.01, a=0.7, b=0.8, c=10):
        self.dt = dt        # default 0.01
        self.a = a          # default 0.7     
        self.b = b          # default 0.8    
        self.c = c          # default 10

        self.u = 2
        self.v = 1
    
    def step(self, I_inj=0):
        self.u += self.c * (self.u - self.u**3/3 - self.v + I_inj) * self.dt   # u <- u + du
        self.v += (self.u - self.b * self.v + self.a) * self.dt   # v <- v + dv
        return self.u

さまざまな入力電流に対する膜電位変化

以下のコードで入力電流の配列を作成し、フィッツヒュー-南雲モデルに入力し、結果を配列resに格納した。これをPlotlyで可視化したものを以下に示します。

FHN = FitzHughNagumo()

# 入力ま電流が0.33の場合
def generate_I_inj(t):
    return 0.33 * np.ones(len(t))

t = np.arange(0, 10000)
I_inj = generate_I_inj(t)

res = []
for i in I_inj:
    res.append(FHN.step(i))

\(I_{inj}=0\)のとき

\(u, v\)の初期値の関係で、最初にスパイクが発生していますが、それ以外では、静止膜電位に落ち着いています。

\(I_{inj}=0.33\)のとき

上と同様に\(u, v\)の初期値の影響で、最初に大きなスパイクが発生しているが、その後に、減衰振動が見られます。

\(I_{inj}=0.34\)のとき

入力電流が0.33と0.34では振る舞いに大きな違いがあります。0.34では、常に振動しています。

\(I_{inj}=1\)のとき

0.34を境にして連続スパイクが発生する振る舞いに移り、その後は、入力電流の大きさに応じて、スパイク頻度が変化します。そのため、\(I_{inj}\)が1のときは、0.34のときと比べ、頻度が高くなっています。

  • この記事を書いた人
管理人

管理人

このサイトの管理人です。 人工知能や脳科学、ロボットなど幅広い領域に興味をもっています。 将来の目標は、人間のような高度な身体と知能をもったパーソナルロボットを開発することです。 最近は、ロボット開発と強化学習の勉強に力を入れています(NOW)。

-情報

PAGE TOP