"機械学習","信号解析","ディープラーニング"の勉強

読者です 読者をやめる 読者になる 読者になる

"機械学習","信号解析","ディープラーニング"の勉強

"機械学習","信号解析","ディープラーニング"について、それぞれ勉強しながらブログにまとめていきます。テーマは気分によってバラバラかもしれません。

線形識別モデルの基本

人工知能 人工知能-機械学習

久々の更新になります。

今回からしばらく、線形識別モデルについて記述していきます。

線形識別モデルは、データに対して、そのデータがどのクラスに属するかを分類する最も基本的な方法です。非線形な識別を考える上でも、基本的にはこの線形識別モデルが重要な土台になってきます。なぜかというとカーネルSVMでもニューラルネットでも、最終的には線形識別をしていると見なせるからです。

 

 

 問題設定

識別とは入力ベクトルxKクラスのうちの1つのクラスC_kに割り当てる関数です。最も単純な2クラスの識別では入力ベクトルxC_1,C_2のいずれかに割り当てます。例えば、入力ベクトルが(身長、体重、年齢、髪の長さ)というデータであるときに、そのデータを男性か女性かに割り当てるような問題です。

 

最も簡単な識別関数の表現は、入力ベクトルの線形関数で以下のように与えられます。

 

y(x)=w^Tx+w_o

 

ここで、wは重みベクトルと呼ばれるパラメータで、w_0はバイアスと呼ばれるパラメータです。これらを適切に決めてやることで、データに対して識別を上手く行う関数を作りたいということです。

具体的には、y(x)≧0で男性などと決めておけば、男性のデータに対してyが正の値を持つようにw,w_0を決めてやれば良いということになります。

 

境界と幾何学的な性質

yの値が正か負かで、識別を達成する場合にはy=w^Tx+w_0は識別をする上での境界を作ります。このとき境界上の点xy(x)=0となっています(境界以外の点xから負に振れるか、正に振れるかで識別をしようとしている)。

ところで線形関数ですから、もしデータが1次元ならば、境界はとある点になりますし、データが2次元ならば境界は直線になります。3次元ならば境界は平面になります。一般にデータがD次元ならば境界はD-1次元になりますね。データを分割しようと思ったときには、そうやって境界を決めなければならないのは、1~3次元のデータを想像すれば容易ですね。

 

y(x)で表される境界上の異なる2点x_A,x_Bを考えます。これは境界上の点なのでy(x_A)=y(x_B)=0を満たします。つまりy(x_A)-y(x_B)=0も常に成り立ちます。

これは具体的に式を変形していくと

  

y(x_A)-y(x_B)=(w^Tx_A+w_0)-(w^Tx_B+w_0)=w^Tx_A-w^Tx_B=w^T(x_A-x_B)=0

 

 

となっています。x_A-x_Bというベクトルは、境界の空間内に収まっています。境界上の異なる2点は任意に取れるので、このベクトルは結局境界上全てを張るということに注目しましょう。すなわち、上記の式は境界内を全て表現できるベクトルx_A-x_Bwとの内積が0ということを言っていますから、結局重みベクトルwは、境界に対していつでも直交しているということになります。

もしも境界が1次元ならば、wは境界線に直交するベクトル、もしも境界が2次元ならば、境界面に直交するベクトルです。それ以上次元が増えると図として想像はできませんが、とにかく直交している(内積が0である)ということを覚えておいてください。

 

以後、何次元かに関わらず境界のことを「決定面」と呼びます。たとえそれが線でも「面」と言いますし、100次元で形が分からないものでも「面」と言います(普通はこれらを包含するために超平面と言います)。

 

再び、決定面上の点xについて考えます(つまりy(x)=w^Tx+w_0=0という状況)。

原点から決定面までの距離は以下で表すことができます。

 

\frac{w^Tx}{||w||}=-\frac{w_0}{||w||}

 

これによって分かることは、決定面の原点からの距離がw_0によって指定されているということです。

2次元データを分離する際に、直線で境界線を決めようという場合には、y=wx+w_0という1次関数は、wが傾きを、w_0が切片を与えるわけですから当たり前と言えば当たり前ですね。要するに何次元になろうとも、wが決定面の向きを決め(wに直行した決定面になる)、w_0が原点との位置を定めているということです。

 

次は空間上の任意の点xを考えます。この任意の点を決定面上に直交射影したときの点をx'と表現しておけば、空間上の任意の点x

 

x=x'+r\frac{w}{||w||}

 

と表すことができます。要するに一旦x'の点を経由した後、決定面に直交するベクトルwを使ってxにたどり着くということです(x'xの決定面への直交射影ですから適当な大きさのwで元に戻れますね。ちなみに\frac{w}{||w||}w方向の単位ベクトルです)。

これの両辺にwとの内積を取り、更にw_0を加えてみましょう。

 

w^Tx+w_0=w^Tx'+rw^T\frac{w}{||w||}+w_0

 

となります。y(x)=w^Tx+w_0y(x')=w^Tx'+w_0=0(x'は決定面上の点なので)を用いると、

 

 

y(x)=w^Tr\frac{w}{||w||}

y(x)=r||w|| 

r=\frac{y(x)}{||w||}

 

となります。つまり、任意の点xとの直交距離が上記の式で表されるということです。

 

様々な線形識別手法の着眼点

主に上記で調べた重みベクトルwの性質などを考えて識別が有利になるようにwを決定します。

例えばサポートベクターマシンでは、各クラスのデータについて識別が難しそうな近くにあるデータを掻い摘んで、決定面との距離がどちらもなるべく離れるようにwを決めようとします。上記で述べた幾何学的性質が分かっていれば、どうすればそのような考えでwを決定できるかは簡単に分かるでしょう。結局かいつまんだデータ点xと決定面との距離が

 

r=\frac{y(x)}{||w||}

 

で与えられることが分かっているのですから、こいつを最大化すればいいというだけです。

実はサポートベクターマシンの出発点はたったそれだけなのです。もちろん実際には距離を最大にするだけでなく、それが正解かどうかも重要ですね(例えば決定面からの距離は遠いけど、クラスと反対側に行ってしまうようにwを決定しては意味がありません)。ですからあとはそこらへんを少し修正しているだけです。また、非線形への応用は

 

y(x)=w^Tx+w_0

 

を非線形変換Φ(x)を用いて

 

y(x)=w^TΦ(x)+w_0

 

と変更するだけです。このときのΦ(x)は、変換された先でデータ点が線形識別できるように配置されているような関数であることが重要です(もちろんそんな都合の良いΦはすぐには求まりませんし、通常困難です。カーネル法は、この部分をなるべく簡単に取り扱えるようにした画期的な方法でした)。

 

パーセプトロンの場合は、具体的に適当なwから初めて、データの分類に失敗したらwを少しだけ変更するようにしてもう一度分類を行い、繰り返していくことでwを決定します。多層パーセプトロンでは非線形変換(活性化関数と呼ばれる)を導入して、線形識別可能であるような表現を獲得しようとします。こちらではサポートベクターマシンのように非線形変換自体をあれこれ工夫するというわけではなく、非線形変換を固定しておいて、wを力技で無理やり上手く調節するというイメージです。力技で上手く行くように、多層化することで非線形変換を何度も繰り返します。ですからニューラルネットでは識別関数は合成関数の形になり、wの特定は非常に時間を食うようになります。ディープラーニングではwの適切な初期値の見つけ方と、学習を効率的に行う方法が考案され、現在大流行していますね。

 

 

いずれにしても、大事なのは線形識別をしっかり理解して、線形識別で解ける問題にいかにして持っていくかということです。通常線形識別モデルだけで上手くいくケースは少ないので、やはり非線形変換Φ(x)を使って

 

y(x)=w^TΦ(x)+w_0

 

として問題を考えていくことになります。

 

基本を学んだあとは

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com