前回に引き続き、「パンの名前を入力すると飲み物の名前を出力するコンピュータ」を例に機械学習について解説していきます。前回は、機械学習を使わずに単純なルールで実現した場合、ルールに無いパターンが入力されると対応できないことを説明しました。今回は、これを機械学習で実現する場合について見ていきましょう。
機械学習で使う「モデル」って何?
「パンの名前を入力すると飲み物の名前を出力するコンピュータ」を機械学習で実現する場合、パンと飲み物がセットになった正解データを準備し、これを学習させます。前回の繰り返しになりますが、機械学習ではこの正解データを「教師データ」と呼び、教師データを使った機械学習を「教師あり学習」と呼びます。
教師あり学習を行う際は、まず最初に、コンピュータが学習する際の「土台」となるものを人が設計し、コンピュータに与えます。この土台を「モデル」と呼び、コンピュータは教師データから学習した内容をモデルに反映させていきます。コンピュータが学習を終えた後のモデルは、未知のデータに対する予測にも使えるようになります。
さて、今回の例では、以下のような教師データ(正解データ)を用意しています。
- あんパン → 牛乳
- クリームパン、あんパン → 牛乳
- クリームパン → コーヒー
- メロンパン、ソーセージパン → コーヒー
- ジャムパン、あんパン → 牛乳
- ジャムパン、メロンパン → コーヒー
コンピュータは教師データに基づき、与えられたモデル上に「飲み物の名前を出力するためのルール」を自動で構築していきます。ただし、出力される飲み物の名前は、教師データにある物のいずれかです。今回の例では、「牛乳」または「コーヒー」と出力します。どんなパンの名前を入力しても、これら以外の飲み物の名前を出力することはありません。
重要なのは、機械学習によって抽出されたルールが非常に柔軟であるという点です。例えば、教師データに無い組み合わせである「ソーセージパン」と「あんパン」が入力された場合でも、恐らく「牛乳」と出力することができます。これは、機械学習が「『クリームパン』と『あんパン』という入力に対して『○○』を出力する」という固定のルールを作るのではなく、「クリームパン」や「あんパン」といった入力の特徴ごと(この例ではパンごと)にルールを抽出しているからです。
コンピュータが学習するイメージをつかんでいただくために、もう少し具体的に説明しましょう。ここでコンピュータが学習したいのは、牛乳とコーヒーに対するパンごとの「結び付きの強さ」です。
コンピュータは、与えられた教師データを上から順番に学習していきます。まずは「あんパン → 牛乳」です。この情報から、コンピュータはあんパンと牛乳に結び付きがあることを学習します。ここでは簡易的に、パンと飲み物に結び付きがあった場合、入力に対する飲み物に●を付けていきましょう。なお、下記では表がモデルに当たり、コンピュータが学習によって表中の●を配置している(ルールを抽出している)というイメージになります。
次は「クリームパン、あんパン → 牛乳」です。この情報に基づいて、先ほどと同じように、「あんパン」と「クリームパン」がそれぞれ「牛乳」と交わるところに●を付けます。
次は「クリームパン → コーヒー」です。しかし、同じ要領で●を付けると、クリームパンに対する牛乳とコーヒーの●が同数になってしまい、「クリームパン」と入力しても「コーヒー」と出力することができません。そこで、学習しようとしている教師データに反さないよう、クリームパンと牛乳の結び付き(●)を減らします。これで、「クリームパン」が入力された場合は「コーヒー」と出力できるようになりました。
このようにしてパンごと(入力の特徴ごと)の値を調整しながら学習し、教師データに基づいたルールを抽出します。教師あり学習とは教師データを順々に学習し、その都度ルールを微調整していく方法なのです。今回の例では、教師データを一通り学習し終えた状態のモデル(表)は次のようになります。
こうしたモデルを保持していれば、教師データには無い未知のデータが入力されても、●の数を比較して多いほうを選ぶことで、妥当な飲み物の名前を出力できるというわけです。例えば、「あんパン」と「メロンパン」が入力された場合、牛乳の●が3つなのに対してコーヒーは2つなので、「牛乳」と出力することになります。