久々の更新になります。
今回からしばらく、線形識別モデルについて記述していきます。
線形識別モデルは、データに対して、そのデータがどのクラスに属するかを分類する最も基本的な方法です。非線形な識別を考える上でも、基本的にはこの線形識別モデルが重要な土台になってきます。なぜかというとカーネルSVMでもニューラルネットでも、最終的には線形識別をしていると見なせるからです。
問題設定
識別とは入力ベクトルをクラスのうちの1つのクラスに割り当てる関数です。最も単純な2クラスの識別では入力ベクトルをのいずれかに割り当てます。例えば、入力ベクトルが(身長、体重、年齢、髪の長さ)というデータであるときに、そのデータを男性か女性かに割り当てるような問題です。
最も簡単な識別関数の表現は、入力ベクトルの線形関数で以下のように与えられます。
ここで、は重みベクトルと呼ばれるパラメータで、はバイアスと呼ばれるパラメータです。これらを適切に決めてやることで、データに対して識別を上手く行う関数を作りたいということです。
具体的には、で男性などと決めておけば、男性のデータに対してが正の値を持つようにを決めてやれば良いということになります。
境界と幾何学的な性質
の値が正か負かで、識別を達成する場合にはは識別をする上での境界を作ります。このとき境界上の点はとなっています(境界以外の点から負に振れるか、正に振れるかで識別をしようとしている)。
ところで線形関数ですから、もしデータが1次元ならば、境界はとある点になりますし、データが2次元ならば境界は直線になります。3次元ならば境界は平面になります。一般にデータが次元ならば境界は次元になりますね。データを分割しようと思ったときには、そうやって境界を決めなければならないのは、1~3次元のデータを想像すれば容易ですね。
今で表される境界上の異なる2点を考えます。これは境界上の点なのでを満たします。つまりも常に成り立ちます。
これは具体的に式を変形していくと
となっています。というベクトルは、境界の空間内に収まっています。境界上の異なる2点は任意に取れるので、このベクトルは結局境界上全てを張るということに注目しましょう。すなわち、上記の式は境界内を全て表現できるベクトルととの内積が0ということを言っていますから、結局重みベクトルは、境界に対していつでも直交しているということになります。
もしも境界が1次元ならば、は境界線に直交するベクトル、もしも境界が2次元ならば、境界面に直交するベクトルです。それ以上次元が増えると図として想像はできませんが、とにかく直交している(内積が0である)ということを覚えておいてください。
以後、何次元かに関わらず境界のことを「決定面」と呼びます。たとえそれが線でも「面」と言いますし、100次元で形が分からないものでも「面」と言います(普通はこれらを包含するために超平面と言います)。
再び、決定面上の点について考えます(つまりという状況)。
原点から決定面までの距離は以下で表すことができます。
これによって分かることは、決定面の原点からの距離がによって指定されているということです。具体的に2次元平面上で考えてみましょう。2次元データの決定面は
で表されます。私達がよく知る直線の式の形式(が傾きを、が切片を与える)を考えれば、
の形式にすることはいつでも可能であり、定数項のの部分が原点からの距離(あるいは切片に相当する値)を決定づける事が直感的に分かるでしょう。2次元であれば想像は容易いですが、高次元では想像は難しいです。
数式によれば何次元になろうとも、が決定面の向きを決め(に直行した決定面になる)、が原点との位置を定めているということが分かります。
次は空間上の任意の点を考えます。この任意の点を決定面上に直交射影したときの点をと表現しておけば、空間上の任意の点は
と表すことができます。要するに一旦の点を経由した後、決定面に直交するベクトルを使ってにたどり着くということです(はの決定面への直交射影ですから適当な大きさので元に戻れますね。ちなみには方向の単位ベクトルです)。
これの両辺にとの内積を取り、更にを加えてみましょう。
となります。と(x'は決定面上の点なので)を用いると、
となります。つまり、任意の点との直交距離が上記の式で表されるということです。
様々な線形識別手法の着眼点
主に上記で調べた重みベクトルの性質などを考えて識別が有利になるようにを決定します。
例えばサポートベクターマシンでは、各クラスのデータについて識別が難しそうな近くにあるデータを掻い摘んで、決定面との距離がどちらもなるべく離れるようにを決めようとします。上記で述べた幾何学的性質が分かっていれば、どうすればそのような考えでを決定できるかは簡単に分かるでしょう。結局かいつまんだデータ点と決定面との距離が
で与えられることが分かっているのですから、こいつを最大化すればいいというだけです。
実はサポートベクターマシンの出発点はたったそれだけなのです。もちろん実際には距離を最大にするだけでなく、それが正解かどうかも重要ですね(例えば決定面からの距離は遠いけど、クラスと反対側に行ってしまうようにを決定しては意味がありません)。ですからあとはそこらへんを少し修正しているだけです。また、非線形への応用は
を非線形変換Φ(x)を用いて
と変更するだけです。このときのは、変換された先でデータ点が線形識別できるように配置されているような関数であることが重要です(もちろんそんな都合の良いはすぐには求まりませんし、通常困難です。カーネル法は、この部分をなるべく簡単に取り扱えるようにした画期的な方法でした)。
パーセプトロンの場合は、具体的に適当なから初めて、データの分類に失敗したらを少しだけ変更するようにしてもう一度分類を行い、繰り返していくことでを決定します。多層パーセプトロンでは非線形変換(活性化関数と呼ばれる)を導入して、線形識別可能であるような表現を獲得しようとします。こちらではサポートベクターマシンのように非線形変換自体をあれこれ工夫するというわけではなく、非線形変換を固定しておいて、を力技で無理やり上手く調節するというイメージです。力技で上手く行くように、多層化することで非線形変換を何度も繰り返します。ですからニューラルネットでは識別関数は合成関数の形になり、の特定は非常に時間を食うようになります。ディープラーニングではの適切な初期値の見つけ方と、学習を効率的に行う方法が考案され、現在大流行していますね。
いずれにしても、大事なのは線形識別をしっかり理解して、線形識別で解ける問題にいかにして持っていくかということです。通常線形識別モデルだけで上手くいくケースは少ないので、やはり非線形変換を使って
として問題を考えていくことになります。