Libera Vista

学び続けることによって、自由な視点(Libera Vista)で考えられますように。

そもそも機械学習って何か、何を学習するのか?

院での授業に基づいて、機械学習(Machine Learning、マシンラーニング、ML)の基本の基本をまとめてみました。プログラミングもAIビジネスも知らない初心者向けです。


そもそも機械学習って何か、何を学習するのか?

 

機械学習の学習と最適化


<学習とは?>

そもそも機械学習とは、コンピュータによる計算によって、データの中に傾向やパターン、ルールを見つけることです。そこから数値の予測や判定をしたり、あるいは導いた傾向やパターンをそのまま利用します。そのため機械学習の「学習」は、大きく分けて2種類だけです。

1.「予測や判定のための関数」を見つける。

2.「傾向やパターン」を抜き出す。

 
予測や判定のための関数とは、一番単純な場合、中学校で習うただの1次関数(linear function、リニアファンクション)です。 y = axです。yがxに比例する式とも言いますね。実は学習とは、単にこの式のxの前にある「係数」、「傾き」や「割合」にあたるaを求めるだけです。

例えば、男性の身長と体重のデータがあるとします。自分の身長に対して、男性の一般的な体重を知りたいとします。1つの方法は平均をとることです。ただし、エクセルなどで計算しようとすると、自分と全く同じ身長の人の体重を全て抜き出して、平均をとらなければいけません。また、単位をmmのように細かくすれば、全く同じ身長の人も減って平均も大きく変わってしまいます。そこで機械学習で関数のaを見つけて予測してもらいたいとします。xを身長として、yが体重とできます。身長xが予測に使う単位・値であり、体重yが予測したい単位・値です。


ここで、機械学習で3つ重要な言葉があります。

1.aを「パラメータ」

2. パラメータを学習することを「最適化」

3. パラメータが最適化されて(aが見つかって)、予測できるようになった関数を「予測モデル、学習済みモデル」

と呼びます。


aの値によっては予測が良くなったり悪くなったりします。そのため最適なパラメータを学習しなければならない。良い予測の関数には、パラメータの最適化が必要となります。まとめると、学習の1つ=「予測や判定のための関数」を見つける=(パラメータaの)最適化、です。

 

<最適化はどうやるか?>

どうやって最適化するのか。これも一番単純な場合、高校で習う微分で最小値を求めるだけです。具体的には、 f(a)' = 0 を解いてaを出します。ポイントはそのまま予測や判定のための関数を微分するのではなくて、予測のズレを測る誤差の関数をつくることです。

まず、最初は適当な数字にaをあてはめて、身長xのデータだけを使って、予測の値 \hat{y}を出します。例えば、a = 0.5 とします。そうすると、ある人の身長が170cm の場合、予測は85kgになります。予測の値はaxで出てきますが、これはもともと持っているデータの体重の値yと違うのでこれを \hat{y}とします。わかりにくくなるので、式を \hat{y} = axとします。でも実際のその人の体重のデータyは68kgだった場合、aは正しく予測できていません。ここで予測とのズレ、誤差を測ると、 y - \hat{y} = 85-68 = 17 です。普段、誤差は常にプラスの数で考えているので、逆に本当の体重yが小さすぎた場合には  y - \hat{y} はマイナスになってしまいます。そこで、 (y - \hat{y})^2 とします。 これが誤差の関数です。 \hat{y} はもともとaxなので、式は  (y - ax)^2 とかけます。これを使って、全部のデータに対して身長から体重を予測して、全部のデータの誤差の合計を測ります。1人1人のデータについて、誤差が残ったとしても、全体として誤差が小さくなれば、それは標準的な体重と言えるでしょう(平均の体重ではありません)。

次に、誤差が小さくなるように、微分をします。一度データのことは忘れて、ただの数式として計算するのです。詳しい最小値の求め方は高校の数Ⅱの微分を参照してください。微分は普通、どれか1つの文字について行います。また、知りたいのはうまく  (y - ax)^2 の誤差が小さくなるようなパラメータaの値です。そこで、a以外は普通の数字が固定されるもの、定数と考えます。 f(x) = x^2 + 3x + 2  の式が文字xについての式であるように、  f(a) = (y - ax)^2 とすると、あとは  f(a)' = 0 を解けばf(a)が最小になるような aが出てきます。
なので基本となるのは「最適化」=パラメータaでできた誤差の関数  f(a) をつくって、 f(a)' = 0 を解く= 誤差の関数の最小値を求める ことなのです。この最適化は条件があって、誤差の関数の形がきちんと最小値や最大値が出るような形でないといけません。そのような形を凸関数と呼びます。また、最適化はたくさん手法があり、実際には単に f(a)'=0を解くのではなく、aの値を少しずつ変えていくの機械学習では一般的です。

 

<まとめ>
機械学習の「学習」は予測のための関数「予測モデル」を見つける、あるいはデータの傾向を抜き出すこと。

予測のための関数を見つけるには、最適な「パラメータ」を学習する。

良い予測モデルには、パラメータの「最適化」が必要。最適化とは誤差の関数を用意して、パラメータの文字についての関数とする。これを微分して f(a)' = 0 を解く。