以下の記事にCourseraの機械学習を受講した感想について書きました。
受講しただけだと、数ヶ月後には全て忘却していると思うので、自分自身での業務上の経験も交えつつ、復習も兼ねて内容をまとめて行きたいと思います。(なお、受講の注意点とか線形代数とかOctaveの言語について・・などはスキップします。)
本記事は、第1週目の前半の「機械学習とは?」についてまとめました。
機械学習とは?
講座の導入として、そもそも「機械学習って何?」と言うことが説明されます。
機械学習の定義
講座では、機械学習の定義としてトム・ミッチェルという機械学習の偉い人が提唱した定義を紹介してます。
定義は以下のようになってます。(ちょっと自分なりに意訳してみました。)
ある「タスク(T)」を実行するコンピュータプログラムがあり、そのプログラムに「経験(E)」をさせる。そのプログラムの「タスク(T)」の実行のパフォーマンス(「性能基準(P)で測定する」)が改善すれば、プログラムは、「経験(E)」から学習したと言える。
この事を機械学習という。
因みに原文は、以下です。
“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.”
具体例で言うと、チェスのゲームの学習ならばE、T、Pは以下に該当します。
- E:多くのチェスのゲームをやる経験
- T:チェスのゲームをやる事
- P:ゲームに勝つ確率
メールを迷惑メールとそうじゃないものに振り分ける事ならば、以下のようになります。
- E:迷惑メールかどうかをのラベル付けされた大量のメール
- T:メールが迷惑メールかどうかを判定する事
- P:正しく迷惑メールとそうでないものを判別した確率
でも、これって「教師なし学習」ならばどうなるんだろう・・特にP(性能基準)に該当するものがよくわかりません・・・
ディスカッションフォーラムに質問がないか覗いて見ると、やはり同じ疑問を持っている方が多くいらっしゃるようで何人の方々から質問が出てました。
ディスカッションフォーラムには有志でメンターをやっている人がいて、積極的に質問に答えてくれてます。(※「メンター」の称号は与えられてますが、その人の見解は、あくまで個人的見解で、講座の正式見解ではありません。)
メンターの方の回答は以下の通りでした。
- この定義、せいぜい教師あり学習にしか使えないっす。
- この定義、ぶっちゃけ使えないっす。
- この定義を今後使う事とかないので無視無視・・
- もっと有用な事を考える事に時間を費やした方がいいよ。
え・・だったら、この「定義」なんなのよって感じですが、一理あるなと思いました。
まあ、とりあえず、そう言った定義の例があるんだなと思って先に進みます。
※ただ、これに回答しているメンターの人、他の質問で間違った回答とかしてるので、あてにならないかもしれません・・・
[余談] 機械学習とAIの違い
講座とは関係ないですが、よくある質問で「機械学習とAI(人工知能)の違いは何か?」というのがあります。
AIの定義は、時代によっても変わっていて、自動化すればとりあえずAIだったような時代もあり、明確な定義はありません。近年、マシン性能の向上やビッグデータにより機械学習が盛んになってきて、AIって言葉がぶり返したように思えます。
個人的には、以下のように解釈してます。
- 機械学習は狭義のAI
- 機械学習はAIの実現手段の一つ
- 厳密には違うけど、だいたい同じようなもん
※講座のディスカッションフォーラムでもAIとの違いについて何人か質問してますが、やはり「ズバリこれ!」と言った回答は見当たりませんでした。
[余談] 機械学習と統計の違い
もう一つ余談ですが、さらに面倒臭いのが「機械学習と統計の違いは何か?」という質問です。
これについても明確に分けて定義するのはナンセンスだと思いますが、仕事していて、AIもしくは機械学習に幻想を抱いているお客さんとかは・・
とか言ってきたりして、面倒臭い事になる事があります。
機械学習と統計の違いは、個人的には以下のように解釈してます。
「学問」なので、データ自体の特性・分布などを解釈・説明する事を重点に置く。
「手段」なので、データを使って何かしらを予測する精度を向上させる事に重点を置く。(統計的手法を使う事もある)
ただ、実際の業務では「機械学習を使っている」と言ってもモデルの解釈性を求められる(予測のために使われている重要な要因は何か)事がほとんどなので、結局、違いなんて曖昧だと思います。
機械学習の分類
講座では、機械学習を大きく「教師あり学習」と「教師なし学習」の2つに分けてます。
教師あり学習
教師あり学習は「入力データに対する出力」を学習する事によって、問題を解決する方法です。
例えば、家のデータとして、「家のサイズ」を入力・「家の値段」を出力とした場合、既存のデータでその関係性を学習する事によって、未知のデータで「家のサイズ」から「家の値段」を予測できるようにします。
教師あり学習は、さらに以下の2つに分けられます。
- 回帰:連続した値を予測する。
- 分類:不連続の値(カテゴリー)を予測する。(もしくはカテゴリーに分ける)
具体例としては、以下のようになります。
- 「家のサイズ」から「家の値段」を予測する→「回帰」
- 「家のサイズ」から「家が希望した価格以上で売れるかどうか」を予測する→「分類」
教師なし学習
教師あり学習のように入力データに対する出力を学習するものではなく、入力データの構造そのものから問題を解決する方法です。
大きく「クラスタリング」と「非クラスタリング」で分類してます。
なお「非クラスタリング」は、そういう言い回しをしてますが、正確な用語の定義で「非クラスタリング」という言葉があるわけではなく「クラスタリング以外」と考えた方が良さそうです。(フォーラムでもそのような回答がされてました。)
「クラスタリング」は、”似たようなもの”をグループ分けする事で、遺伝子情報をグループ分けするような事にも使用されてます。
「非クラスタリング」の例としては、パーティーの騒音から話し声だけ分離する「カクテルパーティー問題」があげられています。(主成分分析という方法を使用します。)
因みに「カクテルパーティー問題」を解くためには「膨大なコーディングが必要かと思いきや、Ocraveで関数を呼べばたった1行でできるよ」との紹介がされてます。
[余談]強化学習について
機械学習を「教師あり学習」「教師なし学習」の2つに分けるというのを読んで「あれ?」と思った方もいるかもしれません。
大体の書物やネットの記事で機械学習を「教師あり学習」「教師なし学習」「強化学習」で3つに分類してます。(下手すると半教師学習が分類に加わったりします。)
この講座では「強化学習」は、レコメンドシステムなどと同様に「その他」扱いしており、分類方法としては詳しく説明してません。
個人的には、3分類に分けるのは、別基準の分類を混ぜている気がしてしっくりきてません。(結局、強化学習は教師があるのか、ないのか・・とか考えてしまいます。)
強化学習は、正解そのものを学習するのではなく、報酬を得ると言う言い方をしますが、正直、よくわかりませんでした・・
本質的なのは報酬云々よりも、上のETPの定義で言うと教師あり学習が「EからTへの一方通行」なのに対して、強化学習は「学習の過程でTからE、EからTと情報が行ったり来たりする事」なんじゃないかなと思ったりもしますが・・正直、理解がまだ曖昧です。(自分で強化学習について実際に自分で手を動かした事がないからだと思います。)
まあ、世間のAIのイメージって「強化学習」によるものが大きいので、わからなくもないんですが、本講座のようにすっぱり分けて考える方がしっくりしました。
まとめ
Courseraの「機械学習」講座の1週目の前半の「機械学習とは?」について、個人的な見解を交えつつまとめてみました。
私が得た結論は「定義なんてどうでもいい」です。
結局、色々調べても微妙に人によって言ってる事違ったりして、わからないので、数学的なノリで追求しだすとドツボにはまります。
一番、大切なのは、やろうとしている目的(お客さんが望む事)で、それをはっきりさせる事が重要だと思います。
因みに、お客さん中には、やりたいテーマないけど「とりあえずAIやりたい」という方もいらっしゃって、そういうプロジェクトは混迷しがちです。
なので、お客さんに説明を求められた時やお客さん自身が言葉の使い方で混乱している場合のために、自分なりの解釈で説明できるようにしておいた方が良いかもしれません。
次回は、1週目の後半の「線形回帰(単回帰)」についてまとめて行こうと思います。