HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

最小二乗法を例に機械学習を見る

 

 

follow us in feedly

 

最小二乗法

最小二乗法と言えば、データを一次式で表現する最もポピュラーな方法です。以下の画像のデータ点が得られたときに、このデータはある直線上に本来は乗っているべきであると考えた場合、どのような直線が妥当だと考えられるでしょうか?

黒い実線と、赤い破線、見るからに黒い実線の方がそれっぽいです。なぜならデータ点が本来直線上に乗っているものとするならば、データ点はこの直線から近い位置に現れるはずだからです。

f:id:s0sem0y:20161005040126p:plain

 

機械学習的な表現

 

最小二乗法を機械学習的に書いてみましょう。

 

手元にあるデータ点(x_i,y_i)は通常「訓練データ」と表現されます。訓練データは機械学習においては、今から得たいモデルy(x,w_0,w_1)=w_0+w_1xの模範となるものです。ですから、通常はデータ点を基準に、データ点からモデルがどれくらいズレているかを評価します。つまり、モデルのあるデータ点(x_i,y_i)からのズレは

 

e_i=y_i-y(x,w_0,w_1)

 

と表現されます。ズレは正にも負にもなりえるので、この大きさを評価するために二乗を取って、全てのデータ点における誤差の二乗和を考え

 

E(w_0,w_1)=\sum_{n=1}^{N}e_i^2=\sum_{n=1}^{N} \left(y_i-y(x,w_0,w_1)\right)^2=\sum_{n=1}^{N} \left(y_i-w_0-w_1x\right)^2

 

とします。この誤差関数を最小にするようなw_0,w_1を求め、モデルを獲得します。具体的には上記の式を、w_0で微分して0と置き、そしてw_1で微分したものを0と置くことで、2つの式が得られ、この連立方程式から2つの未知数が求まります。

通常、訓練データ(x_i,y_i)からのモデルのズレを評価する以下の式において

 

e_i=y_i-y(x,w_0,w_1)

 

y_iという値は「目標値t_n」などと表現されます。文字を変える理由は、モデルのyとの混同を避けるためだと考えればいいでしょう。

 

結局、目標値とモデルとの二乗誤差の和が最小となるようにモデルのパラメータを求めているわけで、直感的に正しそうなモデルを獲得できました。

 

モデルの正しさは?

機械学習においては、このモデルの正しさを計る方法は様々ありますが、基本的には新しいデータ(これをテストデータという)が正しく予測できるか否かを判定します。新たに獲得した多数のデータが、訓練された直線モデル付近に現れるかを調べて、あまりにおかしい場合は、データ点を更に加えて学習をし直すなどのことを考えます。

 

また今は直線で近似しましたが、新たなデータが直線上に明らかに乗らないようなケースでは、二次関数などを想定して学習のモデルそのものを変更する必要があります。

 

このようにモデルとしての形をある程度先に決めておく方法をパラメトリック法と呼びます。

 

基本的にパラメトリックなモデルを構築したら、そのモデルで表現できる形以外は絶対に表現できません(当たり前ですけど)。ですから、ただただデータを突っ込むのではなく、モデルをどのように構築しておくか(モデル選択)という部分も非常に重要な課題です。

 

予測性能の基本的な評価方法

モデルの正しさを、新たなデータの予測性能ではかるというのは基本的なことですが、モデル自体がデータに依存していることを忘れてはいけません。従って、通常は訓練データとテストデータを個別に準備するのではなく、大量のデータを予め準備しておき、その一部をテストデータとして保管し、残りのデータを訓練データとします。そしてこれを順次入れ替えることで、すべての訓練データ集合のパターンを試し、データの選び方によっての精度のブレを打ち消します(通常は加算平均を考える)。

 

f:id:s0sem0y:20161005051620p:plain

 

 

 

この方法は交差検証と言います。交差検証をした際に、ある特定のテストデータ(あるいは訓練データ)のときのみ精度が落ちる場合は、多くのデータのうちそのテストデータが、むしろデータとしての質が悪い可能性もあります(測定の際に誤差が大きく乗りすぎたなど)。

 

通常機械学習を用いるシーンは、対象に対して物理的なモデルを知らない場合です。ですから、データを集めた時点で、そのデータがまともであるかどうかもわからないケースもありますから注意が必要です。

 

機械学習の発展

非常に単純な問題を扱いましたが、機械学習の基礎はここから始まります。

このような単純な問題から出発し、より発展した話題に進むには以下のことを意識すると良いでしょう。

モデルの表現、確率モデルを用いる方法

今回見た最小二乗法は、誤差がガウス分布から生じるものとして、

 

t=y(w,x)+e

 

において、eをガウス分布で表現した場合の最尤推定に相当します。

確率変数との和で得られる変数もtも確率変数になりますから、こちらもガウス分布の確率モデルで記述しておき、あとは実際の訓練データ(目標値)t_nが現に手に入っているので、全ての訓練データが生起した場合の確率を計算し、その確率が最大となるようにパラメータを決めます(実際に手に入っているわけですから、このようなことが起こる確率は高いはず)。

この方法は最尤推定と言います。

 

つまり最小二乗法は、確率モデルからすれば誤差をガウス分布と見なした場合の最尤推定だということです。このようにある同一の手法も様々なアプローチの仕方があります。確率モデルの場合は、確率分布が得られるため、実際には手に入っていないデータですらもその分布を使って擬似的に発生させることができます。

 

 

モデルを複雑にする方法

今回は一次関数で近似しましたが、当然二次関数三次関数へと発展させる方法もあります。

 

y=w_0+w_1x+w_2x^2+...+w_nx^n

 

とすればn次関数で近似を行ったことになります。

しかしもっと一般的に\log{x}φ(x)を考えてもいいわけで、通常は

 

y=w_0+w_1φ_1(x)+w_2φ_2(x)+...+w_nφ_n(x)

 

とモデル化を行います。この際φ_n(x)=x^nと置けば上記のモデルです。

 

ベクトル表記すると、\bf φ( )=(φ_1( ),...,φ_n( ))^T\bf w=(w_1,...,w_n)^Tとして

 

y=w_0+\bf w^Tφ(x)

 

と表現できます。これは一般化線形モデルと言われます。なぜ線形モデルと言えるのかというと、今から推定するのは\bf wの方であって、これに関してはモデルは線形だからです。xに関しては非線形でも、後々、微分操作は\bf wによって行うので構いません。

また、データxは多次元でもよく\bf xとして

 

y=w_0+\bf w^Tφ(x)

 

が教科書で最もよく見る形でしょう。ダミー変数にw_0を含んでしまう方法もあります。

 

y=\bf w^Tφ(x)        \bf w^T=(w_0,w_1,...,w_n)^T , =(1,φ_1( ),...,φ_n( ))^T

 

 

 

ニューラルネット

最後はニューラルネットワークです。

ニューラルネットワークは、実際にはモデルを複雑化させたことに相当します。具体的には

 

\bf z_1=f_1(W_1^Tx)

 

\bf z_2=f_2(W_2^Tz_1)

 

y =f_3\bf(W_3^Tz_2)

 

と言った具合です。線形結合を数種類準備→非線形変換→線型結合を数種類準備→非線形変換を繰り返します。この際もはやパラメータ\bf wに対してモデルyは線形ではありません。

通常ニューラルネットはグラフィカルな表現を用います。また、新たな構造も数式ベースというよりはグラフィカルな構造の観点から提案されることのほうが多いです。従って、これは別のアプローチと捉えたほうが懸命でしょう。

 

また全体を通して、得られるモデルyも多次元でよく、ベクトル\bf yを求めるようなケースが一般的には考えられています。