パターン認識と機械学習の勉強ノート【1.1 多項式フィッティング】

深層学習を学ぶシリーズ

こちらの『パターン認識と機械学習』を読んで,勉強したことをまとめていきます.

今回は,1章1.1節の多項式フィッティングについてです.

また,この記事を読む前にこちらの記事を見ておくことをおすすめします.

導入

以下の図のように,データ点(青色)が与えられたときに,その背景にある関数(緑色)を予測したいです(この関数は与えられません).

データ点に合わせて,それっぽい赤い線を引くことをフィッティングと言います.

我々がしたいことは,赤い線ができるだけ緑の線に近づくようなフィッティングを精度よく行い,新たにx座標(横軸)の値(入力データ)が与えれたときに,そのt(縦軸)の値を予測したいということです.

そして,この章の内容は,「フィッティングパラメータをどうすると,フィッティングはどうなるのか?(良くなるのか?悪くなるのか?)」ということです.

ここで行うのは関数によるフィッティングですが,そのフィッティングパラメータを学習して求めることになります.

多項式フィッティング

入力トレーニングデータとして,\mathbf x \equiv (x_1, x_2, ..., x_N)^\mathrm{T}と,それに対する正解データ(ターゲットデータ)\mathbf t \equiv (t_1, t_2, ..., t_N)^\mathrm{T}が与えられたとします.

それを青色でプロットしたものが以下になります.

さて,このデータ分布は緑のような曲線に従っていそうなので,このような曲線を見つけて,赤い線を引いていきます.

データの分布はサインカーブ(正弦波)っぽいので,サインカーブを選んで,振幅や位相,周波数をパラメータとして調整してフィッティングを行っても良さそうですが,

ここでは,サインカーブよりも色々な曲線が表現できそうな多項式でフィッティングします(サインカーブも多項式で近似できるので,やはり多項式の方が良いでしょう).

xを変数としたM次元多項式

    \[y(x, \mathbf w) = w_0 + w_1x^1 + w_2x^2 + ... + w_Mx^M\]

ここで,\mathbf wはフィッティングパラメータです.

このフィッティングパラメータを調節することで,データ点に沿ったそれっぽい関数を表現します.

評価関数

「データにどれくらい従っていそうか」「どれくらいそれっぽい関数か」というのを定量的に判断するには評価基準が必要なので,こういった問題では,以下のような評価関数というものを用意します.評価関数は目的関数損失関数とも言われたりします.

評価関数にも色々ありますが,今回は二乗誤差関数を評価関数として採用します.

評価関数

    \[E(\mathbf w) = \frac{1}{2} \sum_{n = 1}^N \{y(x_n, \mathbf w) - t_n\}^2\]

Nは,訓練データの数です.

フィッティングパラメータ\mathbf wを調節し,このE(\mathbf w)小さくなるようなy(\mathbf w)を見つけてこれば,y(\mathbf w)はそれっぽい関数である(フィッティング関数として適切)ということを意味します.

各点x_nにおいて,フィッティング関数y(x_n, \mathbf w)とテストデータt_nが近ければ評価関数E(\mathbf w)が小さくなるので,納得いただけるかと思います.

ただし,この章ではパラメータの調整の方法(最適化手法)については述べません.この章で述べるのは,フィッティングパラメータに対してフィッティング関数や評価関数がどうふるまうかということです.

過少適合と過剰適合

下図は,多項式の次元Mを0, 1, 3, 9と変化させ,フィッティングを行った結果です.

パターン認識と機械学習から引用

M = 0(定数)のときと,M = 1(直線)のときは,多項式はほとんど曲がれないため,うまくフィッティングできていません.これを過少適合と言います.

反対に,M = 9のときは8回曲がれるので,関数としての表現度は高いのですが,訓練データに適応しすぎて,背景にある緑の曲線からは遠ざかってしまっています.これを過剰適合といいます.

評価関数を小さくするように最適化してあるので,訓練データとの差が小さくなっており,最適化としては正しいのですが,我々がもとめるそれっぽい関数(緑の曲線に近いもの)ではないです.

さて,過少適合は多項式の次元を大きくし,フィッティングパラメータ\mathbf wの自由度を増やせば解決できるとして,過剰適合はどうしたら防げるでしょうか??

上の図をみると,M = 9では過剰適合になるので,M = 3に多項式の次元を下げたら確かに過剰適合は防げていますが,M = 3のときよりも良いフィッティングがしたいし,なによりM = 3を見つけるのは手間がかかります(始めから大きな次元の多項式を用意して,結果的に高次元の項を使わないとなった方が楽).

そこで,M = 9の場合でも,過剰適合が起こらないようにする方法について述べます.

過剰適合を回避する方法

正則化

機械学習には,過剰適合を抑える方法として,正則化というものがあります.

正則化するには,評価関数に正則化項を加えます.

正則化項が加わった評価関数

    \[E(\mathbf w) = \frac{1}{2} \sum_{n = 1}^N \{y(x_n, \mathbf w) - t_n\}^2 + \frac{\lambda}{2} \|\mathbf w\|^2\]

正則化の項にも色々ありますが,ここでは,L2ノルムを採用しています(ここでは,L2ノルムはどこからくるのかについては,1.2章で述べます).

\lambdaは正則化パラメータで,どれほど正則化の影響を強くするかを決めます.

見てわかるように,評価関数を最小化する際に,この正則化項には重みパラメータ\mathbf wを小さく抑えようとする働きがあります.

先ほどのM = 9のときに過剰適合となってしまった原因のひとつは,,重みパラメータ\mathbf wが大きくなりすぎていたことです

この正則化項により,重みパラメータ\mathbf wを小さく抑えることで,過剰適合を抑えようということです.

実際に,M = 9の場合でも,正則化項を加えることで過剰適合せずにフィッティングできています(下図).

データ数を増やす

過剰適合を抑える別の方法として,データの数を増やすというものがあります.

上の図ではデータ数N = 10でしたが,データ数をN = 15, 100に増やしてフィッティングを行ってみると,M = 9の場合にも以下のように過剰適合が減少していることが分かります.

パターン認識と機械学習から引用

これは,多項式の表現の限界によるものです.

M = 9だと8回しか曲がれないので,それ以上のデータ数があると,全体的にデータとの距離を縮める(先ほどの)評価関数を最小化するとき,すべてのデータとの兼ね合いで関数の形が決定され,結果としていい感じの関数でフィッティングできます.

まとめ

今回は,機械学習の基本的な例として,多項式によるフィッティングにより,もとの関数を予測するということを行いました.

また,過剰適合を防ぐ方法について述べました.

次回は,1.2節の確率理論について述べます.

コメント

タイトルとURLをコピーしました