Open In Colab   Open in Kaggle

はじめに

概要

本日は、推論と意思決定を行うためのベイズ的アプローチについて学びます。ベイズの定理は計算論的神経科学における多くの手法やモデルの基盤となっており、ベイズ統計学の基礎でもあります。ベイズ的アプローチは、私たちの知識(事前分布)を定義し、世界からの観測を用いてどのように知識を更新し信念を形成するかを自然に示します。重要なことに、ベイズ的アプローチは常に不確実性を明示的に表現します。ここでは、他のNMAの日でも使われる2つの例を紹介します。1つは推論したい世界の状態が二値である釣りの例、もう1つは連続的な空間上の位置を推論するAstrocatの例です。これらの例を通じて、数学的な概念とその応用方法を学び、いくつかの簡単な問題を手計算で解いていきます。ベイズ推論と意思決定の仕組みを直感的に理解できるインタラクティブなデモも用意しています。チュートリアルの最後には、ベイズの定理の適用方法、効用の概念、ガウス分布の性質について自信を持って理解できるようになるでしょう。

この日は、Hidden Dynamicsの日に出会う推論問題の基礎を提供するとともに、Optimal ControlやReinforcement Learningに重要な考え方の基盤ともなります(ただし、ベイズ的強化学習自体はNMAで扱う内容よりも高度です)。

ベイズ推論と意思決定は、神経科学において行動や神経計算を記述するために広く用いられています。これは規範的アプローチであり、むしろ最適な推論と選択を常に定義できる枠組みとして規範的アプローチと考えられます。ベイズの定理自体はさらに広く使われており、NMAで学んだ最大尤度法(モデルフィッティング)や正則化といったトピックともつながっています。

前提知識

本日の内容とチュートリアルでは、確率と統計(W0D5)の知識を使用します。特に、ガウス分布、尤度、ベイズの定理を使います。必要に応じてこれらの内容を復習してください。

# @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 = "W3D1_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', 'w2GH1-Iqods'), ('Bilibili', 'BV1Zy4y1L7UV')]
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 = "xam4w"
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")