数理脳科学(2022)
YRM71 数理脳科学(2022) 前期金曜 第7・8限
情報機械としての脳の本質を探す
キーワード:学習,記憶,並列の相互作用,興奮パターン,
レポート講評。まとめ
Python: オブジェクト
https://gyazo.com/8b2ed365685f20eeb39f64eebdf0b1afhttps://gyazo.com/b7035717fd9eddc2f18d5d63bea090b8
What the f*ck Python!
来年の案
輪読?
確率的生成モデル
https://gyazo.com/27eb5263323b80a060e007a4a781ff1d
https://gyazo.com/61d435aca0c9991b77a7d8db7fffb19e
確率的生成モデル
https://gyazo.com/78a6d168577aff99a6d95567ec112386https://gyazo.com/3fdd03721bd3c70bbc6cc5b7e44befa2
https://gyazo.com/16bf33789b62f556790b3766fd57d5cd
https://gyazo.com/e8bb54dce6f8e4613426ab8432f24578
自己組織化モデル
ボルツマンマシン (資料配布のみ)
https://gyazo.com/7e9e723bb2e50cde70d8662489b4ecc3
https://gyazo.com/7247febc8aeaeabebcd8abb34098d7a5
https://gyazo.com/97f4a5fe3ec43770602cc3da0d060874
自己組織化モデル
Kohonen の自己組織化 MAP
レポート講評:連想記憶モデル
https://gyazo.com/84339a657ec7e3ec936f97b38af81b40
https://gyazo.com/bfe9d9731d167e61e9d3e03183b9af5b
https://gyazo.com/45b346b23a68655e90e422322c952595
連想記憶モデル
進捗状況の確認
Hopfield et al. 1983 夢見のモデル
https://gyazo.com/f545363044289325f57f2715dc8b1562
連想記憶モデル
https://gyazo.com/0f90556afa44f9bbcf8c4a93c4f82e5e
https://gyazo.com/b15df15ac18bf3c9ac3e71cc6004cc86
レポート講評
学習係数の値
XOR
岩 $ \mu = 0.8 学習がうまく進んでいない.学習回数が少なすぎる?
後 $ \mu = 0.7 $ N(0, \sigma=0.1)
河
宮
吉
Symmetry Detection
どんなパラメータの値を用いれば,最速で学習が進むか
結合係数の初期値の分布
学習係数の値
モーメント項のありなし
用語(ここだけ)
number of epochs
XORの場合,4つの入力について,1回ずつ回路を学習した場合,1 epoch
number of iterations
ある一つの入力に対し,回路を学習. 1 iteration (4 iteration で 1 epoch)
バッチ型(一つ一つの入力に対して学習するのではなく,ひとまとめにして学習)
PyTorchを使う例
code:x
import torch
import numpy as np
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
# x: inputs
# y: targets
# z: outputs, z = f(x)
# E: error, E = 1/2*(z-y)**2
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = torch.nn.Linear(2, 2, bias=True) # fc: fully connected
self.fc2 = torch.nn.Linear(2, 1, bias=True)
def forward(self, x):
u = torch.sigmoid(self.fc1(x))
z = torch.sigmoid(self.fc2(u))
return z
def main():
x = torch.tensor(0, 0], 0, 1, 1, 0, [1, 1, dtype=torch.float32) y = torch.tensor(0], 1, 1, [0, dtype=torch.float32) epochs = 5000
f = Net()
# f.train() # train()とeval()で学習/推論のモードの切り替え.
# create an optimizer
optimizer = torch.optim.SGD(f.parameters(), lr=0.08, momentum=0.9)
criterion = torch.nn.MSELoss()
history_loss = []
for epoch in range(epochs):
optimizer.zero_grad() # zero the gradient buffers
z = f(x)
E = criterion(z, y)
E.backward()
optimizer.step() # Does the update
# save loss of this epoch
history_loss.append( E.data.numpy().tolist() ) # tolist()は、リスト型のオブジェクトを返す
print(E)
print(E.data)
print(E.data.numpy())
z = f(x)
print(z)
plt.figure()
plt.plot(range(1,epochs+1),history_loss,color='blue',linestyle='-',label='train_loss')
plt.legend()
plt.grid()
if __name__ == "__main__":
main()
code:x
x = torch.tensor(0, 0, 0, 0, 0, 0], 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, [1, 1, 1, 1, 1, 1, dtype=torch.float32) y = torch.tensor(1], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, [1, dtype=torch.float32) 課題1(教師あり学習)のレポート提出最終締切を 6/3金 12:00
BP 計算
素子の気持ちになって考える
学習補足.
モーメント項
アダム?
入力の次元が大きい場合(すべての例題を学習できない場合.この場合がほとんど)
活性化関数いろいろ
$ f(u) = u
$ f(u) = \tanh (u)
ReLU
学習でできたパラメータ $ \bm{\theta}
これはデータ$ \cal{D}に依存している(どんな環境,世界,先生に教えてもらったか)
$ \cal{D}=\{ \bm(x_1,y_1), \cdots, \bm(x_N,y_N)\}
$ f(\bm{x}; \bm{\theta})
モデルの評価方法,Error, Loss,ROCカーブ(回帰,2値分類のとき)
学習曲線
学習誤差(学習に用いたデータに対しての誤差)
汎化誤差
エンジニアリング
PyTorch
https://gyazo.com/7815c3727ba8a44b1a018b230811104d
https://gyazo.com/391e3104359c1cc4b6008a9e26861a7a
https://gyazo.com/507d72a364d94b597a72c82bd4d99e97
https://gyazo.com/e06644a779d7359b07591c7772a5b126
https://gyazo.com/7b103e07a5e2118b265edee97c259348
https://gyazo.com/6c5b09d65ca9ef35f67ac8a3ead6706c
理論的根拠
計算
誤差関数.どんな関数を最小化するか.
擬人化:素子の気持ちになってみる
並列分散処理
Hebb 学習
内部表現(internal representation,隠れ素子の表現)
Backpropagation and the brain
Theories of Error Back-Propagation in the Brain
数理脳科学
課題1(教師あり学習)のレポート提出最終締切を 5/27金 12:00 とします.
XOR,対称性判別問題で,どうしても学習が進まないは早めに相談してください.
XOR (↓ このパラメータの初期値で,だいたいうまくいくと思います)
重み,バイアス値の初期値 平均 0,標準偏差 0.2 にしたがう正規分布(すべての重み)
学習係数 0.8
学習: 1万回
図(こんな図も描いてみる)
横軸に学習回数.学習回数1というのは,なにをしたことか,具体的に記述.
縦軸に各重み(パラメータ)の値をプロット.
パラメータの数だけ曲線が描く.各値がどう変化していったか,学習が成功する直前で,どう値が動いているか,パラメータの初期値などを変えて多数回実験し,そのグラフを観察,考察する.
参考:
https://gyazo.com/b2048af53ea2230cfcdefe8a98123471
https://gyazo.com/6bd4475d9d7d2f3fa3370a968b5f658fhttps://gyazo.com/2becb7289b4b5fbae5ac6f3aeabcf7d9
https://gyazo.com/d283d4caf49a2acfaaf9a593fa07e121
各自がどこまでできたかを確認
XOR
対称性判別
手順を書く
パラメータの値
横軸の値,1つ増えると何が変わったのか
学習後の回路を解釈する
資料 WebClass
Rumelhart et al (1986)
ニューロコンピューティングの数学的基礎
プログラミング
実現の仕方は,ひとそれぞれ
読みやすいコード
データ構造(変数の表現方法)
変数名
変数名の長さ
学習アルゴリズム
数学的根拠
ローカルミニマム
https://gyazo.com/e0031f38c504672f0c622cd8a09ef49b
https://gyazo.com/7b7b40fe6ee811982f6f2eba24def161
https://gyazo.com/59231462962474191e99df444c40d585
例からの学習
誤差逆伝
https://gyazo.com/bcd9607525bda52812431190ed0c69cd
https://gyazo.com/95c14e7093666d59071ba5f0a800e5f1
https://gyazo.com/e23abe732f42007c364ecfa11d8a70dbhttps://gyazo.com/ff57377976a517155cc4ba6c5f8d165e
https://gyazo.com/96858b570c91a98898a55e8c82202232
例からの学習
https://gyazo.com/5001b4d491062be073cb7a75773681e2
入力信号の空間
重みベクトルの空間
初期値 $ \bm{w}_0 (適当な乱数を要素に持つベクトル)
学習のダイナミクス
基礎知識
直線,平面の方程式,超平面の方程式
$ y = ax + b
$ ax + by + c = 0
$ ax + by + cz + d = 0
$ ax + b = 0
$ w_1x_1 + w_2x_2 + w_3x_3 + w_0 = 0
法線ベクトル
誤差逆伝搬,計算
問題の定式化
与えられているもの(Given)
求めたいもの
数式の意味
ベクトルは太字
https://gyazo.com/2b6a065bc6972963e4ac3bd2324d69e4
https://gyazo.com/cbba22ef7ae844780f4019e9ffc7edff
https://gyazo.com/ab559021aedb9541a6797b2dd2adeec6
神経情報処理とニューロコンピューティング
脳の情報処理様式を探る (脳の情報処理を支配している基本的な諸原理)
脳の秘密はまだ解き明かされてはいない
ニューロンのような素子を多数結合した系のダイナミクスの中でどのような学習や並列情報処理が実現できるのか,その可能性を数理的に探究する(甘利俊一)
→ 現実の脳の仕組み
→ 工学におけるニューロコンピュータの設計(脳にヒントを得た新しい情報処理システムの構築)
いくつかの基本的な回路網をとりあげ,その解析のための数理的な方法を示す
ニューロコンピューティング
脳と同じ情報原理にもとづく広い意味での計算方式,情報処理方式
工学的に実現 → ニューロコンピュータ
単なる脳の模倣ではない
同じ基本原理を脳とは違ったやりかたで光学的に実現するもの