ニューラルネットワーク入門
〜パーセプトロンから勾配降下法まで〜
森山直人
パーセプトロン
x z
人間の思考(脳)を構築する最小計算ユニッ
トであるパーセプトロンを考える
パーセプトロン
何かを入力
ゴニョゴニョ
して
何かを出力
x z
一般的な動作原理
入力が一定に
達すると
そこで出力する
x z
バイアス
入力が一定に
達すると
出力する
これをバイアスという
bx z
複数入力
入力は複数になる
※でも出力は1つ
x2 z
x1
x3
複数入力
ここにもバイアスはある
bx2
x1
x3
重み
b
入力の重みを変えてみる
(太さが重みの度合い)
x2
x1
x3
重み
b
入力の重みを変えてみる
(太さが重みの度合い)
x2
x1
x3
w1
w2
w3
総入力
bx2・w2
入力の合計とバイアスを比較
⇒出力
x3・w3 x1・w1
活性化関数
x・w z
b 出力の値をコントロールしたい
Why?
ただ一定の閾値を超えると発火するのでは、線
形分離しかできない
非線形性を持たすことで、表現の自由度を獲得
したい
多層になった場合にいろいろ都合が良い(後
述)
活性化関数
x・w z
b
ここを関数化する
活性化関数
x・w z
b
ここを関数化する
⇒ z = f(x・w + b)
活性化関数
⇒ z = f(x・w + b)
この f() の中身の計算によって、出力されるzの値が変わってくる
• シグモイド ⇒ 0 ~ 1
• 双曲線正接関数 ⇒ -1 ~ 1
• 正規化線形関数 ⇒ 0 ~ ∞
ニューラルネットワーク
前述したパーセプトロンが多数積み重なったもの
出力は複数あるが、すべて同じ出力のコピー
入力層 隠れ層
出力層
ニューラルネットワーク
入力層 隠れ層
出力層
活性化関数と誤差関数は基本的に単一
パーセプトロンと同じ考え
・活性化関数:
∟各層の各ニューロンごとに活性化関数を持つ
∟異なる層で異なる誤差関数を持つことができる
・誤差関数
∟出力層と正解データ間にて誤差関数を計算
∟後述の誤差逆伝搬を用いて、各ニューロンの微分
f()
ニューラルネットワークのフロー
x x*w
w
x*w+b
b
入力 重み付加 バイアス計算 活性化関数
誤差
ここまでは、パーセプトロンの動作について考えてきたが、その
パーセプトロンが正しく機能しているかを判断する必要がある
そもそも、パーセプトロンを使う理由はその計算によって、意図す
る値を出力させること
誤った値が出た場合は、正しい値を出力させるべく、本来出力させ
たい値と比較させ、ずれた度合いに応じて、パーセプトロン内の値
を修正する必要がある
誤差
修正箇所は重みとバイアス
x・w z
b
誤差関数
bx・w z
y
パーセプトロンの計算結果 正しい値
ここの差分を
計算すれば良い
誤差関数
bx・w z
y
パーセプトロンの計算結果 正しい値
E(w) = ‖ y - f(w・x + b) ‖
誤差関数 正解
活性化関数
入力値
2 (絶対値を取る)
誤差関数
E(w) = ‖ y – f(w・x + b) ‖
誤差関数 正解
活性化関数
入力値
この誤差関数が小さいほど、正解データと近い値が
出力されたことになる
⇒良い重みとバイアスが設定でいていることになる
2
勾配降下
誤差を小さくしたい
誤差関数の最小化を図る
勾配降下
E(w)
w
誤差が最小の値
このwの値を知りたい
勾配降下
E(w)
w
誤差が最小の値
このwの値を知りたい
今こことする
勾配降下
E(w)
w
誤差が最小の値
このwの値を知りたい
少しずつ誤差が小さくなるよう、
wを修正していく
勾配降下
E(w)
w
誤差が最小の値
このwの値を知りたい
修正し過ぎると、意図しない
位置まで行ってしまう
勾配降下
E(w)
w
誤差が最小の値
このwの値を知りたい
この修正度合いを決めるのが
とても重要
勾配降下法
E(w)
w
誤差が最小の値
このwの値を知りたい
この修正度合いを決めるのが
とても重要
この「修正度合い」は一般的に
学習率と呼ばれる。
この学習率は様々なアルゴリズム
によって計算される。
例)
・AdaGrad
・RMSProp
・AdaDelta
・Adam
次回はバッチ学習から解説します・・・

ニューラルネットワーク入門