てんぺるのぶろぐ

IT関連のこと、体験談、備忘録など。文系エンジニア、もがきます。

機械学習-学習メモ2「予測」と「最小二乗法」

学習メモ1の続きです。今回は「最小二乗法」についてまとめます。引き続き「ITエンジニアのための機械学習理論入門」を参考にしていきます。

ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

最小二乗法は「予測」のアルゴリズム

「予測」とは

「予測」のゴールは「与えられたデータがどのような関数から生み出されたか」を特定すること。そうすれば、いかなる観測点が与えられた時でも観測値を求めることができる(つまり予測できる)から。
 

関数の特定までの流れ

本書では目的変数{t}(被説明変数)と特徴変数{x}(説明変数)間に、多項式の関数関係{ \displaystyle f(x)=w_0+w_1x+w_2x^2+...w_Mx^M }があるととりあえず仮定していた。ここからやりたいことは、未知のパラメーターである①係数{w}の値を決めることと、②次数{M}の値を決めること。(①と②が決まれば、関数が特定できるから。)

実際の流れとしては、まず以下のように次数{M}の値を固定して係数{w}を決定することを繰り返します。
{M}の値を0とし、係数{w}の値を求める →関数0
{M}の値を1とし、係数{w}の値を求める →関数1
{M}の値を2とし、係数{w}の値を求める →関数2

{M}の値を{N-1}とし、係数{w}の値を求める →関数N-1
その後、それぞれの関数を比較して{M}がいくつ以上になるとオーバーフィッティング(過学習)が起きるのかを発見し、最適な次数{M}を見つけます。(汎化能力の検証)


はじめに与えられたデータ(トレーニングセットと呼ばれる)をできるだけ正確に再現する多項式(関数)を特定する必要があるが、「何をもって正確とするか」の思想によって、そのアルゴリズムが分かれる。主な「予測」のアルゴリズムとして1.最小二乗法、2.最尤推定法、3.ベイズ推定法の3つが存在する。
 

最小二乗法について

最小二乗法の考え方

{ \displaystyle f(x)=w_0+w_1x+w_2x^2+...w_Mx^M }で計算される{t}と実際の観測値{t_n}の差の二乗を合計したものを「誤差{E_D}」と定義し、その「誤差{E_D}」が最小になるように{w}を決定する、という方法。モデルから計算される値と実際の値とで、差が少ないほうがより正確なモデルに決まってるじゃん、という考え方からきている。割と馴染みやすい考え方だと思う。

差を二乗する理由は負の値を避けるためです。誤差の合計を求める際に、正の値と負の値が混在していると合計する際に打ち消しあって正しく誤差の和が求まりません。そのため二乗することで負の影響を排除しています。本来であれば絶対値をとるのがベストですが、絶対値は数式として扱いづらいのでそれは避けています。


オーバーフィッティングの検証(最適な次数{M}探し)では、トレーニングセットとは別に用意したテストセットの場合で、各関数({M=0~N-1})の平方根平均二乗誤差{E_{RMS}}の数値を比較し、{E_{RMS}}がこれ以上小さくならないという次数{M}を見つける。

数学的手続き

・モデル

 { \displaystyle f(x) = w_0+w_1x+w_2x^2+...w_Mx^M = \sum_{m=0}^{M}w_mx^m  \tag{1} }

 

・誤差{E_D}

本来であれば

{ \displaystyle {E} = (f(x_1)-t_1)^2 + (f(x_2)-t_2)^2 + ... + (f(x_n)-t_n)^2  \tag{2} }
{ \displaystyle = \sum_{n=1}^{N}(f(x_n)-t_n)^2 = \sum_{n=1}^{N}(\sum_{m=0}^{M}w_mx^m_n -t_n)^2  \tag{2'} }

となるが、この後の計算の都合上、便宜的にこれを1/2倍した

{ {E_D} = \displaystyle \frac{1}{2} \sum_{n=1}^{N}(\sum_{m=0}^{M}w_mx^m_n -t_n)^2  \tag{3} }

を誤差と定義する。

 

・誤差{E_D}が最小となる条件

{ \displaystyle \frac{\partial E_D}{\partial w_m} = 0 \hspace{10pt} (m=0,1,...,M) \tag{4} }

(3)式を{ w }の関数とみなしているところがポイントです。

 

・誤差{E_D}が最小となる条件下での{w}の値

{ \displaystyle \frac{\partial E_D}{\partial w_m} = 0 \hspace{10pt} (m=0,1,...,M)  \tag{5} }

より、

{ \displaystyle \sum_{n=1}^{N}(\sum_{m'=0}^{M}w_{m'}x^{m'}_n-t_n)x^m_n = 0 \hspace{10pt} (m=0,1,...,M)  \tag{6} }

これを変形して、

{ \displaystyle \sum_{m'=0}^{M}w_{m'} \sum_{n=1}^{N}x^{m'}_{n}x^m_n - \sum_{n=1}^{N}t_{n}x^m_n = 0 \hspace{10pt} (m=0,1,...,M) \tag{7} }

ここで、上の式を

{W = \left( \begin{array}{c} w_1 \\ w_2 \\ \vdots \\ w_n \end{array} \right)}  {T = \left( \begin{array}{c} t_1 \\ t_2 \\ \vdots \\ t_n \end{array} \right)} {X = \left( \begin{array}{cccc} x_{1}^{0}&x_{1}^{1}&\ldots&x_{1}^{M} \\x_{2}^{0}&x_{2}^{1}&\ldots&x_{2}^{M} \\\vdots& \vdots&\ddots&\vdots \\x_{N}^{0}&x_{N}^{1}&\ldots&x_{N}^{M} \end{array} \right)}

を用いてベクトルと行列で表現しなおすと、

{ \displaystyle  W^{\mathrm{T}} X^{\mathrm{T}} X - T^{\mathrm{T}} X = 0 \tag{8} }

となり、転置をとって変形すると、

{ \displaystyle  W = (X^{\mathrm{T}} X)^{-1} X^{\mathrm{T}} T \tag{9} }

となり、{w}を導く式が完成した。


(8)式→(9)式の変換において、{ X^{\mathrm{T}} X }逆行列を持つかどうかを確かめる必要があります

そこで一旦{ E_{D} }の2階偏微分係数を表すヘッセ行列{ H_{mm'} }を考えます。

すると、
{ \displaystyle H_{mm'} = \frac{ \partial^{2} E_{D} }{ \partial w_{m} \partial w_{m'} } = \sum_{n=1}^{N} x_{n}^{m'} x_{n}^{m}  (m,m'=0,1,...,M) }
となり、ヘッセ行列が、逆行列をとった{ X^{\mathrm{T}} X }と一致することがわかります。つまり、{ \displaystyle H = X^{\mathrm{T}} X }

ここでヘッセ行列が正定値であることを確かめます。なぜなら正定値な行列は逆行列をもつことが証明できるからです。

正定値というのは、任意のベクトル{u \neq 0}に対して、{ u^{\mathrm{T}} H u > 0 }が成り立つことを言います。

ヘッセ行列は{M+1 \leq N}のとき、
{ \displaystyle u^{\mathrm{T}} H u = u^{\mathrm{T}} X^{\mathrm{T}} X u = ||Xu||^2 >0 }
となります。

ゆえにヘッセ行列{ \displaystyle H = X^{\mathrm{T}} X }は正定値となり、逆行列をもつと分かります。

 

ヘッセ行列が突然登場した理由
いまいち分からないです。どなたか教えてください。

{ X^{\mathrm{T}} X }逆行列をもつかどうかを調べるだけなら、{ X^{\mathrm{T}} X }が正定値であることが示せればよいはずです。にもかかわらず、{ X^{\mathrm{T}} X }とヘッセ行列が一致することまで確認しています。なぜ。

推測ですが、思い返せばそもそも多変数関数{E_D}が最小となる{w}が一意に決まるのかどうかはわからないし確認していないはずです。したがって、そのための条件が、(5)式の「その点で偏導関数の値が全て0」かつ、上で確認した「ヘッセ行列が正定値」ということであり、突然ヘッセ行列が登場した、ということでしょうか。

つまり、ヘッセ行列が正定値かどうかを確かめる手続きは本来最初に行うべきだが、今回は後回しにした、ということでしょうか。

ヘッセ行列について参考にしたサイトを載せておきます。多変数関数の極値判定とヘッセ行列 | 高校数学の美しい物語

※11/21追記 「ITエンジニアのための機械学習理論入門」のp82にヘッセ行列について書かれていました。ヘッセ行列が登場した理由はおそらく推測のとおりみたいですが、完全に理解しきれていないのでもう少しよく読んで確認してみます。

パラメトリックモデルの3ステップ

今までの手続きを整理すると、これらはパラメトリックモデルと呼ばれる手法の3ステップで整理できる。 


パラメトリックモデルの3ステップ


最小二乗法の場合


(1) パラメーターを含むモデルをたてる


{ \displaystyle f(x)=w_0+w_1x+w_2x^2+...w_Mx^M }


(2) パラメーターを評価する基準を定める


誤差が最小になれば良い


(3) 最良の評価を与えるパラメーターを決定する


誤差が最小の時の{w}を求める

このステップは他の機械学習でも適用される。

今回はここまで

感想

今回勉強していて思ったこと、「行列すっごい便利」。
我ながらアホ丸出しの感想ですね。最小二乗法の概念自体は、大学の統計学の授業でも習っていたので理解しやすかったです。しかし、文系なので数式のところはかなり苦労しながら読み進めました。とりわけ行列については結構忘れていたので、逐一「逆行列ってなんだっけ、演算のルールは、、、」なんて調べながら本を読み進めていました。それにしても行列のおかげで数式がすっきりして操作しやすくなるんですね~すごい。しかしヘッセ行列登場で完全にノックアウトでした。精進します。

 

疑問点

1.ヘッセ行列について。コラム欄で書いた通りです。なぜ登場したのかいまいち不明です。

12/3追記 この疑問はおそらく解消。
temperu.hatenablog.com

 

次回は予測のアルゴリズムの続きで、「最尤推定法」についてまとめようと思います。

終わり。