(自分用メモ) 重回帰と勾配降下法
正しさは保証しません。
重回帰
n個の説明変数によって目的変数yの予測をしたいとする。
予測モデルとして、の重み付き線形和を採用してみる。
(は目的変数yの予測値。は説明変数に関わらず一定値のバイアス。)
このとき、適切な重みを教師データから推定したい。
教師データは目的変数と説明変数セットの組を複数個集めたものである。D個の教師データがあるとする。
...
例えば説明変数が2個で、下記のように教師データとして4個のデータがあるとする。
適当な重みwの値で予測値を出してみる。
データy | データx | 重みA: | 重みB: |
10 | (2, 5) | ||
-2 | (3, 3) | ||
12 | (4, -1) | ||
-13 | (-2, 3) |
モデル:
教師データでのyの値と、重みA・重みBでの予測値は以下のようになっており、重みBのほうが良さそうに思える。
重みA:
重みB:
教師データのy | -10 | -2 | 12 | -13 |
重みAでの予測値 | -6 | -1 | 8 | -6 |
重みBでの予測値 | -10.5 | -2.5 | 11.5 | -12.5 |
-
実際に重みBの方が良いことを示すため、「良さ」の評価指標が欲しい。
直感的には、教師データでのと推定値の差が小さくなる重みが良いと思われる。
そこで誤差関数というものを以下のように定義する。
(誤差関数の選び方には恣意性がある。差の絶対値の和など、二乗和以外のものもありうる。)
誤差関数の値が小さいほど良い重みであるとみなす。
実際に先ほどの重みで誤差関数の値を求めてみる。
教師データのy | -10 | -2 | 12 | -13 |
重みAでの | -6 | -1 | 8 | -6 |
重みBでの | -10.5 | -2.5 | 11.5 | -12.5 |
重みAのとき、
重みBのとき、
誤差関数の値が小さいので、重みBの方が良いとみなせる。
誤差関数を定義すれば、ありとあらゆるwの組み合わせの中で最も誤差関数の値が小さくなるwを「最適な」wとして定めることができる。
先ほどのデータでは、最適なwの値はおおよそである。
この重みでのyの予測値は(-9.88, -1.88, 11.92, -12.87)となり、誤差関数の値は
として求められる。
回帰問題を設定する場合、以下が必要となる。
- モデル定義(重回帰の場合)
- 教師データ
- 誤差関数の定義(差の二乗和など)
これらを最適化ブラックボックスに入力すれば、誤差関数を最小化するいい感じの重みwを出力してくれる。
勾配降下法
ここからはベクトルを導入していくことにする。
とおくと、内積を用いて以下のように書ける。
誤差関数もベクトルを入力にできる。
最適化ブラックボックスの中身を覗いてみる。やりたいことは、
- モデル定義(重回帰の場合)
- 教師データ
- 誤差関数の定義(差の二乗和など)
が与えられたとき、誤差関数を最小化するを求めることである。
を少しずつ改善してく方針で考える。
すなわち、十分小さいn+1次元ベクトルを用いて
と計算することを繰り返して、を改善する。
このとき、誤差関数が小さくなるように、を満たすようにする。
一回の更新において、誤差関数を最も小さくするの向きは、誤差関数の勾配の逆向き(と同じ向き)であることが知られている。
ただし、はn+1次元のベクトルで、
である。
重回帰での誤差関数の勾配を求めてみる。まずは3次元、データ2個で考える
で偏微分するとき、関係があるのはを含む項だけで、その値は
となる。よって、
一般に、D個のデータがあるとき、重みでの誤差関数の偏微分は以下のようになる。(とする)
これで勾配
が求められる。
あとはこの勾配に適当な縮小の係数αをかけて、(0<α<<1)
とwを少しずつ更新していけば、誤差関数の値が小さいwが得られる。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
誤差関数を最も小さくするの向きがと同じ向きであることを軽く検証する。
一回の更新においての大きさは一定で、向きは自由に変更できるとする。
多変数関数のテーラー展開によると
http://eman-physics.net/math/taylor_multi.html
らしい。()
多変数関数の引数をベクトルとして扱うと、
であることから、
ここで、は十分小さいとしているので、の要素同士の掛け算を含む二次の項は無視してよい。よって、
を適切な向きにすることで、を最小にしたい。(絶対値が最大の負の値にする)。
の内積を最小化するようなの向きを求める。
ここで、の大きさは一定だと仮定しており、はに依存しない。
2つのベクトルの大きさが一定であるとき、内積が最も小さくなるのはそれらのベクトルが逆向きのときである。
なので、はと同じ向きにすればよい。
そのときコサインが-1で、内積の値はである。