ディープラーニングが現れる以前の機械学習で一斉を風靡した学習機械と言えばSupport Vector Machine(SVM)ですね。このSVMが大活躍した背景には、線形回帰・分離の手法を非線形へ拡張するカーネル法の存在がありました。
今回はそのカーネル法について解説します。
機械学習における非線形な問題の基本的な考え方は、線形では扱えなさそうなデータに対して変換を施して、その変換先で線形な処理ができるようにすることです。
ではそのような上手い変換はいかにして獲得されるのでしょう。その変換先での空間の次元はいくつにすべきでしょう。様々な問題が浮上しますが、カーネル法では陽に変換の具体的な形を扱うことなく、内積演算(すなわちスカラー値)だけによって問題を解決します。
ニューラルネットでは上手い変換を学習によって獲得するため、高い表現能力を得る一方、学習の時点で多大なる時間を要するのが問題でした。
非線形回帰・分離の基本的な考え方
まずは線形分離の例を見てみましょう。
クラス1のデータが赤、クラス2のデータが青のときに分離直線を以下のように引けます。
はたして分離直線の位置(切片)や傾きはこれでいいのかという問題があります。パーセプトロン学習は、ともかく分離できる直線を適当に見つけ出し、SVMの場合は分離にきわどいデータ点からなるべく離れるように直線が引かれます。これらは個々の手法で詳しく学んでください。
今回着目すべきは、データ点が直線では分離できないような場合に、どのように問題を解決するかということです。こういう場合は、下図左のように2次元のデータ点(この図ではデータ点が15個なので
)が得られた場合に、これを適当な非線形変換
によってデータ点を変換してしまい、具合の良い変換であれば右図のように、クラス毎に固まった場所にデータ点が写ってくれます。よって変換先の新しい平面では線形分離ができそうです。
回帰の問題も基本的には同じで、データ点が直線上に配置されていないなというときに、データ点を変換してしまい、変換後の空間で直線を引きます。
これらの手続きをすると、変換後の空間での直線は、元の空間に戻ってきたら曲線になっているので、結果だけ見れば、もとのデータ点にたいして曲線により回帰・分類を行ったことになります。
カーネル法
カーネル関数
カーネル法にとって最も重要なのはカーネル関数と呼ばれる内積演算に相当する関数です。
カーネル関数は2つのデータ点
に対して以下で定義されます。
です。ここではデータ点を変換する都合の良い関数です。今は、そのような関数
が見つかっているものとして考えてください。カーネル法ではこのカーネル関数が後々に重要な役割を担います。
回帰問題の例
基本的な線形回帰の問題を例に見て行きましょう。
普通の重回帰の問題であれば、データに対して、重みベクトル
を使い、
によって回帰をしたいという問題です。いまは、データを適当な変換
によって変換して、その値を使って回帰をしようとしているので、
によって回帰することを考えます。
例として、いろいろな部屋のに対して
のデータが複数あるとき、これらの関係を知りたい場合に回帰を使います。つまり
というのは各
に対して、回帰線上の点
がなるべく
に近づくように決められるべきです。
つまり、
を最小化するようにを決定します。オーバーフィッティングを避けるために正則化という手法が使えますから、今回は正則化項
を用いて
を最小化します。正則化についての効用は以下の記事を参照してください。
問題を同値な別の表現へ:双対問題
をについて最小化すべく
について
を微分し、
となる
を探します。まず
は以下となります。
通常はこれをについて解いて、解を求めたいということですが、これを以下のように式変形していきます。
ここで、として、そのベクトルを
と置き、
と表現します。ここで、は
を
行目に持つ行列です。
ともかくは元々の
を最小化するために、微分して
と置いたときに出てきた式です。この
を
代入すると
となります。ただしです。
やけにがたくさん出てくるので、この行列を
と置きます(N✕N行列になっている)。
このときの
行
列の成分はカーネル関数
となっています。この
を使って
を表現し直すと
と書くことができます。
この考えのメリット
これらから、を消去してしまえば
となる。これを線形回帰のモデルに代入し直すと
と得られる。新しいデータに対する予測値は上記の式にデータを代入すればいいことになります。これのメリットは、もはや回帰式はカーネル関数によってのみ完全に表現されていることです。具体的な非線形基底関数
を取り扱う必要はなく、
という値についてのみ考えれば良くなっています。これは非線形基底関数がどれだけ次元が高かろうが、(事実上無限次元だろうが)取り扱えるということです。一旦データを違う空間に写像することで、その写像先で線形回帰をしようという発想だったのが、カーネル法では、写像先を具体的に考えられない無限次元などでも写像を直接取り扱わずにその効用を得られるのです。
識別の問題、SVMへの応用
前回の記事で、SVMへの基礎を説明しました。
サポートベクターマシンはマージン最大化という観点で、データを識別する上手い境界線(識別面)を決める手法です。
SVMの解法
のもとで
を解き、識別面
を決定することができます。上記の数式の導出は前回記事で行っています。
まずは双対問題を導くことです。非負のラグランジュ定数を導入してラグランジュ関数を
とします。と
それぞれについて微分して0と置いた式が、条件式になりそれぞれ以下のように得られます。
これをラグランジュ関数に戻すことで、以下の式の最大化問題になります。
制約条件は以下です。
これが双対表現で、最大化問題はまたしてもカーネル関数によって表現されました。これはラグランジュ定数に対する最大化問題になっており、この二次計画問題を解いて
を決めれば良いのです。
を使えば、元々の識別平面の式は
となります。結局双対問題でを決定したあとは、新しいデータ
について上記の式
の符号を調べれば識別ができるというわけです。(
は訓練データですから、実際には具体的に識別面が
の関数で決まっています)
まとめ
回帰でも識別でも、一次関数では通用しないときに、データをで非線形写像して、その写像先で線形問題にしてしまうことを考えます。しかし、様々な非線形写像を試す際にはやけに高次元な、強いては無限次元への写像を考えると便利なことも多いです。
そのような場合に実際にその写像を計算することなく、しかしその効果だけを上手にいただく方法がカーネル法です。その肝はカーネル関数というスカラー関数を考えることです。スカラー関数を考えてしまえば、事実上無限次元だろうが、計算するときには何も関係ありません。
そして、そうであるならば、わざわざ非線形写像から考えずともカーネル関数
を適当に作ってしまうところからスタートしてもいいはずです。これは非線形写像を作るよりもずっと簡単です。
具体的な理解を深めるためにはサポートベクターマシンの判定方法を手計算をして追ってみましょう。