先日,インターンのみんなで「パターン認識と機械学習(上)」の第1章の輪読会を行いました.
輪読会の中で主に議論となったのは,多項式フィッティング. 多項式フィッティングとは,たくさんあるデータ点を多項式で表現する,というものです. 例えば,下の図を見てください. 散布図に当てはまりの良い直線 y=ax+b を引いています.
上の例では直線,つまり一次関数を考えていますが, 「多項式」と言うわけですから,一般には何次の関数でも同じことができます. N 次の関数を仮定すれば, y=w0+w1x+⋯+wNxN という形で書くことができます.この形に統一するなら,先ほどの直線 y=ax+b は y=w0+w1x に相当します.ここまではOKですよね! 直線の例は,結局1次多項式の例を考えていたにすぎない,というわけです.
では,データ点にちょうどうまくフィットするようなパラメータ a,b は どうやったら見つけられるのでしょうか?
ここで係数を求める方法が, 最小二乗法と呼ばれる方法です. 最小二乗法とは
というものです.下図を見てイメージをつかんでください. 点線部分が「差分」に相当します. この差分 d の二乗を全てのデータ点について計算して足しあわせ, それが最も小さくなるように係数を設定するとよい.これが最小二乗法です.
一般に,M 点からなるデータがそれぞれ (xi,yi) と表されており, これを N 次の多項式でフィッティングすることを考える場合,差分 d は d=yi−(w0+w1xi+⋯+wNxiN)=yi−N∑k=0wkxik と表されますから,全ての差分の2乗の総和は S(w0,…,wN)=12M∑i=1(yi−N∑k=0wkxik)2 となります.12 というのは,後々の都合を考えて便宜上つけたものです.
これを最小にすれば,求めたい多項式の係数 wk が得られる,ということがわかりますね! しかし,ここからが問題です. どうやってこの S(w0,…,wN) を最小にするものを求めるのでしょうか.
当てずっぽう,では到底無理ですよね. なぜなら,決定するべきパラメータがたくさんあるからです.
もしもパラメータが1つしかなかったら,最小値を求めるのは比較的簡単です. 例えば, f(w)=w2+4w+1 の値を最小にするものを求めたいとき,どのようにするでしょうか.
こういうときに強力な力を発揮するツールが微分です. 微分とは,大雑把に言えば傾きのこと. 二次関数ならその関数の傾きが0になるところが最小値となるだろう,と予測できるわけです.
上の関数を微分してみると f′(w)=2w+4 となり,この値が0になるのは w=−2 のときだから, f(w) は w=−2 の時に最小になる,と瞬時に求まるわけです.
実は,この微分するという方針,これはパラメータが沢山あっても使えます. では今回の最小二乗法の場合,何を微分すればよいのでしょうか. 決定したい変数は,多項式フィッティングの係数 w0,…,wN です. 先程,一変数の場合は「パラメータw」で微分することで 目的のパラメータの値が分かるのでした. その類推で,今回も w0 から wN までで微分すればよいのか,と想像ができます. そうなんです.しかし,N+1 個も微分するのは確実に大変ですね.
ここで導入するのが,「ベクトルで微分を行う」という方法です. が,今回は長くなったのでひとまず休憩し, 次の章からベクトルでの微分について考えていきます.