Open In Colab   Open in Kaggle

はじめに

概要

本日は、生物学的なニューロンとシナプスのいくつかの興味深い特性について学びます。イントロダクションの講義では、Upi Bhallaが脳内のニューロンとシナプスの複雑さの概要を説明します。また、ニューロン同士がコミュニケーションを取るための活動電位の生成と伝播を数学的に記述する方法も紹介します。その後、一連の短いチュートリアルでRichard Naudがシンプルなニューロンとシナプスのモデルを紹介します。これらのチュートリアルを通じて、ニューロンがどのように不規則なスパイクパターンを生成し、活動を同期させるかについての洞察を得ることができます。最初のチュートリアルでは、リーキーインテグレートアンドファイア(LIF)ニューロンモデルの入力-出力伝達関数について学びます。2番目のチュートリアルでは、このモデルを使って入力の統計が同期の伝達にどのように影響するかを理解します。3番目のチュートリアルでは、シナプスの短期動態、つまりシナプス重みがプレシナプスニューロンの最近のスパイク活動の履歴に依存することを探ります。ボーナスチュートリアルでは、スパイクタイミング依存性可塑性について学び、入力の同期がシナプス重みの分布にどのように影響を与えるかを探求できます。最後に、アウトロ講義でYiota Poiraziがニューロンの簡略化された記述をより生物学的複雑性を含む形に拡張する方法を説明します。彼女は樹状突起の形態が個々のニューロンの計算能力をどのように拡大するかの証拠を示します。

本日の講義で使用するモデルは「ハウモデル(W1D1)」のカテゴリーに属します。線形システム(W2D2)のいくつかの概念を利用します。これらのチュートリアルで得られる洞察は、神経ネットワークのダイナミクス(W3D4)を理解するのに役立ちます。さらに、ニューロン活動の統計の起源について学ぶことで、複数のチュートリアルに役立ちます。例えば、同期の理解は因果関係の問題(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 = "W2D3_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', 'MAOOPv3whZ0'), ('Bilibili', 'BV18A411v7Yy')]
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 = "gyfr2"
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")