最近流行りの機械学習でも使用される「最急降下法」について、最も簡単なモデルに対して実験してみた結果を記述していおく。なお、英語は 「Gradient descent」,「 steepest descent」。「勾配法」とも呼ばれる。
モデル
- 最も単純な1段のニューラルネットワーク
- 入力は X1, X2 の2つのみ
- それぞれの入力係数は W1, W2
- バイアス様に W0 も用意し、X0 は常に1とする
- y = ΣW*X とし、活性化関数は使用しない
学習
- 教師あり学習とし、教師値は t = A + B*X1 + C*X2 とする
- A, B, C は定数
- ロス関数は E = 1/2 * (y – t)^2 とする
- いわゆる最小自乗誤差
- 1/2 を乗じているのは微分したときに (y-t) となりすっきりするから
- 入力から出力値を計算し、誤差を求め、それを元に係数 W0, W1, W2 を最急降下法により修正する
- Wi について、∂E/∂Wi を計算し、それに定数 α をかけたものを Wi から減ずる(これを「最急降下法」と呼ぶ)
- Wi -= α * ∂E/∂Wi
- α は 0.01 などの小さい値。大きければ収束が速いが、発散する場合がある
- ∂E/∂Wi は y を用いた 微分 の連鎖律により計算する
- ∂E/∂Wi = ∂E/∂y * ∂y/∂Wi
- ∂E/∂y = y – t, ∂y/∂Wi = Xi なので
- ∂E/∂Wi = (y – t) * Xi