Mathematical Neuroscience 2026
YS591
YRM71 数理脳科学(2026)  前期水曜 第5・6限、B-107、Wed. 13:00-14:30
法線ベクトル、normal vector:$ u=w_0 + w_1 x_1 + w_2 x_2 + w_3x_3 + \cdots > 0 → 興奮
射影、projection
長さ1のベクトルとの内積、inner product with a unit vector
Hebb 型学習・相関学習、Hebbian learning、correlation learning
学習信号 $ r、learning signal $ r: many learning rules share a common form
活動度関数 $ g(u) の微分が $ g'(u)=g(1-g)とか$ g'(u)=1-g^2などと書ける
https://www.cc.miyazaki-u.ac.jp/date333cs/lit2008/index.html#20260710
第15回2026-07-22水 まとめ
Research isn’t just about slightly improving the performance of existing models. There is also great fascination in considering what to keep, what to discard, and how to formulate the simplest possible equation for questions that haven’t yet been expressed mathematically.
研究とは、既にあるモデルの性能を少し上げることだけではない。まだ数式になっていない問いに対して、何を残し、何を捨て、どのような最小の式にするかを考えることにも、大きな面白さがある。
Let us relive the experience of deriving an equation from a situation where no equation exists yet
まだ式のないところから式を作る場面を、追体験してもらう課題
https://gyazo.com/7b7292384cc8fe6d328c11d6a9d2472e
https://gyazo.com/2fe4b8c5b54f561becb5c43060425570
https://gyazo.com/f8c1dc66432411794d3c37a6ad8a040e
https://gyazo.com/8b317ba914acb123cbb59bb5345c238b
https://gyazo.com/ea8292b5d5b4dfcf87c89fb7658fe1d8
https://gyazo.com/242b305eccb680c050f46894c43b01a5
第14回2026-07-15水
https://gyazo.com/931206b896366280f4527a7e863f296c
↓ 1個のニューロンの学習方程式。神経回路網で PCA
https://gyazo.com/0156d36b9398e84902ffc601c94c6ec1
第13回 2026-07-10(金) 14:50〜16:20 B-201 (講義時間、教室に注意)
https://gyazo.com/788495051d0ecb1f9280f191fb8fc492
https://www.cc.miyazaki-u.ac.jp/date333cs/lit2008/index.html#20260710
https://mns.k.u-tokyo.ac.jp/home.html
第12回
2026-07-08水
プログラミング
https://gyazo.com/42a7ca4f8b5607b365807e512c421ff1 https://colab.research.google.com
code:xxx
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from IPython.display import display, clear_output
rng = np.random.default_rng()
# Input dimension
d = 2
# Neural field size
Ny = 10
Nx = 10
N = Ny * Nx
T = 1000
alpha = 0.1
sigma = 3.0
# Number of learning steps per animation frame
steps_per_frame = 10
n_frames = T // steps_per_frame
x = np.zeros(d, dtype=float)
# Reference vectors
m = rng.uniform(-0.1, 0.1, size=(N, d))
# Grid positions
r = np.zeros((N, 2), dtype=int)
k = 0
for row in range(Ny):
for col in range(Nx):
rk, 0 = row
rk, 1 = col
k += 1
dist2 = np.zeros(N, dtype=float)
h = np.zeros(N, dtype=float)
dm = np.zeros((N, d), dtype=float)
def one_step():
# Generate one input sample
x0 = rng.uniform(-1.0, 1.0)
x1 = rng.uniform(-1.0, 1.0)
# Find the winner
for i in range(N):
dist2i = (x0 - mi, 0)**2 + (x1 - mi, 1)**2
c = np.argmin(dist2)
# Update reference vectors
for i in range(N):
# Distance on the neural field
dr0 = rc, 0 - ri, 0
dr1 = rc, 1 - ri, 1
grid_dist2 = dr0**2 + dr1**2
hi = np.exp(-grid_dist2 / (2.0 * sigma**2))
dmi, 0 = alpha * hi * (x0 - mi, 0)
dmi, 1 = alpha * hi * (x1 - mi, 1)
mi, 0 = mi, 0 + dmi, 0
mi, 1 = mi, 1 + dmi, 1
def draw_map(ax, t):
ax.clear()
# Draw points
ax.plot(m:, 0, m:, 1, "o", markersize=3)
# Draw horizontal connections
for row in range(Ny):
idx = []
for col in range(Nx):
idx.append(row * Nx + col)
idx = np.array(idx)
ax.plot(midx, 0, midx, 1, "-", color="red")
# Draw vertical connections
for col in range(Nx):
idx = []
for row in range(Ny):
idx.append(row * Nx + col)
idx = np.array(idx)
ax.plot(midx, 0, midx, 1, "-", color="red")
ax.set_xlim(-1.1, 1.1)
ax.set_ylim(-1.1, 1.1)
ax.set_aspect("equal")
ax.set_xlabel("x1")
ax.set_ylabel("x2")
ax.set_title(f"2D self-organizing map, t = {t}")
def update(frame):
# Run several learning steps
if frame > 0:
for _ in range(steps_per_frame):
one_step()
t = frame * steps_per_frame
draw_map(ax, t)
fig, ax = plt.subplots(figsize=(8, 8))
for frame in range(n_frames + 1):
# Run several learning steps
if frame > 0:
for _ in range(steps_per_frame):
one_step()
t = frame * steps_per_frame
draw_map(ax, t)
# Update the output cell
clear_output(wait=True)
display(fig)
plt.close(fig)
code:xxx
# Input distribution
input_mode = "square"
# input_mode = "gaussian"
# input_mode = "triangle"
# input_mode = "concave"
# Generate one input sample
x: = sample_input()
def sample_input():
# Uniform sample in a square
if input_mode == "square":
return rng.uniform(-1.0, 1.0, size=2)
# Truncated Gaussian sample
if input_mode == "gaussian":
while True:
z = rng.normal(0.0, 0.4, size=2)
if -1.0 <= z0 <= 1.0 and -1.0 <= z1 <= 1.0:
return z
# Uniform sample in an equilateral triangle
if input_mode == "triangle":
v0 = np.array(0.0, 1.0)
v1 = np.array(-0.866, -0.5)
v2 = np.array(0.866, -0.5)
a = rng.uniform(0.0, 1.0)
b = rng.uniform(0.0, 1.0)
if a + b > 1.0:
a = 1.0 - a
b = 1.0 - b
return v0 + a * (v1 - v0) + b * (v2 - v0)
# Uniform sample in a concave L-shaped region
if input_mode == "concave":
while True:
z = rng.uniform(-1.0, 1.0, size=2)
# Remove the upper-right square
if not (z0 > 0.0 and z1 > 0.0):
return z
raise ValueError("Unknown input_mode")
第11回
2026-07-01水
Key Words:
Cooperation and Competition、競合と協調
Winner takes all、一人勝ち
https://www.psy.ritsumei.ac.jp/akitaoka/V1-01.pdf
penfield somatosensory ← google
2次元座標
code:xxxx
ri = row_i, col_i
2次元格子上の距離
np.sum((rc - ri)**2)
np.argmin という関数が使える
code:xxx
import numpy as np
rng = np.random.default_rng()
m = rng.uniform(-1.0, 1.0, size=(5))
print(m)
print(np.argmax(m)
第10回
2026-06-24水
Self-organizing Map
https://gyazo.com/d1aa137d8a315d27aebae3cea258e0bd
https://gyazo.com/2bf654ade85f27a5709b3b97029f2f5c
https://gyazo.com/2fbb8c4ced8ad4fa87cf75558b75a72c
https://gyazo.com/d26b70dc76929008eb096bb00b3b5ea2https://gyazo.com/1347f8eaff853d822775a157473c4684
↓ 神経回路網で PCA
https://gyazo.com/0156d36b9398e84902ffc601c94c6ec1
programming memo: this is for undergraduate course
https://colab.research.google.com/drive/1nac4cRV7D-WE6McIBlgIrhlPuidPR8Au?usp=sharing
What we need:
input vec. x=(x_1, x2): if input is 2-dimensional.
ref. vec. m_i:
plot points, and lines.
code:xxx
double xDIM_X;
double mN_UNITSDIM_X;
本日の講義で使った ChatGPT Record
code:xxx
あなたは講義内容の品質管理係です.
文字起こしを読み,内容の理解のために必要な事項について,以下の項目を出力してください.
1. 未定義または多義的な用語
2. 入力・出力・目的関数が不明な説明
3. 論理の飛躍
4. 未決事項または確認質問
code:xxx
で、これ、英語っていうのは出来損ないの、僕の英語、今録音を開始します。 この出来損ないの日本語と英語を混ぜた、ま、出来損ないの方は英語ですけど、これをちゃんとやってくれるのかどうかわかりませんけど、とりあえず、自己組織化のモデルっていうのを説明したいと思います。それで資料はウェブクラス上にあります。で、プロジェクトも置いてます。これかな。で、計算し。 ですが、まあまあ資料は置いていると。 で、あれ?資料は置いてるんで、 ま、なんか見とけばいいですけど、ま、こんなんいらない。僕にはいらない。いらない。すごい言い方だけど。だからこんなん僕は見ないよ。これは、ここに映さなくてもいいか。ま、みんなはこのセルフオーガナイジングマップスっていう、 There are some explanation about self-organization. So please download, but I don't need. So what is self-organization? 日本語では自己組織化と言いまして。 まあ別名がアンスーパーバイズドラーニングと言われる。 教師なし学習、アンスーパーバイズドラーニング、教師なし学習。 こんな言葉だけ教えてもらってもしょうがないんですけど、教師なし。 入力はなんか、入力データですね。入力が与えられているもの。 日本語で、このぐらいは英語でいいですね。 Given input Xと。 Xベクトル。なんかこれはある確率分布から出てきている。 これ知らなくていい。これは未知でいい。 Unknown probability distribution。 なんかデータがたくさんなんか出てきている。 手書き数字、文字でもいいし、なんかのデータがある確率分布から出てきている。 インプットはジェネレイティブフロムルート。 some probability distribution. 目的、求めたいもの、モデルがありまして、シート、1次元に並んだ素子の配列みたいなのがあります。 なんて言ったらいいの、ニューラルフィールド、1次元の配列があります。 1次元とか2次元とか、何次元でもいいんですけど、one-dimensional、あるいはof units。 なんかここはtwo-dimensional、なんかこれ一緒。点点点点点点。最初1次元で、first I will talk about one-dimensional case。 えっと、絵で書くと、なんか入力があって、input x。input spaceって書いておかなきゃな。 xって、なんかシンボルがなんか出てくる。 信号がある確率分布に従って出てくるので、信号がなんかある空間の中、曲線状に出てくるかもしれないし、まんべんに出てくるかもしれない。 これがアウトプットです。アウトプットの、これがモデルで、モデル。1ディメンショナルアレイ。 で、これがニューロンだと思ってください。今までなんかバックプロパゲーションで重みづけのアレでまるで計算してましたけど、まあああいう素子。これが1個のユニットね。ユニットが、なんか、こうちょっと1次元の配列考えてください。2次元だったら格子状に。 今一番優しい例で、1次元。 I explain this one-dimensional array case. This is model of the net. First, I explain the one-dimensional array case. Next. Each unit has some connection with what we call reference vectors. Each unit has some reference vectors. The dimension is the same to the input dimension. The initial values are random. So this line shows the neighboring relationship between units. これ重要です。この中線で、こっちのモデルの素子同士を線で結んでいるのは、隣りという意味。 So this line represents the neighbor or adjusted relationship
1. 未定義または多義的な用語
* 自己組織化
* 「自己組織化」と「教師なし学習」がほぼ同義のように述べられているが,この講義での「自己組織化」が何を指すのか確認が必要。
* 例:入力分布の構造を保った表現を作ることか,クラスタリングか,特徴抽出か,近傍関係を保つ写像の学習か。
* self-organization
* 英語では self-organization と言っているが,具体的に Self-Organizing Map, SOM を指しているのか,一般的な自己組織化全般を指しているのか確認が必要。
* unsupervised learning / 教師なし学習
* 「教師なし」の意味として,教師信号がないことは述べられているが,何を学習するのかがまだ明確でない。
* ラベルなし入力データから,代表ベクトルを学習するのか,入力空間の分布を近似するのか,低次元表現を作るのか確認が必要。
* input space
* 入力空間が何次元空間なのか,また入力ベクトルがその空間の点として扱われることを明示するとよい。
* 例:入力 \bm{x}\in \mathbb{R}^d。
* probability distribution
* 入力データがある確率分布から生成されると述べているが,この分布を推定したいのか,分布に沿ってモデルを配置したいのかが未定義。
* model
* 「これがモデル」と述べているが,モデルが何を表すのか不明確。
* 例:1次元に並んだユニット列なのか,各ユニットが持つ参照ベクトル全体なのか,学習規則まで含めたものなのか。
* unit / neuron / 素子
* unit, neuron, 素子が同じ意味で使われているように見えるが,統一が必要。
* 各ユニットが計算する量,保持する量,出力する量を確認したい。
* reference vector
* 各ユニットが持つ reference vector の意味が重要だが,まだ定義が不足している。
* 入力空間上の代表点なのか,重みベクトルなのか,入力との距離を計算するためのベクトルなのか確認が必要。
* neighbor / adjacent relationship
* 「隣り」という関係がモデル上の隣接関係なのか,入力空間上の近さなのかを明確にする必要がある。
* この隣接関係は固定なのか,学習で変わるのかも確認が必要。
2. 入力・出力・目的関数が不明な説明
* 入力
* 入力は \bm{x} であり,未知の確率分布から生成される,という説明はある。
* ただし,\bm{x} の次元,データ数,具体例,前処理の有無が不明。
* 出力
* 「これがアウトプット」と述べている箇所があるが,何が出力なのか不明。
* 候補としては以下が考えられる。
* 勝者ユニットの番号
* 1次元配列上での位置
* 参照ベクトルの配置
* 入力空間からモデル空間への写像
* この講義ではどれを出力と呼ぶのか確認が必要。
* 目的
* 「目的,求めたいもの,モデルがありまして」と述べられているが,何を求めるのかが未整理。
* たとえば次のどれを目的とするのか確認したい。
* 入力分布を代表する参照ベクトルを得る
* 入力空間の近さを1次元配列上の近さとして保存する
* クラスタリングを行う
* 高次元入力を低次元に可視化する
* 入力データの位相的な構造を保存する
* 目的関数
* 明示的な目的関数はまだ出ていない。
* SOMでは通常,明示的な単一の目的関数から出発する説明ではなく,勝者ユニットと近傍更新則で説明されることが多い。
* この講義では目的関数を導入するのか,更新則を中心に説明するのか確認が必要。
* 学習する量
* 各ユニットの reference vector の初期値がランダムであることは述べられている。
* しかし,学習によって何が変化するのかがまだ明示されていない。
* 確認事項:学習するのは reference vector のみか,隣接関係も学習するのか。
* 評価方法
* 学習後に何を見て「自己組織化できた」と判断するのかが不明。
* 例:入力分布に沿って参照ベクトルが並ぶこと,近い入力が近いユニットに対応すること,量子化誤差が小さいこと,など。
3. 論理の飛躍
* 「自己組織化」から「教師なし学習」への移行
* 自己組織化を教師なし学習の別名として説明しているが,両者の関係がやや飛んでいる。
* 確認したい点:自己組織化は教師なし学習の一種として説明するのか,教師なし学習全般の別名として説明するのか。
* 入力分布から1次元ユニット配列への移行
* 入力が未知分布から生成される,という話から,突然1次元配列のユニットが出てくる。
* なぜ入力空間を1次元配列で表すのか,その動機づけが必要。
* 例:高次元データの構造を低次元の地図として表現するため,という説明が必要。
* ニューラルネットワークとの関係
* 「バックプロパゲーションで重みづけのあれで計算していた素子」との比較があるが,SOMのユニットと通常のニューラルネットワークのニューロンの対応が未整理。
* 確認事項:ここでのユニットは,活性値を出す計算素子なのか,代表ベクトルを持つ点なのか。
* reference vector の導入
* 各ユニットが reference vector を持つ,という説明はあるが,なぜ必要なのかがまだ説明されていない。
* 入力 \bm{x} と reference vector の距離を測り,最も近いユニットを選ぶ,という次の説明が必要。
* 隣接関係の意味
* 線が「隣り」を表すことは説明されているが,なぜ隣接関係が必要なのかがまだ説明されていない。
* SOMでは,勝者ユニットだけでなくその近傍ユニットも更新する点が核心なので,そのための準備であることを確認したい。
* 1次元から2次元への一般化
* 1次元配列と2次元格子が並べて言及されているが,どちらを主に扱うのか,また違いは何かが未整理。
* まず1次元で説明し,後で2次元に拡張する,という構成を明確にするとよい。
4. 未決事項または確認質問
* この講義で扱う「自己組織化」は,Self-Organizing Map, SOM に限定してよいか。
* 「教師なし学習」と「自己組織化」は,同義として説明するのか,それとも自己組織化を教師なし学習の一例として説明するのか。
* 入力ベクトルを \bm{x}\in\mathbb{R}^d と明示してよいか。
* 入力データはラベルなしデータであり,教師信号 y は存在しない,という説明を加えてよいか。
* 出力は「勝者ユニットの番号」なのか,「1次元または2次元マップ上の位置」なのか,「学習後の参照ベクトル配置」なのか。
* 各ユニットが持つ reference vector は,通常のニューラルネットワークでいう重みベクトルと考えてよいか。
* reference vector の次元は入力ベクトルと同じ,つまり \bm{w}_i\in\mathbb{R}^d と書いてよいか。
* 隣接関係は,入力空間上の近さではなく,モデル上のユニット間の近さを表す,と説明してよいか。
* 隣接関係は学習中に固定されるのか。
* 学習規則として,まず入力 \bm{x} に最も近い reference vector を持つ勝者ユニットを選び,その周辺ユニットの reference vector を \bm{x} に近づける,という説明に進む予定でよいか。
* 目的は,入力空間の確率分布を,1次元または2次元のユニット配列上に,近傍関係を保ちながら写し取ること,と整理してよいか。
* 目的関数を明示する授業にするのか,それとも更新則と可視化を中心に説明する授業にするのか。
* 学習後の確認として,参照ベクトルが入力分布の濃いところに集まり,かつ隣接ユニットの参照ベクトルが入力空間上でも近くなる,という見方を採用してよいか。
まず,これは「ぜんぜんダメ」ではありません。素材はかなりあります。ただ,学生にとっては最初の数分で
「入力は何か」
「モデルは何か」
「何を出力するのか」
「何が学習されるのか」
「何がうまくいけば成功なのか」
が固定される前に,英語・日本語・比喩・図・用語が同時に出たため,理解の足場が作りにくかったのだと思います。
よかった始め方は,最初に次の一文を置くことです。
「今日は,ラベルのない入力データを見て,入力空間の形を,1次元または2次元の地図の上に写し取るモデルを説明します。」
以下,そのまま読める10分程度の口語説明案です。
今日は,自己組織化マップ,英語では Self-Organizing Map,略して SOM というモデルを説明します。
最初に,今日の話のゴールを言います。
今日説明するモデルは,ラベルのない入力データを見て,そのデータの分布の形を,1次元や2次元の地図の上に写し取るモデルです。
ここでいう「ラベルがない」というのは,たとえば手書き数字の画像がたくさんあるけれども,それぞれが 0 なのか 1 なのか 2 なのか,という正解ラベルは与えられていない,という意味です。
教師あり学習では,入力 \bm{x} に対して,正解 y がありました。
たとえば,画像を入れたら,これは 7 です,これは 8 です,という正解がありました。
しかし,今日の教師なし学習では,正解 y はありません。
あるのは入力データ \bm{x} だけです。
つまり,問題設定としては,入力ベクトル
\bm{x} \in \mathbb{R}^d
がたくさん与えられている,と考えます。
ここで d は入力の次元です。
たとえば,画像であれば,画素数が次元になります。
あるいは,2次元の点なら d=2 です。
この入力データは,何らかの確率分布から出てきていると考えます。
ただし,その確率分布そのものはわかりません。
わかっているのは,その分布から出てきたサンプル,つまりデータだけです。
では,このデータだけを見て何をしたいのか。
今日の目的は,入力空間の中でデータがどのように分布しているかを,1次元または2次元のユニットの配列の上に表すことです。
ここで,入力空間とモデル空間を分けて考えます。
入力空間というのは,データ \bm{x} が存在している空間です。
たとえば \mathbb{R}^2 の点の集まりでもよいですし,画像のような高次元空間でもよいです。
一方,モデル空間というのは,こちらが用意するユニットの並びです。
最初は,1次元に並んだユニットを考えます。
たとえば,
1,2,3,\ldots,m
という番号のついた m 個のユニットが,横一列に並んでいると思ってください。
このユニットの並びは,入力空間そのものではありません。
これは,入力データを整理するための地図です。
重要なのは,各ユニットが,入力空間の中にひとつずつベクトルを持っていることです。
このベクトルを参照ベクトル,または reference vector と呼びます。
i 番目のユニットが持つ参照ベクトルを
\bm{w}_i \in \mathbb{R}^d
と書きます。
ここで大事なのは,\bm{w}_i の次元は,入力 \bm{x} の次元と同じだということです。
入力が2次元なら,参照ベクトルも2次元です。
入力が784次元なら,参照ベクトルも784次元です。
ですから,各ユニットは,モデル空間では1列に並んでいますが,それぞれ入力空間の中にも対応する点を持っています。
このモデルでは,学習によって変わるのは,主にこの参照ベクトル \bm{w}_i です。
ユニットの並びそのもの,つまり,1番の隣は2番,2番の隣は1番と3番,という関係は固定しておきます。
ここで,「隣」という言葉に注意してください。
隣というのは,入力空間で近い,という意味ではありません。
隣というのは,モデル空間,つまりユニットの配列の上で隣り合っている,という意味です。
たとえば,1次元の配列なら,5番ユニットの隣は4番と6番です。
2次元の格子なら,上下左右にあるユニットが隣です。
SOMの面白いところは,このモデル空間での隣接関係を使いながら,入力空間の構造を写し取るところです。
では,このモデルが入力 \bm{x} を1個受け取ったとき,何をするのでしょうか。
まず,入力 \bm{x} に一番近い参照ベクトルを探します。
つまり,
\|\bm{x}-\bm{w}_i\|
が一番小さいユニットを探します。
このユニットを勝者ユニット,winner unit,または best matching unit と呼びます。
たとえば,勝者ユニットを c と書くと,
c = \arg\min_i \|\bm{x}-\bm{w}_i\|
です。
これは,「入力 \bm{x} に一番似ている参照ベクトルを持つユニットを選ぶ」という意味です。
ここまでなら,ただのクラスタリングに近い話です。
つまり,入力に一番近い代表点を選んでいるだけです。
しかし,SOMではここからが重要です。
SOMでは,勝者ユニットの参照ベクトルだけを動かすのではなく,勝者ユニットの近くにあるユニットの参照ベクトルも一緒に動かします。
つまり,入力 \bm{x} が来たとき,勝者ユニット c の参照ベクトル \bm{w}_c を \bm{x} に近づけます。
さらに,モデル空間で c の近くにあるユニットの参照ベクトルも,少し \bm{x} に近づけます。
更新の形は,だいたい次のようになります。
\bm{w}_i \leftarrow \bm{w}_i
+ \eta h_{ci}(\bm{x}-\bm{w}_i)
ここで,\eta は学習率です。
どのくらい動かすかを決める係数です。
h_{ci} は近傍関数です。
これは,勝者ユニット c とユニット i が,モデル空間でどのくらい近いかを表します。
もし i=c,つまり勝者ユニットそのものなら,h_{ci} は大きいです。
勝者ユニットのすぐ隣なら,少し小さくなります。
遠く離れたユニットなら,ほとんど 0 になります。
したがって,入力 \bm{x} が来ると,勝者ユニットは強く \bm{x} に近づき,その近所のユニットも少し \bm{x} に近づき,遠くのユニットはほとんど動きません。
これを,多くの入力データに対して何度も繰り返します。
すると何が起こるか。
入力データがたくさん出てくる場所には,多くの参照ベクトルが集まります。
つまり,データの密度が高いところを,モデルが細かく表現するようになります。
さらに,勝者ユニットだけでなく,その近傍ユニットも一緒に動かすため,モデル空間で隣り合ったユニットは,入力空間でも近い場所を表すようになります。
これが Self-Organizing Map の「map」,つまり地図という意味です。
高次元の入力空間にあるデータの構造を,1次元や2次元のユニット配列の上に,できるだけ近傍関係を保ちながら写し取るわけです。
ここで,今日の用語を整理します。
まず,入力は \bm{x} です。
これはラベルなしのデータです。
次に,モデルはユニットの配列です。
最初は1次元配列で考えます。
後で2次元格子に拡張できます。
各ユニット i は,参照ベクトル \bm{w}_i を持っています。
この参照ベクトルは入力空間の点です。
入力 \bm{x} が来ると,\bm{x} に最も近い参照ベクトルを持つユニットを選びます。
これが勝者ユニットです。
そして,勝者ユニットと,その周辺のユニットの参照ベクトルを,入力 \bm{x} に近づけます。
この操作を繰り返すと,参照ベクトルの集まりが,入力データの分布に沿って配置されます。
さらに,ユニット配列上で近いユニットは,入力空間上でも近い場所を表すようになります。
この意味で,SOMは教師なし学習の一種です。
教師信号 y はありません。
しかし,入力データの分布を利用して,モデルの内部構造,つまり参照ベクトルの配置が自動的に整っていきます。
これを自己組織化と呼びます。
ここで,よくある誤解をひとつ確認しておきます。
ユニットが1次元に並んでいるからといって,入力データが1次元である必要はありません。
入力は2次元でも,100次元でも,画像のような高次元でも構いません。
1次元なのは,モデル側の地図です。
入力空間は高次元でよいです。
もうひとつ確認します。
ユニットの隣接関係は,最初にこちらが決めます。
1次元なら横一列,2次元なら格子状です。
この隣接関係そのものを学習するわけではありません。
学習するのは,各ユニットが入力空間のどの場所を代表するか,つまり参照ベクトル \bm{w}_i です。
最後に,このモデルで何を見れば,学習がうまくいったと言えるかを言います。
第一に,参照ベクトルが入力データの多いところに配置されていることです。
第二に,ユニット配列上で近いユニットが,入力空間上でも近い場所を表していることです。
第三に,入力 \bm{x} を与えたとき,その入力に近いユニットを選ぶことで,入力を地図上の位置として表せることです。
つまり,SOMの出力は,見方によって少し変わります。
入力1個に対する出力としては,勝者ユニットの番号,あるいは地図上の位置です。
学習全体の出力としては,学習された参照ベクトルの配置です。
そして,モデル全体としては,入力空間の構造を写し取った地図が得られます。
以上が,自己組織化マップの基本的な問題設定です。
まとめると,SOMは,ラベルなし入力データ
\bm{x}\in\mathbb{R}^d
を受け取り,1次元または2次元のユニット配列上に,入力データの分布構造を写し取るモデルです。
各ユニットは,入力と同じ次元の参照ベクトル
\bm{w}_i\in\mathbb{R}^d
を持ちます。
入力が来るたびに,最も近い参照ベクトルを持つ勝者ユニットを選び,そのユニットと近傍ユニットの参照ベクトルを入力に近づけます。
この繰り返しによって,入力空間の近さが,モデル空間の近さとして表現されるようになります。
これが,今日説明する自己組織化のモデルです。
ここで今もう聞き取り中ね。よし、今から反論します。反論、反論。 今日の最初の、このラベルのない入力データ、データ分布、データの分布の形や、ここわからないでしょ?データの分布の形を1次元や2次元の地図の上に写しておる。1次元や2次元の地図の上に。 ああ、わかったようなわかってない。あ、説明がある。ラベルがないというのは例えば定義はスジマル、それがゼロなのか。教師信号がない。機械学習は入力に対して出力が。これは教師、正解入出力データのことを言ってるな。 つまり、入力だけが与えられていると考えます。ここはいい。例えば、画像が、これもなんかすごい、すんごい情緒的な確率がわかんない、サンプルデータだけ。このデータだけ見て何したいのかと。 入力で空間の中でデータがどのように分布しているかを1次元また2次元のユニットの配列の上に表すこと。これはさっきよりは、僕にとってはいいと思うけど、地図よりはわかりやすい。 入力空間とモデル空間。ああ、なるほど。入力空間とモデル空間。2つの空間があるよっていうのを分けて考えないといけないと。で、こっちは今2次元でもいいし、すごい786次元でもいいんだけど、後でやるのは1次元、1次元とか2次元、1次元とか。 んで、ここは一緒だね。ああ、そうか、セルフオーガニゼーションマップって言ってるわけだから、マップってなんだっていうことか。君にそういうの説明して、すぐ止めて聞かないといけなかった。マップって地図って、地図って何? 入力データを整理するために地図です。このユニットの並びが地図だって。このユニット、これが地図。これ地図。これ地図。全然頭働いてなさそうなのが大丈夫。地図だって。と僕は説明しないけど、重要なのは各ユニットが、これはそうだね。各ユニットが一つずつベクトルを持ってて、これを参照ベクトルとかリファレンスベクトルと言う。そう書いて、書くと。で、ですから、対応する点を持っていると。BMIですね。ユニットの並びそのものの1番の隣、2番、2番の隣の3番。そういうのは固定と。隣という言葉に注意と。 隣っていうのはモデル空間、こっちの中で隣っていう。SOMとかSOMって私は言いますけど、面白いところは、このモデル空間での隣接関係を使いながら、あ、これはこのフレーズが重要ですね。モデル空間での隣接関係を使いながら、入力空間の構造を映しとる。ここのフレーズが一番重要かもしれない。 で、どの入力は何でしょうか?一番距離が一番小さいユニットを探して照射ユニットと呼ぶということですね。ここは説明したね。ここまでの話ならただのクラスタリングに近い話。クラスタリングっていう話は覚えてないから、クラスタリングってどういう、ある塊が出てきたよっていうことを教えてくれる。しかし、ソンモはここからが重要です。ソンモでは照射ユニットの参照ベクトルを動かすだけじゃなく、照射ユニットの近くにあるユニットの参照ベクトルの方がこの式のことです。この式のことを今ここ文章でこうやって、照射ユニットの近くにあるユニットの参照ベクトルも 近くにあるのだけ動かすっていう項がこのガウス分布みたいな項です。つまり、xが来た時に近づけると。で、更新式はだいたい、だいたいってなんか知らんけど。で、こうなります。しかし、すると何が起こるか?ああ、僕はこういう説明しか知らないな。これを続けると何が起こるんだ。 この式だけでわかるか。入力データがたくさん出てくる場所には、あーこれ僕説明してなかったです。まだまだこの10分ではちょっとな。入力データがたくさん出てくる場所には多くの参照ベクトルが集まる。これもちょっと自分で実験してみるとわかります。 で、地図の意味が出てきた。さらに照射ユニットだけじゃなく、近傍ユニットも一緒に動かすため、モデル空間で隣り合ったユニットは 入力空間でも近い場所を表すようになる。 これがセルフオーガネーション、マップ、つまり地図という意味です。 モデル空間で隣にあったユニットは入力空間で近い場所を表す。 高次元の入力空間にあるデータの構造を、一次元や二次元のユニットにできるだけ近傍関係を保つ。 これはもう重要なフレーズですね。 ここの今回の、今日の用語整理。入力はx、ラベルなし。モデルはユニットの配列、一次元配列、後で二次元に拡張。 これは説明しているだけやね。SOMは教師なし学習の一種です。教師信号はありません。しかし入力データと内部構造が自動的に もうよくある誤解を確認。ユニットが一次元並んで入力データが一次元である必要はありません。一次元なのはモデル側の地図。 うん。僕もあんまりよく考えて、これはフィンランドのコホネン先生っていうのが名付けた数理モデルの名前なんですけど、 マップっていうのを地図って地図の解釈やね。マップっていうのはなんか写像みたいなことだと僕は理解をしてたんですが、このマップって本物の 土地の地図みたいな、こうイメージさせてますね。 これ長いね、まだいっぱいある。えーと、 これはじゃあ、これはあとは説明、あ、これが今日説明する。なるほど。 えっと、地図っていう、ちょっと地図っていう意味をもうちょっと。 入力空間の構造を写し取った地図。これが地図だそうです。分かやと思うかもしれませんけど。 これをこっちに置いたやつを地図っていうのか、これを地図って言われても困ると思うんだけど。 そういうの後でちょっと入力してみます。 ちょっとここで止めよう。あれ?あ、ここでいいの?
はい,ここで止めて正解だと思います。
今回の反論で,かなり重要な点が見えています。私の前の案でいちばん弱かったのは,まさに 「map / 地図」 の説明です。
特にこの違和感は正しいです。
「これを地図って言われても困る」
「map は写像という意味ではないのか」
「土地の地図みたいな意味で言ってよいのか」
ここは学生も同じところで止まる可能性が高いです。
SOM の map は,数学的には「入力空間からユニット配列への対応づけ」という意味で 写像 と見てよいです。
ただし,Kohonen の Self-Organizing Map で強調されている map は,単なる写像ではなく,近さの関係をなるべく保つ対応づけ です。
したがって,「地図」と言うなら,次のように言うのがよいです。
⸻
SOM における「地図」という言葉は,単にきれいな図という意味ではありません。
地図で重要なのは,実際の土地そのものをそのまま持ってくることではなく,場所どうしの関係を,紙の上に保って表すことです。
たとえば,宮崎市,延岡市,都城市が実際には地球上の場所として存在しています。地図はそれを紙の上の2次元の位置に置き換えます。完全に同じではありませんが,「近い場所は地図上でも近い」「北にあるものは上にある」というような関係をなるべく保っています。
SOM もこれに似ています。
入力データは,もともと高次元の入力空間にあります。画像なら784次元かもしれません。そこにあるデータそのものを,1次元や2次元のユニット配列の上に対応づけます。
ただし,何でもよい対応づけではありません。
入力空間で似ているデータは,なるべくモデル空間でも近いユニットに対応するようにしたい。これが SOM の map という言葉の意味です。
⸻
この説明を入れた方がよいです。
前の案では,「入力空間の形を地図に写し取る」と言ってしまいましたが,これは少し早すぎました。学生には「形って何?」「地図って何?」になります。
よりよい始め方は,たぶんこれです。
⸻
今日は Self-Organizing Map,略して SOM を説明します。
名前の中に map という言葉があります。
この map は,日本語では「地図」と訳されることがありますが,ここでは少し注意が必要です。
SOM でいう map とは,入力データを,1次元や2次元のユニット配列の上に対応づけることです。
ただし,単に対応づけるだけではありません。
入力空間で似ているデータは,ユニット配列の上でも近い場所に来てほしい。
入力空間であまり似ていないデータは,ユニット配列の上でも離れた場所に来てほしい。
つまり,SOM は,入力データの「近さの関係」を,低次元のユニット配列の上にできるだけ保って表すモデルです。
ここで大事なのは,空間が2つあるということです。
ひとつは入力空間です。
これはデータ \bm{x} が存在している空間です。画像なら高次元です。
もうひとつはモデル空間です。
これはこちらが用意するユニットの並びです。最初は1次元に並んだユニットで考えます。
SOM は,入力空間にあるデータを,モデル空間のユニットに対応づけます。
そして,その対応づけが,なるべく近さを保つように学習します。
⸻
この順番なら,「地図」という言葉を使っても危険が小さくなります。
また,今回の反論で出てきた
「入力空間とモデル空間。2つの空間があるよっていうのを分けて考えないといけない」
これは本当に核心です。最初の10分の中心は,ここだけでもよいくらいです。
SOM の導入で学生が混乱する原因は,多くの場合,次の3つが混ざることです。
1. 入力空間の点 \bm{x}
2. モデル空間のユニット番号 i
3. ユニットが持っている入力空間上の参照ベクトル \bm{w}_i
特に 2 と 3 が混ざります。
つまり,ユニット i はモデル空間の中では「何番目のユニット」です。
しかし,そのユニットは入力空間の中に \bm{w}_i という点を持っています。
この二重性を最初に言った方がよいです。
⸻
修正版の導入は,前のものよりさらに絞るなら,次のようになります。
⸻
今日は SOM,Self-Organizing Map を説明します。
最初に,SOM で混乱しやすい点を言います。
このモデルでは,空間が2つ出てきます。
ひとつは入力空間です。
これはデータ \bm{x} がある空間です。
もうひとつはモデル空間です。
これはこちらが用意するユニットの並びです。
入力空間は高次元でも構いません。
たとえば画像なら,画素数だけ次元があります。
一方,モデル空間は,最初は1次元のユニット列で考えます。
たとえば,1番,2番,3番,……,20番のように,ユニットが横一列に並んでいると考えます。
ここで重要なのは,各ユニットが,入力空間の中にひとつのベクトルを持っていることです。
i 番目のユニットが持っているベクトルを
\bm{w}_i
と書きます。
これは参照ベクトル,reference vector と呼ばれます。
\bm{w}_i は入力と同じ次元のベクトルです。
つまり,
\bm{x}\in\mathbb{R}^d
なら,
\bm{w}_i\in\mathbb{R}^d
です。
したがって,各ユニットは,モデル空間では1列に並んでいますが,同時に入力空間の中に代表点を持っています。
SOM の学習とは,この代表点 \bm{w}_i を動かすことです。
では,何を目指して動かすのか。
目標は,入力空間で近いデータが,モデル空間でも近いユニットに対応するようにすることです。
この意味で,SOM は入力空間の近さの構造を,1次元や2次元のユニット配列の上に表すモデルです。
この「近さの関係を保って表す」という意味で,map,つまり地図という名前がついています。
⸻
このぐらいから始めるのがよいと思います。
前の案の「ラベルのない入力データ」「データ分布」「地図」は,概念としては間違っていません。ただ,冒頭に並べると,まだ何も見えていない学生には抽象語が多すぎます。
最初は,
空間が2つある。
ユニットはモデル空間に並んでいる。
各ユニットは入力空間に参照ベクトルを持つ。
学習とは参照ベクトルを動かすこと。
近い入力が近いユニットに対応するようにする。
これだけで始めるのがよいです。
結論から言うと,**SOM の目的関数は,通常のニューラルネットのように最初から明確に1つ決まっているわけではありません**。
ただし,講義で説明するなら,次の目的関数を出すのがいちばん自然です。
[
E
=
\sum_{n=1}^{N}
\sum_{i=1}^{m}
h_{c(n),i}
\left|
\bm{x}^{(n)}-\bm{w}_i
\right|^2
]
ここで,
[
c(n)
====
\arg\min_j
\left|
\bm{x}^{(n)}-\bm{w}_j
\right|
]
です。
意味は次の通りです。
[
\bm{x}^{(n)}
]
は (n) 番目の入力データです。
[
\bm{w}_i
]
は (i) 番目のユニットが持つ参照ベクトルです。
[
c(n)
]
は,入力 (\bm{x}^{(n)}) にいちばん近い参照ベクトルを持つユニット,つまり勝者ユニットです。
[
h_{c(n),i}
]
は,勝者ユニット (c(n)) とユニット (i) が,モデル空間上でどれくらい近いかを表す近傍関数です。
たとえば,
[
h_{c,i}
=======
\exp\left(
-\frac{|c-i|^2}{2\sigma^2}
\right)
]
のようにします。
この目的関数の意味は,
**各入力データ (\bm{x}^{(n)}) に対して,勝者ユニットだけでなく,その近傍ユニットの参照ベクトルも,入力データに近くなるようにしたい**
ということです。
普通のクラスタリング,たとえば (k)-means に近い目的関数は,
[
E_{\mathrm{kmeans}}
===================
\sum_{n=1}^{N}
\min_i
\left|
\bm{x}^{(n)}-\bm{w}_i
\right|^2
]
です。
これは,
**各データを,いちばん近い代表点でよく近似したい**
という目的です。
一方,SOM では,勝者ユニットだけでなく,勝者ユニットの近くにあるユニットも一緒に入力へ近づけます。だから,
[
\sum_i h_{c(n),i}
\left|
\bm{x}^{(n)}-\bm{w}_i
\right|^2
]
という形になります。
つまり SOM の目的は,単にデータを代表点で近似することではありません。
目的は二つあります。
第一に,入力データの多い場所に参照ベクトルを配置することです。
これは量子化,または代表点による近似です。
第二に,モデル空間で隣り合うユニットが,入力空間でも近い場所を表すようにすることです。
これが SOM の「地図」らしさです。
したがって,講義では次のように言うとよいです。
SOM の目的関数は,厳密には通常の誤差逆伝播で使う損失関数のように単純ではありません。
しかし,意味を説明するためには,入力データと参照ベクトルの距離の二乗和を小さくする,と考えればよいです。
ただし SOM では,勝者ユニットだけでなく,その近傍ユニットにも重みをかけて,同じ入力に近づけます。
そのため,目的関数は
[
E
=
\sum_{n=1}^{N}
\sum_{i=1}^{m}
h_{c(n),i}
\left|
\bm{x}^{(n)}-\bm{w}_i
\right|^2
]
のように書けます。
この式は,入力空間でのデータ分布を近似しながら,モデル空間での近傍関係も保つ,という意味を持ちます。
ただし,ここで注意が必要です。
SOM の標準的なオンライン更新則は,この目的関数を厳密に勾配降下している,と言い切ると少し危険です。
理由は,
[
c(n)
====
\arg\min_j
\left|
\bm{x}^{(n)}-\bm{w}_j
\right|
]
で決まる勝者ユニット (c(n)) 自体が,(\bm{w}_i) に依存して変わるからです。
つまり,(\bm{w}_i) を少し動かすと,どのユニットが勝者になるかも変わる可能性があります。
そのため,SOM は「この目的関数をきれいに微分して最小化するアルゴリズム」と説明するより,
**近傍重みつきの量子化誤差を小さくする方向に参照ベクトルを動かすアルゴリズム**
と説明する方が正確です。
授業で一言で言うなら,これです。
**SOM の目的は,入力データを代表ベクトルで近似しつつ,モデル空間で近いユニットが入力空間でも近い代表ベクトルを持つようにすることです。**
そのための目的関数としては,
[
E
=
\sum_{n=1}^{N}
\sum_{i=1}^{m}
h_{c(n),i}
\left|
\bm{x}^{(n)}-\bm{w}_i
\right|^2
]
を見せればよいと思います。
この部分は,授業としてはかなり危険ですが,研究の思想はよく出ています。危険なのは,学生にはまだ SOM も Oja 則も PCA も von der Malsburg も Amari も区別できない段階で,歴史・人物・数式・美意識が一気に出ている点です。
特に直すべき点は次の4つです。
⸻
1. 事実関係・名称の確認
まず,人名は Christopher ではなく,通常は Christoph von der Malsburg です。1973年の自己組織化モデルとしては,視覚皮質の方位選択性細胞の自己組織化に関する論文が重要です。Kohonen の SOM の代表的な論文は 1982年で,Amari の lateral inhibition 型 neural field の論文は 1977年です。Oja の PCA を実現する単一ニューロンモデルも 1982年です。
ここは授業では,正確にはこう言う方が安全です。
1970年代に,神経場や視覚皮質の自己組織化を説明する数理モデルがいくつか提案されました。
代表的には von der Malsburg の視覚皮質モデルや,甘利先生の lateral inhibition 型 neural field があります。
その後,Kohonen がより工学的に扱いやすい形として Self-Organizing Map を提案しました。
「ノーベル賞を取るなら……」や「まだご健在」は,授業の本筋から外れ,かつ事実確認のリスクがあるので,講義中は避けた方がよいです。
⸻
2. いちばん混乱する箇所
この説明では,学生の頭の中で次の3つが混ざります。
1. SOM
* 複数のユニットが並ぶ
* 各ユニットが参照ベクトルを持つ
* 勝者ユニットと近傍ユニットを更新する
2. Oja 則
* 単一ニューロンで PCA の第1主成分を学習する
* 入力 \bm{x} と重み \bm{w} だけで更新される
3. Amari / von der Malsburg 型の連続的・相互作用的モデル
* ユニット同士の相互作用がある
* lateral excitation / lateral inhibition のような結合がある
* 内部ダイナミクスと入力重みのダイナミクスが両方ある
この3つは,すべて「自己組織化」の仲間として語れますが,同じモデルではありません。
したがって,この部分の最初に,次の一文を入れるべきです。
ここから少し歴史の話をします。ただし,これから出てくるモデルは全部同じものではありません。共通しているのは,「教師信号なしに,入力データや入力刺激の構造に応じて,重みや配置が自動的に整っていく」という考え方です。
この一文がないと,学生は「結局どの式が SOM なのか」がわからなくなります。
⸻
3. 明確な誤りまたは危険な言い方
PCAについて
文字起こしでは,
PCAも教師あり学習の一つです。
となっていますが,これはおそらく言い間違いです。PCA は通常,教師なし学習の代表例として説明されます。Oja 則は,単一ニューロンの重みベクトルが主成分方向に収束するモデルとして説明されます。
授業ではこう言うべきです。
教師なし学習の最も古典的な例のひとつが PCA,主成分分析です。
PCA は,正解ラベルなしに,データの分散が最も大きい方向を取り出します。
「これも自己組織化のモデル」
これは正しい方向ですが,やや危険です。
学生には,
SOM も自己組織化。
Oja 則も自己組織化。
Amari の neural field も自己組織化。
と言われると,「では自己組織化とは何でもありなのか」となります。
そこで,次のように限定するとよいです。
ここでいう自己組織化とは,外から正解を与えなくても,入力の統計構造や刺激の構造に応じて,内部の重みや活動パターンが秩序を持つように変化する,という意味です。
⸻
4. この部分の口語説明としての修正版
この歴史の話は,10分の中に入れるなら,かなり整理した方がよいです。以下のようにすると,SOM,PCA,Oja 則,歴史の関係が壊れにくいです。
⸻
今日は SOM の説明をしていますが,少しだけ歴史の話をします。
ただし,ここで注意してください。
これから出てくるモデルは,全部が同じモデルではありません。
共通しているのは,教師信号なしに,入力の構造に応じて,ネットワークの重みや活動パターンが自然に整っていく,という考え方です。
この広い考え方を,ここでは自己組織化と呼びます。
1970年代には,視覚皮質の構造がどのようにできるのか,神経場の中にどのような活動パターンが生じるのか,という問題が盛んに研究されました。
たとえば,von der Malsburg は,視覚皮質の方位選択性のような構造が,神経回路の中でどのように自己組織化されるかを考えました。
また,甘利先生は,lateral inhibition,つまり近くとは興奮的に相互作用し,少し離れたところとは抑制的に相互作用するような神経場のモデルを調べました。
この種のモデルでは,ユニット同士の結合があります。
さらに,外から入力を受け取る重みもあります。
つまり,ネットワーク内部のダイナミクスと,入力を受け取る重みのダイナミクスの両方を考える必要があります。
これは非常に面白いのですが,初めて学ぶには少し複雑です。
そこで,今日中心に扱うのは,Kohonen の Self-Organizing Map,SOM です。
SOM は,自己組織化の考え方を,かなり単純で工学的に使いやすい形にしたモデルだと考えてください。
SOM では,ユニットを1次元または2次元に並べます。
各ユニットは参照ベクトルを持っています。
入力が来たら,入力に一番近い参照ベクトルを持つ勝者ユニットを選びます。
そして,勝者ユニットとその近傍ユニットの参照ベクトルを,入力に近づけます。
この単純な規則を繰り返すと,入力空間の近さの構造が,ユニット配列の上に表れるようになります。
ここが SOM の面白いところです。
一方で,自己組織化のモデルは SOM だけではありません。
もうひとつ,非常に有名な例が PCA,主成分分析です。
PCA は教師なし学習の古典的な方法です。
入力データだけを見て,データが最も大きくばらついている方向を取り出します。
この方向を第1主成分と呼びます。
普通,PCA は線形代数の方法として説明されます。
つまり,共分散行列を作って,その固有ベクトルを求める,という説明です。
しかし,これをニューラルネットワークの学習則として実現することもできます。
その代表例が Oja 則です。
Oja 則では,ニューロンはひとつだけです。
入力を \bm{x},重みを \bm{w} とします。
ニューロンの出力は,入力と重みの内積
y = \bm{w}^{\top}\bm{x}
です。
そして,重み \bm{w} を,入力 \bm{x} と出力 y を使って少しずつ更新します。
この学習を繰り返すと,重みベクトル \bm{w} が,データの第1主成分の方向に近づいていきます。
つまり,正解ラベルを一切与えていないのに,データの中で最も重要な方向が,ニューロンの重みとして取り出されます。
これも自己組織化の一例です。
ここで,SOM と Oja 則の違いを確認しておきます。
SOM は,たくさんのユニットを並べて,入力空間の構造を1次元や2次元の配列上に表すモデルです。
Oja 則は,ひとつの線形ニューロンが,入力データの主成分方向を学習するモデルです。
どちらも教師なし学習です。
どちらも,外から正解を教えられずに,入力データの構造を重みの中に取り込みます。
ただし,目的は違います。
SOM の目的は,入力空間の近さの構造を,ユニット配列上に表すことです。
Oja 則の目的は,データの分散が最も大きい方向を,重みベクトルとして取り出すことです。
今日まず理解してほしいのは SOM です。
その後で,自己組織化のもうひとつの美しい例として,Oja 則による PCA を見ます。
どちらも,式は非常に短いです。
しかし,その短い式から,データの構造を取り出す学習が起こります。
私はここに,自己組織化モデルの面白さがあると思っています。
⸻
この修正版では,先生の言いたい
「こんなの自分で思いつけそうに見えるが,実際には思いつけない」
「式一本で構造が出るところが美しい」
「SOM だけでなく,Oja 則も自己組織化の代表例として見せたい」
という思想は残っています。
ただし,授業上は,SOM の説明が終わる前に Oja 則へ行くと危険です。
順番としては,
1. SOM の問題設定
2. SOM の更新則
3. SOM の簡単な実験
4. 「自己組織化モデルは SOM だけではない」
5. PCA
6. Oja 則
がよいです。
今回の録音部分は,講義の冒頭ではなく,SOM を一通り動かした後の歴史紹介として入れると,かなりよくなると思います。
第9回
2026-06-17水
Associative Memory
https://www.chikumashobo.co.jp/product/9784480512291/
https://www.chikumashobo.co.jp/docs/images/book/big/9784480512291.MAIN.jpg
第8回
2026-06-10水
Associative Memory
https://gyazo.com/ecd590b05d4d1222f02a81bdbe9274e0
第7回
2026-06-03水
Associative Memory
https://gyazo.com/f50007cac54e02fadffbad61ca59422f
https://gyazo.com/2526d567b2288c3dc54a1d9b02770305
programming memo: this is for undergraduate course
https://colab.research.google.com/drive/1nac4cRV7D-WE6McIBlgIrhlPuidPR8Au?usp=sharing
第6回
2026-05-27水
Memorize the experimental procedure thoroughly before conducting the experiment.
問題設定・実験手順は、実験をする前に、頭の中にたたき入れる
https://gyazo.com/f56447f4f5c6c2cbf7eecd07479d5233
Here, the simplest code:
https://github.com/date333cs/Backpropagation/blob/master/python/bpnn_ad.py
backprop_numpy_forloop_init_scale_batch_pytorch_colab_v2_2026-05-26_menuro001e.ipynb
https://colab.research.google.com/drive/1dSkxx28lMbsPm7lAp7HMpLs5WHT5iyfe?usp=sharing
sinusoid_bias_variance_pytorch_colab_double_descent_2026-05-26_mneuro001j.ipynb
https://colab.research.google.com/drive/1p4P8CqnKJbIYzUL5bKbts5llRKwFolw0?usp=sharing
問題設定
https://www.cc.miyazaki-u.ac.jp/date333cs/paper-files/date20161120progsympo.pdf
https://gyazo.com/a397b39fd63a54fa317f548d0c58f4ea
https://gyazo.com/13b93f2e8e707e7d208d4d5ff584aa03
https://gyazo.com/04fb69345b7283aed25f0a98728861e7
2026-05-20水
During the lectures, feel free to make full use of AI tools like ChatGPT and Codex. You may also use PyTorch and similar tools.
講義中、ChatGPT とか、Codex とか、AI をガンガン使う。PyTorch など、も使ってよい。
https://gyazo.com/652c1d07b703b9007c15709c3f711041https://gyazo.com/1a9195a861ad59d25361406620719d05
https://gyazo.com/9cf47f7dee6b3a8756263fb5ee24a157https://gyazo.com/d0ec8f5b2c3a2d0b72ec69ad194265b3
Neural Networks and the BiadVariance Dilemma
Geman et al. 1992
https://doi.org/10.1162/neco.1992.4.1.1
https://gyazo.com/2cbe17beea129dde7cf28fef4f63b53f
Reconciling modern machine-learning practice and the classical bias–variance trade-off
Belkin et al. 2019
https://www.pnas.org/doi/10.1073/pnas.1903070116
https://gyazo.com/7b777094858bd3853f3d7f044f7abff4
High-dimensional dynamics of generalization error in neural networks
Advani et al. 2020
https://www.sciencedirect.com/science/article/pii/S0893608020303117
https://gyazo.com/3fdd6b22249e168e0d699f90fcc3d2bd
Continual task learning in natural and artificial agents
Flesch et al. 2023
https://www.cell.com/trends/neurosciences/fulltext/S0166-2236(22)00260-0
2026-05-13水
Project 1 : due 5/19 Tuesday
Do not use deep leraning frameworks like PyTorch. Just use numpy and matplotlib.
When you write code from scratch, you gain a much better understanding of how it works.
If you use ChatGPT or similar tools, you can get it done in under a minute, but that won’t help you improve your skills at all.
Even with a simple problem like the XOR problem, you’ll see that training a circuit to produce the correct answer isn’t all that easy.
XOR 問題という小さな問題でも、学習により正解を出す回路の学習は、それほど簡単ではない、ということを体験する。
2026-05-01金
本日の目的:計算結果を考察する
Today's objective: analyze the calculation results
Project 1:締切 5/19
Project 1 の課題は、numpy と matplotlib だけを使い、python コードを書いてください。
コードをゼロから書くと、動く仕組みが、よくわかります。
ChatGPT などを使うと、1分以内にできてしまいますが、それだと、まったく力が付きません。
PyTorch など使うのは自由ですが(これもChatGPT などを使うと、1分以内にできえる)、その仕組を理解してからにしてください。
要点:
https://gyazo.com/689e551b1c6b46a7eb375a3cd7662f62
https://gyazo.com/c25c2e4d9fdc3efb357555fc8570e18b
https://gyazo.com/01b57156bf9313ec0ad64f7f65fbb388
2026-04-22水
https://gyazo.com/0e81177dd642acd60513ed52d6c58fa9
この黒板の大きさ:約 1200 mm x 4500 mm
https://gyazo.com/d78f4b88931af5e062f6dd78440f46f7
https://gyazo.com/c4f85a3a9fb34f2fb40751c88dd925a7
2026-04-15
https://gyazo.com/c8c81f6d85392ae0713602607ddddd46
Overview of the Lecture
シラバスを使って説明
過去の講義から・これまでの様子(レポート課題など)を紹介
Explanation using the syllabus
Overview of past lectures and previous activities (such as report assignments)
成績評価について
いままではレポート課題で成績を評価していました。
しかし、去年(2025年)の年末から、ChatGPT などの生成AIの性能が革命的に進歩し、レポート課題をそのまま入力すると、生成AIがレポートをこなしてくれるようになりました。ですので、提出されたレポートだけを見て成績を評価することが、かなり難しくなりました。
不思議なことに、少し会話すると、その人が、どこまで理解しているかどうかわかるのも事実です。ですので、レポートには、レポート課題を通して、うかんだ疑問を書いてください。実際に課題にとりくんだ場合、ぼんやりとした質問にはならないはずです。生成AIにその疑問をぶつけてみてください。また疑問がでてくると思うので、それを繰り返してください。
生成AIの回答は長いので、自分の疑問(問い)のリストを、レポートの最後に付けてください。それをもとに、レポート提出後、短い口頭試問を実施し、成績を評価します。わからないことがあるのはあたりまえでそれを楽しめばいいです。今期は、質問の内容で成績を評価します。
On Grade Evaluation
Until now, I have been evaluating grades based on report assignments.
However, since the end of last year (2025), the capabilities of generative AI tools like ChatGPT have advanced dramatically, and now, if you simply input a report assignment, the AI can generate the report for you. As a result, it has become quite difficult to evaluate grades based solely on the submitted reports.
Interestingly, it’s also true that just by having a brief conversation, I can tell how well a student understands the material. Therefore, in your report, please write down any questions that came to mind while working on the assignment. If you actually engaged with the task, your questions shouldn’t be vague. Try posing those questions to the generative AI. I expect more questions will arise, so please repeat this process.
Since the responses from the generative AI are quite long, please include a list of your questions at the end of your report. Based on this list, we will conduct a brief oral exam after you submit your report to evaluate your grade. It’s perfectly normal to have questions, so just enjoy the process. This semester, your grade will be based on the content of your questions.
とは言っても、生成AIは、とても便利です。
じゃんじゃん使いましょう。
ふつうの大学生・大学院生向けに書かれた専門書に書かれている、
理解できないことで、具体的なことであれば、
いま(2026年4月)の生成AIは、ほとんどの教員よりも、
いくらでも易しく教えてくれます。
講義中に、私の使い方も見せていきます。
Generative AI is incredibly useful.
Let’s use it as much as we can.
When it comes to specific concepts in specialized textbooks written for undergraduate and graduate students
that you don’t understand,
as of now (April 2026), generative AI can explain them far more clearly
than most professors.
I’ll also demonstrate how I use it during the lectures.
It is required that you can explain problem settings, procedures of the computer experiment, and the experiment results without seeing almost anything.
問題設定,計算機実験の手順,計算機実験の結果を,自分の書いたレポートを片手に,ほぼ何もみないで説明できるレベルに到達できていること.
Even with a simple task, when you write the code from scratch and perform experiments, many questions must arise. Please report them.
単純な課題でも,自分でゼロからコードを書いて実験してみると,いくつもの疑問が湧いて出てきます.それをレポートに書いてください.
https://gyazo.com/ddbc7f3169b5d9cebd525f661cdb7e99
神経情報処理とニューロコンピューティング
脳の情報処理様式を探る (脳の情報処理を支配している基本的な諸原理)
脳の秘密はまだ解き明かされてはいない
ニューロンのような素子を多数結合した系のダイナミクスの中でどのような学習や並列情報処理が実現できるのか、その可能性を数理的に探究する
→ 現実の脳の仕組み
→ 工学におけるニューロコンピュータの設計(脳にヒントを得た新しい情報処理システムの構築)
Neural Information Processing and Neurocomputing
Exploring the Brain’s Information Processing Mechanisms (The Fundamental Principles Governing Brain Information Processing)
The secrets of the brain have not yet been fully unraveled.
We mathematically explore the potential for learning and parallel information processing that can be realized within the dynamics of systems composed of numerous neuron-like elements.
→ The Mechanisms of the Real Brain
→ Design of Neurocomputers in Engineering (Construction of New Information Processing Systems Inspired by the Brain)
いくつかの基本的な回路網をとりあげ、その解析のための数理的な方法を示す
We will examine several basic neural networks and present mathematical methods for their analysis
ニューロコンピューティングとは
脳と同じ情報原理にもとづく広い意味での計算方式、情報処理方式
工学的に実現 → ニューロコンピュータ
単なる脳の模倣ではない
同じ基本原理を脳とは違ったやりかたで工学的に実現するもの
What is Neurocomputing?
A broad category of computational and information processing methods based on the same information principles as the brain
Engineered implementation → Neurocomputers
Not merely an imitation of the brain
Engineered implementations that realize the same fundamental principles in ways different from the brain