はじめに
概要
本日は、生物学的神経ネットワークの動的特性について学びます。最初に、ニコラス・ブルネルが生物学的神経ネットワークの構成要素と、そうしたネットワークで生じるさまざまな活動タイプを紹介します。彼はスパイキングニューロンのネットワークから始め、発火率ベースのモデルへと視点を広げます。チュートリアルでは発火率ベースのネットワークモデルに焦点を当てます。最初のチュートリアルでは、ジュリアナ・ゲオルギエヴァが発火率ベースのネットワークの概念を展開し、ニューロン集団の固定点と安定性の考え方を紹介します。第2のチュートリアルでは、この考えを2集団ネットワークモデル(ウィルソン・コーワンモデル)に拡張します。このチュートリアルでは、相平面解析を用いて、興奮性および抑制性相互作用によって生じる動態(例えば振動やアトラクターなど)について考察する方法を学びます。最後に、アウトロ講義でケン・ミラーが発火率ベースのモデルを使い、生物学的神経ネットワークの非常に興味深い3つのモード、すなわち抑制安定化ネットワーク、バランス増幅、安定化超線形ネットワークを紹介します。これらのモードが視覚野における周辺抑制などの生物学的現象の基盤となるメカニズムをどのように提供するかを示します。
本日使用するネットワークは、線形システム(W2D2)と生物学的ニューロン(W2D3)で学んだ内容に基づいて構築されています。神経ネットワークの安定性と動的状態の理解は、因果関係の問題(W3D5)をより深く理解するのにも役立ちます。さらに、ネットワーク活動の動態に関する理論的理解は、データ解析やモデルフィッティングのためのより良い統計的制御の開発に役立ちます。これはコース全体やプロジェクトで繰り返し遭遇する内容です。
脳の情報処理はネットワーク活動の変化として現れます。非振動状態から振動状態への大規模なネットワーク活動の変化は脳内で実際に起こり、計算に大きな影響を与えます。ネットワーク活動の動的状態の変化をもたらすメカニズムは何でしょうか?ネットワーク活動状態の安定性を決定するものは何でしょうか?バランスの取れた神経ネットワークは、平均値を拒否しつつ小さな変化をどのように増幅できるのでしょうか?複数の入力がどのように相互作用して応答を形成するのでしょうか?こうした疑問は神経科学で日常的に生じます。本日のチュートリアルの内容は、これらの疑問に取り組み、ネットワーク活動の変化のメカニズムや原因を特定するための良い出発点となるはずです。
# @title Install and import feedback gadget
from vibecheck import DatatopsContentReviewContainer
def content_review(notebook_section: str):
return DatatopsContentReviewContainer(
"", # No text prompt
notebook_section,
{
"url": "https://pmyvdlilci.execute-api.us-east-1.amazonaws.com/klab",
"name": "neuromatch_cn",
"user_key": "y1x3mpx5",
},
).render()
feedback_prefix = "W2D4_Intro"
ビデオ
# @markdown
from ipywidgets import widgets
from IPython.display import YouTubeVideo
from IPython.display import IFrame
from IPython.display import display
class PlayVideo(IFrame):
def __init__(self, id, source, page=1, width=400, height=300, **kwargs):
self.id = id
if source == 'Bilibili':
src = f'https://player.bilibili.com/player.html?bvid={id}&page={page}'
elif source == 'Osf':
src = f'https://mfr.ca-1.osf.io/render?url=https://osf.io/download/{id}/?direct%26mode=render'
super(PlayVideo, self).__init__(src, width, height, **kwargs)
def display_videos(video_ids, W=400, H=300, fs=1):
tab_contents = []
for i, video_id in enumerate(video_ids):
out = widgets.Output()
with out:
if video_ids[i][0] == 'Youtube':
video = YouTubeVideo(id=video_ids[i][1], width=W,
height=H, fs=fs, rel=0)
print(f'Video available at https://youtube.com/watch?v={video.id}')
else:
video = PlayVideo(id=video_ids[i][1], source=video_ids[i][0], width=W,
height=H, fs=fs, autoplay=False)
if video_ids[i][0] == 'Bilibili':
print(f'Video available at https://www.bilibili.com/video/{video.id}')
elif video_ids[i][0] == 'Osf':
print(f'Video available at https://osf.io/{video.id}')
display(video)
tab_contents.append(out)
return tab_contents
video_ids = [('Youtube', 'pheMShOHoIk'), ('Bilibili', 'BV1Uz4y1D7Zs')]
tab_contents = display_videos(video_ids, W=854, H=480)
tabs = widgets.Tab()
tabs.children = tab_contents
for i in range(len(tab_contents)):
tabs.set_title(i, video_ids[i][0])
display(tabs)
スライド
# @markdown
from IPython.display import IFrame
link_id = "mdve5"
print(f"If you want to download the slides: https://osf.io/download/{link_id}/")
IFrame(src=f"https://mfr.ca-1.osf.io/render?url=https://osf.io/{link_id}/?direct%26mode=render%26action=download%26mode=render", width=854, height=480)
# @title Submit your feedback
content_review(f"{feedback_prefix}_Video")