サポートベクターマシン(SVM)

トップページ研究分野と周辺ニューラルネットワーク

サポートベクターマシン(SVM)は、1995年頃にAT&TのV.Vapnikが発表したパターン識別用の教師あり機械学習方法であり、局所解収束の問題が無い長所がある。
「マージン最大化」というアイデア等で汎化能力も高め、現在知られている方法としては、最も優秀なパターン識別能力を持つとされている。
また、カーネル・トリックという魔法のような巧妙な方法で、線形分離不可能な場合でも適用可能になった事で応用範囲が格段に広がり、近年研究が盛んになっている。
しかし、データを2つのグループに分類する問題には優れているが、多クラスの分類にそのまま適用出来ず、計算量が多い、カーネル関数の選択の基準も無い等の課題も指摘され、一概に誤差逆伝播法等と比較して優れていると言い切れるものでもない。
SVMは厳密にはニューラルネットワークではないが、中間層から出力層への結合係数に該当するものを計算し、ニューラルネットワークと関連付けられる場合も多い。

2クラスのパターン識別

例えば幾つかの食用キノコと毒キノコについて、其々の形状、色彩等をシステムに入力し、同時に食用か毒かのデータも入力する場合を考える。
図で、青印が食用キノコ、赤印が毒キノコとする。X軸は何らかの方法で形状を一つの値(スカラー値)に数値化したものとし、Y軸は同様に色彩を数値化したものとする。
勿論、キノコの特徴パラメータは、形状・色彩だけではないが、ここでは簡単に2種類の2次元のデータを入力するものとする。
食用キノコのデータには、それが食用である事を示す1の値を付け(1の値が付く学習データを正例という)、毒キノコには-1の値を付ける(同様に負例という)とする。
パターン識別学習機械は、正負の与えられた学習データを元に図のy=ax+bのような直線を引く。そして、学習データでないデータ(正負が教えられないデータ。ここでは形状と色彩だけ)が入力された場合に、引かれた直線に基づき「食用キノコか毒キノコか」を答える事を目的とする。

マージン最大化

最急降下法に基づく誤差逆伝播法等の場合、少しずつニューラルネットワークの状態を変化させ、学習データを正しく識別出来たところで学習を止めてしまう。
従って、場合によっては左図のように、クラスの端のギリギリの所に線を引いてしまう。
これでは、学習データ以外の判別すべきデータが与えられた場合、図のように判別に失敗する可能性が高い。正例と負例を分ける境界線は無数に引けるが、最も適切な線を選びたい。

SVMでは、右図のように、2つのグループ間の最も距離の離れた箇所(最大マージン)を見つけ出し、その真ん中に識別の線を引く。
図の例では、オレンジ色の線より、緑色の線の方が両者を隔てる幅が広いため、適切な線と言える。
学習データによる識別線によって、多くの未学習データの判別が可能になる事を「汎化能力」という。最大マージンの真ん中に引いた線が、最も汎化能力が高い事が期待出来る。

正例・負例の不等式による表現

最大マージンに基づく識別線を引くために、与えられたデータからどのような方程式が立てられるだろうか。
識別線が何処を通るかは分からないが、何処かに最大マージンを作る正例、負例の其々のグループの端っこのデータ(この方法を支えるベクトルなので、サポートベクターという)が存在すると仮定する。
サポートベクターを通る二本の線を仮にax+by+c=1、ax+by+c=-1と置いてみる(両者は平行とするので係数は同じ。-1、1は係数を調整する事で設定出来る)。
上記の式を其々y=f(x)の形に書き直し、y≦f(x)、y≧f(x)とすると、正例と負例のデータの存在範囲が分かる(理由:「等式・不等式」のページ)。
正例のデータは全てax+by+c≦1の範囲内に、負例のデータは全てax+by+c≧-1の範囲内に存在する(正負を逆に割り振っても、符号の解釈を変えるだけなので同じ事になる)。

ここで、識別線を引くために必要な条件となる不等式が二つ得られたが、これを一つに纏める事にする。
正例の場合は不等式に1を掛け(そのまま)、負例の場合には-1を掛ける((-1)(ax+by+c)≧-1になる)。
正例か負例かを表す変数t(t=1、またはt=-1)を新たに用意すると、t(ax+by+c)≦1という一つの不等式に纏められる。

マージン最大の識別線の求め方

正例、負例の其々のサポートベクターから識別線に下ろした垂線の距離(d)は、下記の公式(証明は「垂線の長さ」のページ)に代入すると、分子はいずれも1になる(=1又は=-1となる線に乗っているから)。

従って、dの長さは以下のようになる。

結局、学習データの全てについて、t(ax+by+c)≦1の条件を満たしながら、dの分母が最小になるa,b,cを求める事で、最大マージンに基づく識別線の位置を決定出来る。
仮に学習データが4つしかなく、特徴を示す変数はx、yの2次元とした場合、条件はt1(ax1+by1+c)≦1、t2(ax2+by2+c)≦1、t3(ax3+by3+c)≦1、t4(ax4+by4+c)≦1の4つで、aの2乗+bの2乗の最小値を与えるa,b,cを求める問題となる。
条件は纏めてti(axi+byi+c)≦1 i=1,2,3,4等と表記する場合も多い。

ラグランジュの未定乗数(係数)法

例えば「周囲が1mで、面積が最大になる長方形の縦横の長さを求めよ」という問題は、縦をx、横をyとすると、2(x+y)=1の制約の下でxyが最大となるxとyを求める。
このような制約付最適化問題では、y=f(x)の形(yに関する陽関数)に出来れば、f(x)をyに代入して変数の数を減らし、答えを求めて行く事も出来る。
しかし、y=f(x)の形にすると煩雑になったりする場合も多い。そのような時に便利な方法として、有名なラグランジュの未定乗数(係数)法が知られている。
この場合、f(x,y)=xyを、g(x,y)=2(x+y)=1の制約の下で最大化する問題だから、まずg(x,y)=0の形にしてから、L(x,y,λ)=f(x,y)+λg(x,y)=xy+λ(2(x+y)-1)と置く(λ≠0)。
変数を増やしてしまうのだが、Lをx、y、λの其々について偏微分したものを=0と置き、この場合は三つの連立方程式を解けば答えを求める事が出来る。

これを解くと、x=y=1/4、λ=-1/2となって、正方形のときに最も面積が大きい事が分かる。
ラグランジュの未定乗数法は、制約式が複数在ってもよい。例えば2変数で制約式が2つの場合は、以下のようになり、λが2つ出来、4つの変数による其々の偏微分で得られた連立方程式を解く事になる。勿論、制約式が3つ以上であってもよい。

ここでf(x,y)は最大化又は最小化したいx,yを含む何らかの関数、gi(x,y)はx,yを含む制約式の関数でgi(x,y)=0の形にしておく必要がある。fとg1,g2は全て違う関数でもよい。

双対問題への変換

最大マージンに基づく識別線を決定するパラメータを求める問題は、変数はxとyの2つ、学習データ数をNとすると、ti(axi+byi+c)≦1(i=1~N)の制約条件の下で、aの2乗+bの2乗を最小化するa,b,cを求める制約付最小化問題だった。
上記のラグランジュの未定乗数法は等式条件なので、これを不等式条件に適用して、以下の関係を利用して、式の変換を行なう。

ここでminの下にa,b,cと書いてあるのは、L(a,b,c..)を最小化するa,b,cを表す。s.t.はsubject toで、その右に書いてある数式の条件に従う事を示す(f(x,y) s.t.g(x,y)=0であれば、g(x,y)=0の条件の下でf(x,y)を計算するという意味になる。)。φはLと同様に、一つの関数を示す記号として用いている。
上記は、主問題に対する双対問題と呼ばれる関係で、場合によっては変数を減らしたり、計算を簡単にする事が出来る。双対問題の関数の最大値を与えるμのセットを求めれば、主問題の最小値を与えるa,b,cも求まる事が保証されている(証明は省略)。
最も簡単に、学習データを2つとして、主問題を作り、上記の関数Lを作ってみる。但し、aの2乗+bの2乗は計算の利便上、1/2を掛ける事とする。
ti(axi+byi+c)≦1を変形して、ti(axi+byi+c)-1≦0とする。

最大化すべき双対問題の関数を作るため、Lをa,b,cについて最小化する。a,b,cの其々で偏微分して=0と置く。

tiはi番目の訓練データの正負、xi、yiもi番目の訓練データのx座標、y座標なので、値は既に分かっている。
従って、双対問題の関数の最大値を与えるμiが分かれば、aとbは求まる。双対問題の関数を作るため、偏微分で得られた条件を全てLに代入する。

結局、双対問題は以下のようになる。最初の条件式は、主問題をcで偏微分した際に得られた式に基づいている。

双対問題の解から識別線を決定する

双対問題の関数の最大化は、凸二次計画問題の解法である内点法等で求める事が出来るが、計算量が多く、様々な高速化アルゴリズムが開発されている。
或いは、スピード重視ならば、制約条件を考慮しながら、タブー探索法等の進化型計算も使えるだろう。
μのセットが求まれば、a,b等はすぐ求まり、Y軸との切片であるcは、或るサポートベクターのX座標をxs、Y座標をysとすると、axs+bys+c=1(又は=-1)から求められる。
cが求まる前にサポートベクターが分かる理由は、μi>0(≠0)に対応するi番目の学習データがサポートベクターだからだ。
係数a、bを求める式から明らかなように、μi=0の場合は、係数の決定には(0になるので)関与していない。これらはサポートベクターではない。

N次元データへの拡張

これまで、学習データはx,yの2次元の場合のみを考えて来たが、実際には多次元である場合が多い。
3番目の次元をzとし、係数をa,b,c、切片をdとする等、変数を増やしていけばよいが、添え字を付けて、x軸をx1、y軸をx2、z軸をx3、N次目をxnと表現する事も出来る。
この場合、学習データの番号と二つの添え字を持つ事になる。
a,b等の係数も、各次元に対応してw1,w2,...wn等と表記する場合も多い。(x1,x2,...xn)、(w1,w2,...wn)はベクトルなので、これを一つの大文字の太字でX=(x1,x2,...xn)、W=(w1,w2,...wn)と書いている解説が多い。
マージン幅を決めるaの2乗+bの2乗のところは、x1の2乗+x2の2乗+...+xnの2乗となる。その平方根を(ユークリッド)ノルムといい、ベクトルの記号を挟んで||W||と書く(縦二重線で挟む)のが一般的となっている。
xixj等と、同じ次元同士を掛けて足しているところはベクトルの内積で、X^T(Xの転置行列)とXの積で表される。
勿論、学習データ数がNの場合は、2と書いてあるところをNに置き換える。学習データ数、次元数に応じて適宜、上記の該当する箇所を書き換える事になる。