データサイエンス / 機械学習 / AI ・・関連する諸分野との関係を図で表すと以下のようになります。
GoogleImage:Data Science Machine Learning AI
機械学習(Machine Learning:ML) とは、データサイエンス、あるいは人工知能研究における手法の一つで、大量のデータを利用した反復的な学習(人間が行っている学習と同様のプロセス)によって、コンピュータ上にパターン認知や推論のためのモデルを構築する技術です。
コンピュータに与えるのは、学習ルールと、学習素材のデータセットで、コンピュータ自身が大量のデータから推論のルールを自動的に学習します。例えば、ヒト、犬、猫の大量の画像と、その画像がヒトか、犬か、猫かの「答え」です。この画像はヒト、この画像は犬・・と大量に与えていくことで、識別する能力が学習され、その「経験」が豊富になることで、識別能力が上がっていくのです。小さな子供に「これは犬です」、「これは猫です」・・と教えていくのと同じ手順です。
ちなみに
犬と猫の違いを子供に教える際に、犬のサンプル画像が「白い犬」ばかり、猫のサンプル画像が「黒い猫」ばかりだとすると・・・「白いのが犬」と学習してしまうかもしれません。教える際には、データの与え方に配慮が必要です。
このときコンピュータの中に自動的に出来上がる「入力と出力の関係づけ」のことを「モデル」というのですが、与えるデータが画像であれば、画像認識モデルができあがり、音声を与えつづければ、音声認識モデルができあがります。
従来、物事の判別は人手によるプログラミング( if 条件文)で実装していましたが、現在の AI 、例えば自動運転における画像解析、買い物行動の動作解析、オンラインショップのレコメンド機能、スパムメールの検知など、いわゆるパターン認知機能と呼ばれるものの大半は、この機械学習によって実装されています。
機械学習で可能になるのは大きく2つ、「予測」と「発見」です。
従来のAI(エキスパートシステム)と何が違うのか、そのイメージをざっくりと掴んでもらうための図解です。
教師あり学習とは、学習のときに正解のラベルを使う手法で、既知の情報を用いて未来を予測する予測器を作ることを目指します。一般に問題(説明変数)と答え(目的変数)のセットからなる大量のデータを必要とします。主にカテゴリを予測する「分類」と、実数値を予測する「回帰」があります。手法としては、ニューラルネットワーク、線形回帰などがあります。
今最も実用化が進んでいるのがこの分野です。要するに、大量の過去のデータから現象を記述するモデルを作成し、それを用いて未来に起こることを予測する・・。これは基本的には、私たちの脳が「経験を積むことで、未来予測ができるようになる」という話と同じですが、コンピュータの記憶容量と処理の高速化が進んだことで、それが人知を超えたレベルで実現できるようになったのです。
教師なし学習とは、学習の際に正解ラベルを使わず、機械学習モデルに自力でデータの法則性を見つけさせる手法で、サンプルをグループ分けする「クラスタリング」や、高次元の変数を低次元に減らす「次元削減(次元圧縮)」などがあります。
強化学習とは、正解ラベルの代わりに「報酬」を使う手法です。とるべき「行動」に無数の選択肢があり、明確な「答え」をあらかじめ与えることが難しい場合、「報酬」の大きな行動に高いスコア、「報酬」の少ない行動に低いスコアを与えていくことで、どう振る舞えば最大の報酬が得られるかを学習する・・というタイプのもので、囲碁や将棋などの AI に利用されています。
ml5.jsは TensorFlow.js をベースにしたJavaScriptの機械学習ライブラリーで、学習済みモデルを簡単に利用することができます。p5.js(Processing) との親和性もよく、アーティストやクリエイターにとって、気軽に楽しいコンテンツ制作が体験できる環境を提供してくれます。
先日お話しした「関数」を例に、データサイエンスが何をしようとしているのかについて「例え話」をします。関数とは「入力と出力(ああすればこうなる)」の関係を表したモデルです。
y = f ( x ) , y = ax +b
この「a, b によって特徴づけられた、入力x と 出力y の関係」が、物事の背景にある原理を説明するモデル・・ということになります。
例えば、2つのデータ (2,5) , (4,9) があって、これらを通る直線の式を y = ax + b として、 a ,b の値を求めると・・
5 = 2a + b 9 = 4a + b
これを解いて、a = 2, b =1。この直線の式 y = 2x + 1 が得られたモデルです。
で、「 x = 10 のときに y はいくつ?」という問いに対して、 2 x 10 + 1 = 21、これがいわば「未来予測」です。
数学の問題というのは、与えられるデータの数も値も、手計算で綺麗な解が導けるように与えられますが、実際の問題では、与えられるデータは必ずしも綺麗に直線上には並びません。例えば (2,5) , (3,6) , (4,9) だったりして、普通の数学の問題としては回答不能になります。
しかし、実際に複数のデータをグラフにプロットすると、明らかに比例関係が見てとれます(右上グラフ)。であれば、その関係を表現するための a と b を見出すことには意味があると言えるでしょう。
このように現実から得られるデータに対しては、回帰分析の手法を使ってパラメータ a , b を推定するのですが*1、結果からいうと、上記の3つのデータから推定されるのは、a=2.0, b=0.67 となります。もし、入力(x)が 16 であると想定すると、予測値(y)は、32.67 となります。
データサイエンスがやろうとしていることは、基本的にこの応用です。関数モデルをつくって「前提(x)がこうなら、結果(y)はこうなる」といったようなことを予測できるようにしたい・・・。今日の 認識系AI の大半はこんな例えで説明できます。
関数モデルを y = f(X) と書いた場合の、X が説明変数で、y が目的変数です*2。
説明変数と目的変数という用語は、統計ソフトやライブラリーによって、異なる用語が使われる場合があります。以下いずれも同様の用語セットです。
\(x\) | \(y\) |
独立変数(independent variable) | 従属変数(dependent variable) |
説明変数(explanatory variable) | 目的変数(target variable) |
特徴量(feature / attribute) | ラベル(label) |
データ(data) | ターゲット(target) |
予測変数(predictor variable) | 応答変数(response variable) |
入力(input) | 出力(output) |
機械学習(教師あり)では、手持ちのデータを「学習用データ(訓練データ)」と「テストデータ」で分けるのが一般的です。
手持ちのデータを全て学習用データとして使うと、そのデータに過度に適合したモデルができてしまい(これを過学習といいます)、現実の予測に使おうとした場合に逆に精度が低くなってしまいます。そこで、一般には学習用データとテストデータに分割して、学習状況をテストデータでチェックしながら、テストデータに対して最も良い性能が出るように調整を繰り返します。