8. Blue Brain Project
Henry Markram
“I wanted to model the brain because
we didn’t understand it.”
“The best way to figure out how
something works is to try to build it
from scratch.”
in vivo
in vitro
in silico
38. ニューロン発火の条件
あるニューロンが「発火」するかは、次のようにして決まる。
興奮性シナプスから受け取る信号の強さ全体 A から
抑制性シナプスから受け取る信号の強さ全体 B を
引いて、その値がある閾値 C より大きければ発火する。
A – B > C 発火 ( A – B – C > 0 )
A – B < C 発火しない ( A – B – C < 0 )
発火賛成と発火反対の多数決のようなもの。ただし、賛成
票が、ある一定数以上(閾値)、反対票を上回らないとい
けないというルール。至極、単純である。
58. 式は便利だ!
Y = W・XT + b が表すもの
数学的な表記を使うと、問題を簡潔に定式化できる。
ここでは、一つのニューロンの状態だけでなく、複数
のニューロンからなる層も、一つの式で表現できる背
景について述べる。
この節は、読み飛ばしてもらって結構です。
59. 式は便利だ!
Y = W・XT + b が表すもの
ニューラル・ネットワークの本を読んで、最初につまずくの
は、行列が出てくるあたりだと思う。ただ、ニューラル・ネッ
トワークの理解で、当面、必要なことは、式 Y = W・XT +
b が表現しているものを理解することだ。見慣れていない
だけで、難しい数学ではない。
具体的な例で、式 Y = W・XT + b が表しているものを、
紹介したいと思う。一見、複雑に見える沢山の関係が、こ
の式一つで表現されていることがわかるはずだ。式は便
利だということがわかってもらえると思う。
以下の例では、XもYもbも、最初から列ベクトルだとしよう
(このことを、仮に、X=[X1,X2,...Xn]Tのように表そう)。こ
の時、 Y = W・X + b が、何を表すかを考えよう。
60. Y = W・X + b が表すもの
Wが数値(スカラー)の時
Y=y, X=x, W=a, b=b なら、この式は、
y = ax + b という、式を表す。
Y=y, X=x, W=2, b=3 なら、この式は、
y = 2x + 3 という、式を表す。
Y=y, X=x, W=4, b=0 なら、この式は、
y = 4x という、式を表す。
61. Y = W・X + b が表すもの
Wがベクトルの時
Y=y, X=[x1,x2]T W=[w1,w2] b=b0 なら、この式は、
y = w1・x1+w2・x2+b0 という、式を表す。
Y=y, X=[c,d]T W=[m,n] b=b なら、この式は、
y = m・c+n・d+b という、式を表す。
Y=y, X=[1,0]T W=[2,3] b=4 なら、この式は、
y = 2・1+3・0+4 = 6 という、式を表す。
Y=y, X=[x1,x2,x3]T W=[w1,w2,w3] b=b0 なら、
y = w1・x1+w2・x2+w3・x3+b0
Y=y, X=[x1,x2,x3,x4]T W=[w1,w2,w3,w4] b=b0 な
ら、y = w1・x1+w2・x2+w3・x3+w4・x4+b0
83. 出力結果と「正解」とのずれ
Loss Function (損失関数)
まず、出力結果と予期していた「正解」とのズレを、何らか
の方法で定式化する必要がある。そのズレを関数の形で
表したものを Loss Function (損失関数)という。Cost
Function (コスト関数)ということもある。
出力が「正解」と一致した時、 Loss Functionの値が最
小値を取るようにする。この時、パラメーター修正の目的
を、Loss Functionの値をできるだけ小さくすることだと
言い換えることができる。
ある問題に対して、Loss Functionは一つとは限らない。
どのようなLoss Functionを選ぶかで、パラメーター修正
の効率は変化する。
104. If α is too small, gradient
descent can be slow.
If α is too large, gradient
descent can overshoot the
minimum. It may fail to
converge, or even diverge.
アルファが、あまりに小さいと、
Gradient descentは、ゆっくり
にしか進まない。
アルファが、あまりに大きいと、
Gradient descentは、最小値
を通り越してしまう。場合によっ
ては、振動したり、収束しない場
合もある。
このアルファを学習率
(Learning Rate)という。
181. ....
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# Before starting, initialize the variables. We will 'run' this first.
init = tf.initialize_all_variables()
# Launch the graph.
sess = tf.Session()
sess.run(init)
# Fit the line.
for step in xrange(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
182. ....
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# Before starting, initialize the variables. We will 'run' this first.
init = tf.initialize_all_variables()
# Launch the graph.
sess = tf.Session()
sess.run(init)
# Fit the line.
for step in xrange(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
グラフの定義
最適化の
アルゴリズム
グラフの起動
グラフで訓練
繰り返し
184. ....
# Create the model
x = tf.placeholder("float", [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
# Define loss and optimizer
y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01)
.minimize(cross_entropy)
# Train
tf.initialize_all_variables().run()
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x: batch_xs, y_: batch_ys})
ソースの全体は、こちらにある。
https://goo.gl/MwscZO
185. ....
# Create the model
x = tf.placeholder("float", [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
# Define loss and optimizer
y_ = tf.placeholder("float", [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.GradientDescentOptimizer(0.01)
.minimize(cross_entropy)
# Train
tf.initialize_all_variables().run()
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
train_step.run({x: batch_xs, y_: batch_ys})
グラフの定義
最適化の
アルゴリズム
グラフで訓練
繰り返し
ソースの全体は、こちらにある。
https://goo.gl/MwscZO