ニニニニニニニニニニニニニ ニニニニニニニニニニニニニニニニニニ ニニニニ
ニューラルネットワーク入門〜パーセプトロンから勾配降下法まで〜森山直人
パーセプトロン
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 zb 出力の値をコントロールしたいWhy ?ただ一定の閾値を超えると発火するのでは、線形分離しかできない非線形性を持たすことで、表現の自由度を獲得したい多層になった場合にいろいろ都合が良い(後述)
活性化関数
x ・ w zbここを関数化する
活性化関数
x ・ w zbここを関数化する
⇒ 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 zb
誤差関数
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
次回はバッチ学習から解説します・・・