デジタル版(電子版)』のサービス開始を記念して、特別に誰でも閲覧できるようにしています。分野ではカーネル法と呼ばれる手法が広く使われている。Machine(SVM)は、このカーネル法を利用することで非線形な問題を扱えるということで注目された。カーネル法は、2つの要素x1,x2∈X間の"近さ"を定義したカーネル関数K(x1,x2)を利用する。カーネル関数は2つの値が似ているほど大きな値を取り、離れているほど小さい値を取るような関数である。ベクトル間の内積<x1,x2>はカーネル関数の1つである。使われるRBFカーネルはパラメータσ>0を伴って次のように定義される。これは、x1とx2が全く同じ値であれば1、違う値(特に≫σ)の時、ほぼ0となるような関数である。自然言語処理などスパースなデータを扱う場合、多項式カーネルなどが利用される。カーネル関数は何でもよいわけではなく、半正定値関数であることが求められる。次の条件を満たす場合に半正定値関数と呼ぶ。要素をある写像φで別の空間に飛ばした上で、そこで内積を取っているようにみることができる。以降では対象の要素Xとして実数ベクトルRpを考えるが、カーネル関数が定義さえできれば、文字列やグラフといった数値ではない要素も扱うことができる。非線形問題を線形問題で扱えるようにするカーネル法の優れた点は非線形の問題を線形の問題の枠組みの中で扱える点である。これを説明するために、少し長くなるが、入力x∈Rpから出力y∈{−1,1}を推定する二値分類の問題を考えてみる。この二値分類の推定に線形識別器を使う。線形識別器のパラメータの重みベクトルをw∈Rp、バイアスをb∈Rとした時、線形識別器f(x;w,b)はのように定義される。線形識別器は空間を、wを法線、切片がbであるような超平面で2つに分割し、与えられた点がその表側か、裏側かで二値分類していると考えられる。学習データ{(xi,yi)}に対し、それらをうまく当てられるかを示す損失関数l(x,y,f(x;w,b))を定義する。損失関数は学習データをうまく当てられている場合は0、当てられない場合は大きい値を返すような関数である。二値分類でよく使われるヒンジ損失関数はと定義される。この損失関数の和を小さくするようなパラメータを求めることで学習を行う。パラメータの正則化として、重みベクトルのL2ノルム||w||2/2を加えた次の目的関数を考える。このとき、損失関数が凸関数であれば、L2ノルムは凸関数であるため、それらの和であるLについても凸関数となる。凸関数は入力に対する勾配が0の時に最小値を取る。Lの重みベクトルwについての勾配が0になる条件を調べると、次のようになる。l'(xi,yi,w,b)はlのwに対する勾配である。Lを最小化する最適なパラメータをw*、b*とし、αi=−l'(xi,yi,w*,b*)とおくと、となって、最適な重みベクトルw*は学習データの重み付き線形和として表せることが分かる。この表現を、最初の線形識別器の式に代入すると、と表されて、線形識別器は与えられたデータと、学習データのそれぞれとの内積の重み付き和として定義できることが分かる。一般に、学習の目的関数がパラメータのL2ノルムを含み、かつ損失関数の中でパラメータwと入力xが内積<w,x>の形で出現する場合に、最適な重みベクトルはこのような内積の重み付き和として表現できる。Boostingなど広い学習器がこれに所属する。RBFカーネルは複雑な分類曲面を形成ようやくカーネル法を説明する準備が整った。この最適な線形識別器の表現(ii)の内積部分<xi,x>をカーネル関数K(xi,x)に置き換えてみよう。これは何をしていることになるか。前半で説明したように、カーネル関数は元の入力xを別の空間上の点φ(x)に変換し、その上で内積を取っているようにみなすことができる。内積の計算部分をカーネル関数に置き換えるだけで、あたかもφ(x)の空間で線形識別問題を考えていることになる。元の空間では線形では分類できなかった問題もカーネル関数が定義する空間中では線形に分類可能にでき、その空間上で分類できる。RBFカーネルの場合、φ(x)は無限次元であり、その無限次元上で線形識別器を使っていることに対応する。それを元の空間でみれば、近いものはより近く、遠いものはより遠くにしたような歪んだ空間に対応する。カーネルが対応する空間での超平面は元の空間では非常に複雑な分類曲面に対応する。カーネル関数の計算は高次元に展開して内積を明示的に求めるよりもずっと高速に求めることができる。RBFカーネルは無限次元間の内積であるにもかかわらず、その値はベクトル間の四則演算とexpの計算だけで求められる。これを、カーネルトリックと呼ぶ。遅かったカーネル法を一変させたRFFカーネル法は強力であり、SVMをはじめとしたカーネル法は一時期、機械学習の世界を席巻した。一方で、当時のカーネル法は計算量が大きいという致命的な問題を抱えていた。学習事例数がNの時、カーネル法を使った手法の学習時の計算量はO(N3)(オンライン学習やスパース化など工夫をしてもO(N2))であり、その利用時の計算量も(iii)の式からわかる通りO(N)時間かかりる。機械学習は学習事例が多いほど強力であり、現在はN=106~109が使える時代であるから、カーネル法の計算量は大きな問題となり、「カーネル法は精度が良いが遅く、大規模データには使えない」とこれまで認知されていた。Features)を使ったカーネル法の高速化手法である1)。RFFはカーネル関数がK(x1,x2)=φ(x1−x2)のように、差で表現される場合に使える方法で、先ほどのRBFカーネルなどがそれに当たる。そのフーリエ変換は、次のように表せることが知られている。ここで、p(ω)はRBFカーネルの場合は、それぞれの成分が正規分布N(0,s2)に従うことが分かっている。この積分値をp(ω)に従ってωをm個サンプリングし、モンテカルロ近似する。ここでは、cos(α−β)=cos(α)cos(β)+sin(α)sin(β)を使った。カーネル関数はランダムに選んだフーリエ特徴の内積で近似できる。このサンプリング数mは大きくなくてもカーネル値の近似が精度よくできることが分かっている2)。特徴ベクトルを陽に表せられるため、このRFFを使ったモデルは従来の線形モデルと同様の計算コストですみ、データ数Nに対してO(N)の計算量で学習し、O(1)時間で関数評価をすることが可能である。ニューラルネットでカーネル関数を学習する研究もこの変換が何をしているかの直感的な説明をしよう。ωは周波数に対応しており、x1とx2が近い値であればωが大きい値(高周波数)になったとしても、ωxi(i=1,2)の値は近い値をとり、結果として対応する特徴値の符号は同期し、それらの積は正の値を取る。x1とx2が違う場合、周波数が大きくなると、ωxiの値は大きく異なる。その特徴値の正負はほぼランダムになり、期待値は0となる。結果として、x1とx2が近い値であれば1に近い値となり、そこから外れると急速に0に近づく。この乱択化特徴量の計算を高速にするために、それぞれの特徴値を独立に計算するのではなく、構造化された計算を使うことで、元の特徴次元数が多くても高速に計算できる手法も登場している3)。他のカーネル関数でも同じようなアイディアが適用できるか、またカーネル関数のパラメータについての勾配も計算することでニューラルネットワークと組み合わせてカーネル関数自体を学習するような研究も始まっている。した改善から、カーネル法は今やデータ数に対して線形の計算量で求めることができ、大規模なデータにも適用できるようになった。Infrastructureを共同創業。日経Robotics記事は執筆時の情報に基づいており、現在では異なる場合があります。プレイヤーなど各サービスの全貌、業界別の参入機会・可能性などを解説。世界最大のファウンドリーが日本で求人エレキ世界最大のファウンドリーが日本で求人あらゆるプロセスで顧客ニーズに対応セキュリティも万全な新IoT向けマイコン毎月更新。Reserved.このページに掲載されている記事・写真・図表などの無断転載を禁じます。掲載している情報は、記事執筆時点のものです。