2015年5月24日日曜日

【機械学習 序説】

 ジェスチャ周りをリサーチしている太田です。

 ここ1ヶ月ほど、Myo で取得した筋電位(詳しくはこちら)からハンド・ジェスチャを特定する為に機械学習の導入を試みてます。

 実装のためにいろいろなブログやサイトを閲覧してきましたが、どうも偏っているものが多い様に感じました。もちろん、大半は「こうしたら使えるよ」系のモノ。あるいは少数ですが、数式をゴリゴリ示す理論系のモノ。残念ながら、両者をつなぐ様なサイトがあまり見受けられませんでした。

 そこで今回は、機械学習の前座として、「こんな知識が無いと理論を理解するのは辛いよ」的な前提知識を紹介していきます。なので、「機械学習がどのようにして事例判断を行うか」をザックリと説明できる方には当たり前、「原理なんて興味ないわ」って方にはどうでも良い話です。ごめんなさい。m(_ _)m

1)線型代数学
 理系大学生ならばおそらく1・2年で必ずや履修しているであろう単元ですね。
 機械学習においては、「多次元」問題を扱うために必須です。いきなり「多次元」ときましたが何も恐れることはありません。プログラムに学習してほしい「要素の数」のことです。例えば、人の肥満度を測るために、「身長」「体重」「体脂肪率」「性別」を学習して欲しい要素とすれば4次元になります。こうした、全く性質の異なる要素を「同時」に扱うために線形代数が必要になります。細かいところは理解しなくても、行列の表現・逆行列・転置行列・固有値・固有ベクトル・規格化などがあればいいでしょう。

2)統計学
 こちらは、文理問わず必要とされる機会が多い分野ですね。
 学習における正誤の判定を、命題の真偽として考えるならば、統計学に基づく「検定」が必要になるでしょう。専門用語が多いのでとっつきにくいですが、普段持ち合わせている「感覚」を「数学的に表現する」ことを目指しているだけです。数学的な手順に目が行きがちですが、むしろ「感覚」をもとにした概念や考え方を捉えておくと、機械学習の理解が深まるように思います。

3)数値解析学
 おそらく、機械学習において最も核となる部分です。
 コンピュータは四則演算(加減乗除)によって離散的にしか数値を扱うことができません。(僕の知る範囲では・・・ですが。汗)つまり、コンピュータには無理数(整数同士の割り算で表せない数)が理解できないのです。ということは、コンピュータのは2次方程式を解く事が出来ないのです。我々人間であれば、係数がどんなものであれ、解の公式を用いれば平方根によって簡単に解が求まるのに。(いや、面倒な場合があるかもしれないけど、「公式を用いればいい」という単純さにおいて「簡単」と表現しました。)
 2次方程式を解くという問いに対して「誤差」を許容する事にしましょう。小さい事に目を瞑る事にして、「だいたい」の値を求める事は出来ないか。計算可能な「ある値」から出発して、少しずつ「答え」に近ずく事は出来ないか。これこそが「学習」の肝です。つまり、間違ってもいいから一旦やってみて、間違っていたら少し修正して再チャレンジ!このプロセスを繰り返す事によって、少なからず間違っているんだけども「答えに近い」状態にする事、が「学習」です。
 残念ながら人間にはこんな事できません。いや、少なくとも僕は、何度やってもやり直しを命じられるなんて耐えられません。が、コンピュータは人間のよう(僕のように)に「飽きる」ことがありません。電気さえ供給してやれば、おそらく何万回でも何億回でも同じ操作をしてくれます。
 こうした考えのもと、「ある手順にのっとって何度も繰り返す事によって2次方程式を解きましょう」というのが、ニュートン法です。解の公式が数値の計算手順であるのに対して、ニュートン法は解を求める操作手順を示しています。

 さてさて話が長くなりましたが、肝となるエッセンセスはここに挙げた3要素だと思います。あとはどの様にミックスされるか。あるいは操作手順の中でどんな順番に処理を行うかです。少なくともニュートン法さえ知っていれば、機械学習の勉強の際に迷子になる事はないでしょう。


 以上、サムズアップするシュワちゃんを理解するために必要な最低限の知識でした!(ターミネータ2より)