2012年10月28日日曜日

データの無相関化

 特徴抽出処理で、もう一つやっておくべき重要なことがあります。それは、データの無相関化です。詳細は後の主成分分析のところで説明しますが、ここで簡単に述べておきます。特徴を増やしていくと、中には、似たような性質のものが混じってしまうことがあります。例えば、図1のように、2次元特徴空間上にデータが分布していたとします。主な傾向として、特徴軸$x_1$(横軸)の値が大きくなると、特徴軸$x_2$(縦軸)の値も大きくなっています。これを、相関があるといいます。 図1:相関がある特徴空間

 特徴間に相関があれば、識別のときには片方の特徴があればよく、もう片方の特徴は無駄でしょう。そこで、相関のある特徴を取り除く処理を施します。図2のように、データの分布が広がっている方向に$u_1$軸を設け、この$u_1$軸上にデータを射影します。$u_1$軸を中心に考えても、データのばらつき具合はあまり変化しません。特徴空間がこの$u_1$軸だけで済めば、特徴空間の次元が2次元から1次元に減ったことになります。では、この$u_1$軸はどのように決めればよいでしょうか。実は、データの分散が最大になる方向に、この$u_1$軸を取ることになるのですが、詳細は後の主成分分析のところで述べると致しましょう。 図2:1次元空間への射影

2012年10月27日土曜日

データの正規化

 特徴抽出処理によって、入力パターンに対する特徴が取得されます。つまり、特徴ベクトルが得られます。特徴ベクトルの各成分は通常、実数値を取り、異なる単位で計測されたものです。つまり、その単位は長さmであったり、重さkgであったり、時間秒であったり、さまざまです。実は、この単位、つまり、スケールを変えただけで、特徴空間のパターンの分布が一変してしまいます。
 今、2次元特徴ベクトルが${\mathbb x_a}$、${\mathbb x_b}$、${\mathbb x_c}$、${\mathbb x_d}$だったとして、図1(a)の特徴空間上では${\mathbb x_a}$と${\mathbb x_c}$が一つのかたまりで、${\mathbb x_b}$と${\mathbb x_d}$がもう一つのかたまりに見えます。ところが、横軸の単位を変更すると、図1(b)のようになったとします。と、${\mathbb x_a}$と${\mathbb x_b}$が一つのかたまりに、${\mathbb x_c}$と${\mathbb x_d}$がもう一つのかたまりに見えます。
(a) 横軸の単位は細かい
(b) 横軸の単位は粗い
図1:正規化

 こんなの単なる相対的なものだと考えられるかも知れませんが、パターンの類似性は特徴空間上の距離で表されますから、単位をどう取るか、言い換えれば、特徴間のスケーリングをどうするかは重要な問題なのです。そこで、各特徴軸を正規化します。正規化は、各パターン間の距離が最小になるように行われるのですが、詳細は後で説明します。

2012年10月24日水曜日

次元の呪い -- 特徴は多いほど良いか

 特徴抽出部では、パターンの識別に有用な情報を取得する処理を行うのでした。認識対象が顔の場合、人物を特定したいのか、表情を特定したいのかによって異なるのですが、顔の特徴は千差万別です。一見、顔を認識するために、多くの特徴を使った方が良いのではないかと考えたくなります。
 人の顔を認識するために、目鼻口の位置を使うとしましょう。でも、眉毛の位置も使った方がいいかも知れませんし、シミやソバカス、肌の色も使った方がいいかも知れません。より多くの特徴を使えば、顔を正確に認識できそうな気がします。しかし、果たしてそうでしょうか。
 確かに特徴を増やせば、その人の顔の傾向を学習するために使ったデータの中ではその人の顔を認識しやすくなるでしょう。しかし、特徴が増えると、識別器の学習するパラメータが増えますから、学習データが増えなければ、パラメータの推定誤差が大きくなってしまいます。誤差が大きくなれば、その顔が持つ傾向が偶然発見される可能性が高くなります。そのように偶然発見された傾向は、未知のデータに対してうまく働くとは限りません。つまり、特徴を増やせば、認識に有用な特徴が増えるかも知れませんが、認識に役に立たない特徴も増える可能性があるということです。次元数と識別率の関係を、図1に示しました。識別率が最大になる次元数が導出できれば一番良いのですが、これはそう簡単ではありません。
図1:次元数と識別率の関係

 先ほど、「学習データが増えなければ」という条件が付いていました。どういうことなのか、簡単な比喩を用いて説明しましょう。今、コイントスを100回行って、表裏を数えたら、図2のような分布になりました。確率は1/2ですから、表裏は理想的には50回ずつになります。このズレは、誤差ということになります。誤差の割合は試行回数を増やすと減り、確率は1/2に近づいていきます。
図2:コイントスの表裏分布

 次に、サイコロを100回振って、出る目の数を数えたら、図3のようになりました。確率は1/6ですから、各目は理想的には16回あるいは17回ずつになります。このズレは、誤差です。問題は、先ほどのコイントスに比べると、サイコロの目を振った方が、誤差の比率が増えていることです。サイコロの目は6個ですが、仮に100個あったとしましょう。と、一度も目が出ないということもあり得ます。また、サイコロの目の数は6個のままでも、サイコロを6回しか振らなかったら、同じことです。 図3:サイコロの目

 識別器の学習に必要なデータが、次元数の増加と共に急激に増加することを、次元の呪いと呼ぶことがあります。一般に、データを取得するのは大変な作業ですから、そう簡単にデータを増やすわけにはいきません。したがって、識別性能を向上させるにためには、次元を小さくする必要があります。次元を小さくする操作を、次元圧縮と呼んでいます。次元圧縮の具体的な方法として、学習と評価を繰り返して最適な特徴を求める方法や主成分分析を用いる方法などがありますが、詳細は後に説明致します。

2012年10月22日月曜日

特徴抽出部:特徴ベクトル

 特徴抽出部では、識別に有用な特徴を抽出します。特徴量の計算や特徴の選択によって、パターンがどのクラスに属するかを判定するための情報を取得する処理を行います。この特徴抽出部の出力は、特徴ベクトルになります。
 一つの特徴だけで、完璧に分類できることは稀でしょう。で、幾つかの特徴を組み合わせます。例えば、人の顔を認識するのであれば、目や鼻や唇の位置、形、色など、複数の特徴を使います。特徴は、以下のように特徴ベクトルで表現されます。
${\mathbb x} = (x_1, x_2, ..., x_d)^T$
ここで、$T$は転置を表します。成分$x$が、各特徴を表しています。つまり、特徴ベクトルは特徴を並べてベクトルで表したものです。$d$は特徴の個数であり、特徴ベクトルの次元を表します。この$d$次元空間は、特徴空間と呼ばれます。特徴ベクトルは、特徴空間上の1点で表されます(図1)。 図1:特徴空間

 音声を識別する場合を例にとって説明しましょう。日本語の母音は、第1フォルマントと第2フォルマントが図2のようになり、2次元面上でグループに分けることができます(重なりがあるので、完全に分類できない)。フォルマントというのは、音声信号を周波数変換したときに現れる山の周波数で、共振周波数を表します。周波数の低い方から、第1フォルマント、その次が第2フォルマント、その次が第3フォルマントと呼ばれます。フォルマントは共振周波数を表しており、音声を識別するのに有用な情報になります。この図2の場合、特徴を2つ用いていることになります。つまり、特徴の次元は2ということになります。 図2:日本語母音の音響的特徴

2012年10月18日木曜日

前処理部:パターン化の方法は重要

 先日、前処理部について説明しました。そのとき、「データからノイズを除去したり、正規化したりして、特徴を抽出しやすくなるように処理する」と述べました。要はデータを取るだけなのですが、実はデータをどのようにパターン化するかは、重要な問題です。例えば、文字認識の場合、パターン化の方法は幾つも存在します。数字の「2」を認識する場合を例に考えてみましょう
 最も単純な方法は、文字の領域をメッシュに区切り、各メッシュの2値で表すことでしょう(図(a))。数字を表現するにはかなり細かいメッシュにする必要がありますので、パターンのデータが増大してしまいます。では、文字を囲む枠から文字線までの距離で表した場合(図(b))は、どうなるでしょうか。文字までの距離では決められた数の決められた方向に対して距離データがあれば良いですから、データ量を大幅に削減できます。 さらに、文字線の長さと方向で表した場合(図(c))は、どうでしょうか。文字線の方向表現では文字線の長さと方向と始点位置が必要であり、文字線でどの程度細かく表現するかによりますが、各メッシュの2値よりもパターンのデータは少なそうです。それに、枠内の位置や文字のサイズに関係なくなりますので、入力データの変化に頑健になります。


(a) メッシュの2値  (b) 文字までの距離  (C) 文字線の長さと方向
図:数字「2」のパターン化

 同じクラスに属するパターンでは、そのパターンの元になっているデータが類似している必要があります。上記述べましたように、パターン化の仕方がパターン認識の性能を大きく左右することがあります。つまり、パターン化の方法が、後のパターン認識の過程や認識率に大きな影響を与えることになります。したがって、前処理部も侮ることはできません。

2012年10月15日月曜日

パターン認識の大まかな流れ

 パターン認識の大まかな流れを述べます。「パターン認識とは」で、パターン認識は大きく「前処理部」「特徴認識部」「識別部」で構成されると書きました。もう少し、具体的にご説明しましょう。例えば、自販機で缶コーヒーを購入する場合を考えます。硬貨を入れると、その真偽や種類を判定し、缶コーヒーとおつりを返却します。
 硬貨の真偽や種類を判定するには、硬貨の大きさ、重さ、材質などを測定するでしょう。実際に、どのように判定しているかは別にして、とにかく、硬貨を観測しなければ、何事も始まりません。「パターン認識とは」で、データが「前処理部」に入力されていますが、観測ではこのデータを取得します。これは、「硬貨という認識対象を数値化する」と言い換えることができます。したがって、ここでのデータは、適切に標本化と量子化が行われたデジタル・データを意味します。実は、実際上の問題として、この観測は重要なプロセスです。適切な測定ができるかどうかは、その後の判定の善し悪しに影響します。
 「前処理部」では、データからノイズを除去したり、正規化したりして、特徴を抽出しやすくなるように処理します。認識対象のデータは、常に理想的なものが得られるとは限りません。硬貨であれば、傷がついているかも知れませんし、錆びているかも知れませんし、刻印がすり減っているかも知れません。これらがデータに与える影響が予めわかっていれば、これを取り除きます。この処理が、雑音除去です。また、硬貨を測定して、直径23.5mm、重さ4.5g、電気伝導率50.0×106 [S/m]が得られたとすれば、これら特徴は数値的に大きく異なりますから、そのまま比較するわけにはいきません。数値的な尺度を合わせるために、正規化を行います。正規化の規準として、各尺度の分散が等しくなるようにします。
 「特徴抽出部」では、データに基づいて判定を行うために本質的な特徴を抽出します。硬貨判定の例では、特徴として大きさや重量、電気伝導率などが取得できます。しかし、どの特徴を利用すれば良いかは、認識対象のクラスを何に設定するかによります。例えば、その硬貨が10円なのか、100円なのかを判定したいのか、それとも、500円玉の真偽を判定したいのかで、どの特徴を使うのか異なるでしょう。各特徴は数値で表され、その数値を表す座標軸が特徴軸です。その特徴軸で構成される空間は、特徴空間と呼ばれます。特徴を並べて表したものを、特徴ベクトルと呼びます。
 「識別部」では、特徴空間上の特徴ベクトルがどのクラスに属するか判定します。特徴ベクトルを用いてクラスに分類するための規則を、識別規則といいます。この識別規則に基づいて、認識対象が正しいクラスに分類されるように、どの特徴がどんな数値ならば、どのクラスに属するかといった対応関係を決めていく過程が、学習です。これを、統計的推定ということがあります。

2012年10月9日火曜日

記号の説明

 機械学習やパターン認識を難しくしている要因の一つに、記号の表記があると思います。機械学習やパターン認識の考え方自体は比較的単純なのですが、考えるパラメータが多いため、似たような変数がいくつも出てきて、しかもベクトル表記になっていたりすると、混乱してしまいます。そこで、ここでは、この「機械学習への細道」の中で扱う記号を簡単に定義しておきます。

$m$..................................クラスの数
$\omega_i$.................................$i$番目のクラス
$n_i$..................................クラス$\omega_i$のパターン数
$n$...................................パターンの総数(パターン空間の次元数)
$d$...................................特徴空間の次元数
${\mathbb x} = (x_1, x_2, ..., x_d)^{\rm T}$..........特徴ベクトル($\rm T$は転置を表す)
${\mathbb w} = (w_1, w_2, ..., w_d)^{\rm T}$.......重みベクトル($\rm T$は転置を表す)
${\mathbb t} = (t_1, t_2, ..., t_m)^{\rm T}$.............教師ベクトル($\rm T$は転置を表す)
${\mathbb \mu}_i$...................................クラス$\omega_i$の平均ベクトル
${\mathbb \Sigma}_i$...................................クラス$\omega_i$の共分散行列
$P(\omega_i)$..............................クラス$\omega_i$の事前確率
$P(\omega_i | {\mathbb x})$............................クラス$\omega_i$の事後確率
$p({\mathbb x} | \omega_i)$............................クラス$\omega_i$の条件付き確率密度
$p({\mathbb x})$................................${\mathbb x}$の確率密度

2012年10月3日水曜日

参考となる本

 幾つか、機械学習やパターン認識を勉強する上で参考になる書籍をご紹介します。隅から隅まで読んでいるわけではありません。古い書籍の中には優れたものも多いのですが、入手のしやすさを考慮して、最近出版されたものを中心に挙げています。数学的に高いレベルを要求するものもありますので、自分のレベルに合ったものを選んでいくのが良いと思います。

・わかりやすいパターン認識
 石井健一郎, 上田修功, 前田英作, 村瀬洋
 オーム社, 1998
・フリーソフトでつくる音声認識システム
 荒木雅弘
 森北出版, 2007
・はじめてのパターン認識
 平井有三
 森北出版, 2012
・はじめての機械学習
 小高知宏
 オーム社, 2011
・初歩から学ぶ統計的学習-画像処理で体験してみよう-
 熊沢逸夫
 オーム社, 2012
・統計的パターン認識入門
 浜本義彦
 森北出版, 2009
・統計的機械学習-生成モデルに基づくパターン認識-
 杉山将
 オーム社, 2009
・パターン認識と機械学習(上)ベイズ理論による統計的予測
 C.M.ビショップ
 シュプリンガー・ジャパン, 2007
・パターン認識と機械学習(下)ベイズ理論による統計的予測
 C.M.ビショップ
 シュプリンガー・ジャパン, 2008

2012年10月1日月曜日

パターン認識理論を俯瞰する

 パターン認識理論には色んな理論や手法が提案されており、とても複雑に見えます。ただ、一つ一つ整理すれば、一見複雑に見えることでも、納得して先に進めます。ここで、パターン認識理論全体を俯瞰して、これから辿る道しるべにしましょう。表1に、パターン認識理論の概要を示します。

表1:パターン認識理論

教師あり学習
   識別方法
      確率による方法
      距離による方法
      関数による方法
      部分空間法
   誤識別率推定方法
   特徴抽出方法
      特徴選択
      特徴抽出
教師なし学習
   クラスタ分析
      階層的クラスタリング
      非階層的クラスタリング

 パターン認識ではパターンをクラスに分類する必要があり、そのクラスの決め方には色々な手法があります。きちんとクラス分けできるようにするには、クラスを正しく決定する必要があります。一般にその決定境界が重要になりますので、その決定境界を正しく設定することが学習に当たります。
 学習には、教師あり学習と教師なし学習があります。教師あり学習は、与えられた知識に基づいて学習を進める方法です。パターンが属するべきクラスが与えられ、どのクラスに属しているか判定していきます。教師あり学習は、予測や診断などに応用されます。どのクラスに属するかわかっているパターンを使って、将来観測するパターンがどのクラスに属するか予測します。多変量解析では、判別分析と呼ばれます。これに対し、教師なし学習はクラスの分布がわかっておらず、クラスの分布の構造を明らかにすることに主眼が置かれます。どのクラスに属するか不明なパターンがあり、パターン間の類似性や統計的性質に基づいてグループに分割します。このグループは、クラスタといいます。教師なし学習は、構造や性質の推測などに応用されます。同じような性質を持つと考えられるパターンを集めてクラスタを作り、そのクラスタ同士がどのような関係にあるか推測します。本来的に正解が存在しませんので、推測の正当性が問題になることがあります。導出された構造や性質の意味は、慎重に解釈されなければなりません。多変量解析では、クラスタ分析と呼ばれます。
 パターン認識は、パターンをクラスに分類します。このとき、クラスを代表するパターンを用意して、その代表と個々のパターンを比較することによりそのクラスに属するかどうかを識別します。この識別を行う部分が、識別部です。クラスを代表するパターンは、プロトタイプと呼ばれることがあります。
 ここで、重要なことが2つあります。一つは、クラスのパターン分布が未知だということです。そこで、例えば、クラスの分布を正規分布と仮定して、平均と分散を推定するやり方がパラメトリック識別器です。正規分布といった仮定をおかず、プロトタイプとの距離や確率分布の組合せを使うやり方がノンパラメトリック識別器です。平均と分散を推定するとき、パターン分布からサンプルを取り出します。このサンプルは、識別器の設計(学習)に用いられるサンプルという意味で、訓練サンプルと呼ばれます。もう一つは、平均や分散の推定が正しいかどうか、つまり、識別器の評価が必要だということです。既知の訓練サンプルに対して識別器がうまく働いてもしょうがなく、未知のパターンに対して識別器がうまく働いて欲しいわけです。ところが、パターンはそうそう手に入るものではありません。そこで、訓練サンプルに用いられなかったサンプルを評価に使うことがあります。これは、評価サンプルと呼ばれます。誤識別率推定方法は、訓練サンプルと評価サンプルの決め方と誤識別率の推定法に関する理論です。