ロゴ

プログラミング初心者がアプリ開発を目指すブログ

機械学習とは何なのか? – Pythonでディープラーニング-001

今回からPythonを使ったディープラーニングを解説していきたいと思います。
基本的な機械学習の説明から始めて、最終的には手書き画像認識や翻訳モデルの作成を目指します。

今回は機械学習の基本的な考え方を高校レベルの数学の知識(微分と行列の基本的な部分)で説明したいと思います。

機械学習の基礎

下のグラフは過去10年間のある都市での月別の昼の長さの平均値を示しています。

このデータをもとに来年の月別の昼の長さを予測することを考えます。
最も簡単なのは「このグラフと全く同じ値をとる」とすることですが、
昼の長さは本来は滑らかな変化になることが考えられます。
よって、このグラフに滑らかな曲線を書いていきます。

この曲線上の値を計算することで来年の昼の長さを予測できます。

では、この曲線を描く手順を考えていきましょう。
まずはデータがどのように分布するのかを予測する数式を考えます。例えばこのデータが4次関数上に分布すると考えて式を置いてみます。
\begin{align}
y = w_0 + w_1x + w_2x^2 + w_3x^3 + w_4x^4
\end{align}
\(x\)に1月,2月などの値が入りこの式で計算される \(y\)が昼の長さを示しています。\(w_0,w_1,w_2,w_3,w_4\)をいい感じに調整することでそれらしい曲線を描くことができます。
\(w_0,w_1,w_2,w_3,w_4\)を調整するためにもとのデータの値(青点でプロットされている値)と予想した式の\(x\)に1月,2月…を代入して得た値の誤差を計算します。
1月,2月…の昼の長さの実測値(青点でプロットされている値): \(t_1,t_2…\)
1月,2月…の昼の長さの予測値(式から計算した値): \(y_1,y_2…\)
とすると
\begin{align}
E = \frac{1}{2}\sum_{n=1}^{12}(y_n-t_n)^2
\end{align}
という誤差を表す式を考えることができます。この式は一般的に二乗誤差というもので、予測値と実測値の差を2乗したものを12ヶ月分足しあわせています。全体を1/2しているのは、微分などの操作をしていく際にこのほうが都合がいいからです。
誤差を表す関数はこの二乗誤差以外にもあり、解くべき問題に合わせて使い分けていきます。
このEの値を最小にするような\(w_0,w_1,w_2,w_3,w_4\)を決めることで、曲線を描くことができます。

ということで、来年の昼の長さを予測するために行う手順をまとめると

1. 実測値をもとにして、予測を行う数式を考える
2. 誤差を表す数式を考える
3. 誤差が最小になるように係数を調整する

これらが機械学習の手順です。このうち手順3はコンピューターが行い、手順1・手順2は人間の手で行います。

より複雑な問題への対応

次に分類問題について考えていきます。例えば、重量と色からそのものがリンゴなのかオレンジなのかを判定するプログラムを作るとします。
横軸に画像の赤色成分の強さ、縦軸に重量をとってグラフにします。

これを見ると右上にいけば行くほどリンゴの可能性が高く、左下にいくほどオレンジの可能性が高いといえます。
リンゴとオレンジの境界を直線と考えて、横軸をx1,縦軸をx2とすると
\begin{align}
f(x_1,x_2) = w_0 + w_1x_1 + w_2x_2 = 0
\end{align}
とおくことができます。
図上にこのグラフを書いてみると\(f(x_1,x_2) = w_0 + w_1x_1 + w_2x_2 = 0\)の右上は\(f(x_1,x_2)>0\)となり、左下は\(f(x_1,x_2)<0\)となります。
リンゴである確率Pを求めたいので値が0から1に向かって滑らかに変化する関数\(\sigma(x)\)を用意して
\begin{align}
p(x_1,x_2) = \sigma(f(x_1,x_2))
\end{align}
とするとリンゴである確率Pを求める関数ができます。これで先ほどの手順1が完了です。後は誤差を表す関数を用意して、係数を調整すれば目的は達成です。

しかし、実際の問題はこんなに簡単にはいきません。

まず第一に与えられたデータが単純な直線や曲線で分類できる分布になっていない可能性があります。
その場合は複雑な数式を用いて、データの分布を予想する必要があります。

次に、実際の問題は2つの変数を用いて分類できるほど単純ではない可能性があります。
今回の問題は画像の赤色成分の強さと重量という2つの変数のみで考えたので2次元平面に図示して、数式を予想することができました。
しかし、赤色成分・緑色成分・青色成分・重量などの4つ以上の変数を用いて分類を行おうとすると、人間の頭では想像することができずデータの分布を表す数式を予想することができません。

このような複雑な問題に対しても、柔軟に対応できる「数式」の一つの形としてニューラルネットワークが生み出されました。

今回は機械学習の基本について見ていきました。
最初に考えた昼の長さを予想する問題を回帰問題、2番目のリンゴとオレンジを分ける問題を分類問題と呼びます。この2つを組み合わせて様々な問題に対応していきます。

次回はニューラルネットワークについて詳しく見ていきます。

スポンサード リンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA