チュートリアル2: "How"モデル — ニューロマッチアカデミー:計算神経科学
https://compneuro.neuromatch.io/tutorials/W1D1_ModelTypes/student/W1D1_Tutorial2.html
第1週、第1日:モデルの種類
ニューロマッチアカデミーによる提供
コンテンツ作成者: マット・ラポルト、バイロン・ガルブレイス、コンラッド・コーディング
コンテンツレビューアー: ダリン・グオ、アイシュワリヤ・バルワニ、マディネ・サルヴェスタニ、メアリアム・ヴァジリー・パシュカム、マイケル・ワスコム、エラ・バティ
制作編集者: ガガナ・ビー、スピロス・チャブリス
チュートリアルの目標
このチュートリアルは、神経データを理解するために使用される異なるタイプのモデルの3部作の2つ目です。このチュートリアルでは、我々が観察したスパイキングデータをどのように説明できるかを検討します。
チュートリアル1で保存した神経データがどのようにして生じるかを理解するために、シンプルな神経モデルを構築し、そのスパイク応答を実際のデータと比較します。以下のことを行います:
- シンプルな「リーク積分-発火」ニューロンモデルをシミュレートするためのコードを記述する
- より複雑で現実的な生理学的な詳細を追加することで、モデルを複雑化する
スライドをダウンロードしたい場合:https://osf.io/download/6dxwe/
セットアップ
フィードバックガジェットのインストールとインポート
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
図の設定
プロット関数
"How"モデル
ビデオ1: "How"モデル
- Youtube
ビデオはhttps://youtube.com/watch?v=PpnagITsb3Eで視聴できます
フィードバックの提出
セクション1: 線形リーク積分発火ニューロン
線形リーク積分発火ニューロンを記述するために数学を使用します。もし変数名の意味を素早く確認したい場合は、要約の後にある記法セクションを参照してください!
ニューロンはどのようにしてスパイクを発生させるのでしょうか?
ニューロンは、細胞膜を横切る電場を蓄積して放電します。この電場の状態は、膜電位によって記述できます。膜電位はニューロンの興奮に応じて上昇し、しきい値に達するとスパイクが発生します。その後、膜電位はリセットされ、次のスパイクが発生する前に再びしきい値に達する必要があります。
スパイキングニューロンの行動の最もシンプルなモデルの1つは、線形リーク積分発火モデルです。このモデルでは、ニューロンは入力電流Iに対して一定の係数αで時間とともに膜電位Vmを増加させます。
(125)
dVm=αI
Vmがしきい値値に達すると、スパイクが発生し、Vmが初期値にリセットされ、このプロセスが続きます。
ここでは、初期値としきい値の膜電位をそれぞれ0と1とします。例えば、αI=0.1が一定の値であれば、つまり入力電流が一定であれば、dVm=0.1となり、各タイムステップで膜電位Vmは0.1ずつ増加し、(1−0)/0.1=10のタイムステップ後にしきい値に達し、Vmが0にリセットされます。
膜電位Vmをスカラーと定義していますが、生物学的なニューロンの膜電位は特定の時点で細胞膜上のすべての点で完全に一定とは限りません。より複雑なモデル(例:より多くの数値を使用する)を使用してこの変動を捉えることができますが、それは必要でしょうか?
提案されたモデルは1次元の単純化です。実際のニューロンの複雑な構造とダイナミクスの異なる部分を保持するために、さまざまな詳細を追加できます。膜電位の小さな変化や局所的な変化に興味がある場合、1次元の単純化は問題になるかもしれません。しかし、現在の目的では理想化された「点」ニューロンモデルを仮定します。
スパイキング入力
単純化されたニューロンダイナミクスのモデルが与えられたとしても、入力Iの形式を考慮する必要があります。モデルニューロンに入力を提供するプレシナプスニューロンの発火行動をどのように指定すべきでしょうか?
上記のシンプルな例では、αI=0.1のように、入力電流は一般的に一定ではありません。物理的な入力は時間とともに変動する傾向があります。この変動を分布で記述することができます。
我々は、タイムステップごとの入力電流Iがそのタイムステップで到着した非負の(≥0)整数個の入力スパイクから等しい寄与を持っていると仮定します。モデルニューロンは、1つのタイムステップで3つの入力スパイクからの電流を積算し、次のタイムステップでは7つのスパイクから積算するかもしれません。このような分布からサンプリングする場合、類似した動作を観察するはずです。
入力ニューロンに関する他の情報がない場合、入力ニューロンの発火イベントは時間に対して独立しているとも仮定します。これらの仮定は実際のニューロンの文脈で合理的なものでしょうか?
これらの仮定に基づいて適切な分布は、ポアソン分布です。ポアソン分布を使用してIをモデル化します。
(126)
I∼Poisson(λ)
ここで、λは分布の平均(平均率、またはタイムステップごとに受け取るスパイクの数)です。
コーディング演習1: dVmの計算
最初の演習では、線形リーク積分発火モデルニューロンの電圧の変化dVm(1つのタイムステップごと)を計算するコードを書きます。数値積分を処理するための他のコードは提供されているので、以下のlif_neuron
関数のdv
の定義を埋めるだけでかまいません。ポアソン確率変数のλの値は、関数の引数rate
で与えられます。
[scipy.stats](https://docs.scipy.org/doc/scipy/reference/stats.html)
パッケージは、さまざまな確率分布での作業とサンプリングに便利なリソースです。 scipy.stats.poisson
クラスとそのメソッドrvs
を使用して、ポアソン分布のランダムサンプルを生成します。このチュートリアルでは、このパッケージをstats
という別名でインポートしていますので、コード内でstats.poisson
として参照してください。
def lif_neuron(n_steps=1000, alpha=0.01, rate=10):
"""線形リーク積分発火ニューロンをシミュレートします。
Args:
n_steps (int): ニューロンの活動をシミュレートするためのタイムステップ数。
alpha (float): 入力スケーリング係数
rate (int): 入力スパイクの平均率
"""
# 速度向上のためにポアソンサンプルを事前計算
exc = stats.poisson(rate).rvs(n_steps)
# 電圧とスパイクを格納する変数を初期化
v = np.zeros(n_steps)
spike_times = []
################################################################################
# 生徒: dvを計算してください。その後、次の行をコメントアウトするか削除してください
raise NotImplementedError("演習: 膜電位の変化を計算してください")
################################################################################
# ステップをループします
for i in range(1, n_steps):
# vを更新
dv = ...
v[i] = v[i-1] + dv
# スパイクが発生した場合、電圧をリセットして記録します
if v[i] > 1:
spike_times.append(i)
v[i] = 0
return v, spike_times
# ランダムシードを設定(再現性のため)
np.random.seed(12)
# モデルLIFニューロン
v, spike_times = lif_neuron()
# 可視化
plot_neuron_stats(v, spike_times)
例の出力:
セクション2: 抑制信号
ここまでの予想所要時間:20分
前のセクションの線形リーク積分発火ニューロンは、確かにスパイクを生成することができました。しかし、ISIヒストグラムは、チュートリアル1で見た経験的なISIヒストグラムとはあまり似ていませんでした。経験的なISIヒストグラムは指数的なような形状を持っていました。現実のニューロンのように振る舞わない場合、我々のモデルニューロンが欠けているものは何でしょうか?
前のモデルでは興奮的な振る舞いのみを考慮しました。膜電位が減少する唯一の方法はスパイクイベントの際です。しかし、ニューロンはある定常状態や休息状態に戻る自然な傾向があります。このような場合、前のモデルを次のように更新できます:
(127)
dVm=−βVm+αI
ここでVmは現在の膜電位で、βはある漏れ係数です。これは、人気のあるリーク積分発火モデルニューロンの基本的な形式です(LIFニューロンのより詳細な議論については、Bonus Section 2と、このコースの後半のBiological Neuron Models dayを参照してください)。
また、興奮性のプレシナプスニューロンに加えて、抑制性のプレシナプスニューロンも存在することを知っています。これらの抑制性ニューロンを別のポアソンランダム変数でモデル化できます。
(128)
I=Iexc−IinhIexc∼Poisson(λexc)Iinh∼Poisson(λinh)
ここで、λexcとλinhは、それぞれ興奮性および抑制性のプレシナプスニューロンの平均スパイク率(タイムステップごと)です。
コーディング演習2: 抑制信号を考慮したdVmの計算
第二の演習では、再びdVmの変化を計算するコードを書きますが、今回は上記で説明したLIFモデルニューロンのものです。前回と同様に、ニューロンのダイナミクスを処理するための他のコードは提供されていますので、以下のdv
の定義を埋めるだけでかまいません。
def lif_neuron_inh(n_steps=1000, alpha=0.5, beta=0.1, exc_rate=10, inh_rate=10): """ Simulate a simplified leaky integrate-and-fire neuron with both excitatory and inhibitory inputs.
Args: n_steps (int): The number of time steps to simulate the neuron's activity. alpha (float): The input scaling factor beta (float): The membrane potential leakage factor exc_rate (int): The mean rate of the incoming excitatory spikes inh_rate (int): The mean rate of the incoming inhibitory spikes """
precompute Poisson samples for speed
exc = stats.poisson(exc_rate).rvs(n_steps) inh = stats.poisson(inh_rate).rvs(n_steps)
v = np.zeros(n_steps) spike_times = []
###############################################################################
Students: compute dv, then comment out or remove the next line
raise NotImplementedError("Exercise: compute the change in membrane potential") ################################################################################
for i in range(1, n_steps):
dv = ...
v[i] = v[i-1] + dv
if v[i] > 1:
spike_times.append(i)
v[i] = 0
return v, spike_times
Set random seed (for reproducibility)
np.random.seed(12)
Model LIF neuron
v, spike_times = lif_neuron_inh()
Visualize
plot_neuron_stats(v, spike_times)
インタラクティブデモ2: LIF + 抑制性ニューロン
インタラクティブデモ1と同様に、LIFニューロンへの入力のパラメータを調整し、どうなるかを視覚化できます。ここでは、入力をスケーリングするalpha
に加えて、膜電位に漏れの影響を与えるbeta
、興奮性プレシナプスニューロンの平均レートexc_rate
、および抑制性プレシナプスニューロンの平均レートinh_rate
も制御できます。
- 興奮性レートを上げるとどのような効果がありますか?
- 抑制性レートを上げるとどのような効果がありますか?
- 興奮性レートと抑制性レートを両方上げるとどうなりますか?
- ISIの分布は、チュートリアル1で観察したデータの分布に似ることがありますか?
セルを実行して、スライダーを有効にしてください。
ビデオ3: LIF + 抑制
- Youtube
ビデオはhttps://youtube.com/watch?v=Aq7JrxRkn2wで視聴できます
フィードバックの提出
セクション3: モデルの考察
ここまでの予想所要時間:35分
Think! 3: モデルの考察
グループで約10分間、以下の質問について議論してください:
- 以前にモデルを見たことがありますか?
- 以前にモデルを作成したことがありますか?
- モデルの有用性は何ですか?
- モデルを作成できる場合とできない場合はありますか?あなたの専門分野にモデルはありますか?
- モデルを構築することから何を学びますか?
フィードバックの提出
要約
チュートリアルの予想所要時間:45分
このチュートリアルでは、実際の神経データで観察される振る舞いのメカニズムについての直感を得ました。まず、興奮性の入力を持つ単純なニューロンモデルを構築し、ISI分布を使用してその振る舞いを測定しましたが、実際のニューロンとは一致しませんでした。次に、漏れと抑制性の入力を追加することでモデルを改良しました。このバランスの取れたモデルの振る舞いは、実際の神経データにより近いものでした。
記法
(129)
Vm:膜電位 dVm:膜電位の変化 Cm:膜容量 I:入力電流 Rm:膜抵抗 Vrest:静止電位 α:入力電流のスケーリング係数 β:リーク係数 λ:平均スパイク率 λexc:興奮性ニューロンの平均スパイク率 λinh:抑制性ニューロンの平均スパイク率