[日本語訳] 1.4 Machine Learning Unsupervised Learning by Andrew Ng 機械学習
0情報ソース
1.4 Machine Learning Unsupervised Learning by Andrew Ng (14分)
このビデオでは、二番目に大きな機械学習問題である「教師なし学習」についてお話します。
前のビデオで教師あり学習についてお話しました。
その時に、このようなデータセットをお見せしたことを思い返してください。個々のサンプルはラベル付けされていて肯定か否定の例のいずれかでした。良性かあるいは悪性の腫瘍、という風に。
ですから、教師あり学習では、それぞれのサンプルには明示的に何がいわゆる「正解」が何か示されていました。良性か悪性かなどのように。
教師なし学習で与えられるのはそのようなデータとは異なるこのようなデータになります。ラベル付けされていないか全て同じラベルか、あるいはラベルがそもそもありません。
そうしたデータセットを与えられ、それに対して何をすべきか指定がなく、それぞれのデータポイントが何かも明示されていません。その代わりに、単に、データセットがあるだけです。
このデータに何か構造を見つけることができますか?
このデータセットでは、教師なし学習アルゴリズムはデータが二つの異なるクラスターに属すると結論するかもしれません。
ここに一つのクラスターがあり、ここに別のクラスターがあります。
このように教師なし学習アルゴリズムはこうしたデータを二つの別々のクラスターに分けたりします。そしてこれはクラスタリング・アルゴリズムと呼ばれます。さらに、これは多くの場所で使われています。
クラスタリングが使われている一例は、GoogleNews です。もし、まだ見たことがなければ、実際にこの URL news.google.com に行って見てください。
Google News が行うのは、毎日、何万、何十万という数の報道記事をウェブから集め、これを関連する記事にグループ分けします。
例えば、これを見てみましょう。これらの URL がリンクしているのはBP 原油のニュースに関する別々の記事です。では、これらのURL の一つをクリックしてこれらの URL の一つをクリックします。すると、このようなウェブページに辿り着きます。これは ウォールストリートジャーナルの記事、BP原油流出の報道で、「BP マコンドを閉鎖」これは流出が発生した油井の名前です。そしてそのグループの違う URL をクリックすると違う記事に辿り着くかもしれません。
これは、CNN の記事で、これもまた BP 原油流出に関するものです。
そしてさらに三番目のリンクをクリックすると、また別の記事に行きます。
これは イギリスのガーディアン紙のBP 原油流出に関する記事です。
ですから Google News がしたのは、数万件もの報道記事を集めて、それをクラスタリングしてまとめたのです。これにより、同じ話題の報道記事は全てまとめて表示されています。
実は、クラスタリング・アルゴリズムと教師なし学習アルゴリズムは他にも多くの問題で使われています。これは、ゲノミックスの理解に関する一例です。これは、DNA マイクロアレイのデータの例です。考え方としては、別々の個人からなるグループで一人一人、どれだけ特定の遺伝子を持っているかどうかを測定します。
厳密には、特定の遺伝子がどれだけ発現しているかを測定します。様々な色、赤、緑、灰色、などは、異なる個人間でどれぐらい特定の遺伝子が共通しているか、していないかを表しています。
これで何ができるかというと、クラスタリング・アルゴリズムを実行して、個人を異なるカテゴリ、異なるタイプの人々ににグループ分けすることです。
これは教師なし学習です。なぜなら前もってアルゴリズムにこれらがタイプ 1 の人々でそれらが タイプ 2 の人々で、それらがタイプ 3 の人々だなどと教えていないからです。代わりに、ここにいくらかデータがあり、そのデータに何が含まれているかは未知で、誰がどのタイプかは知らないし、そもそもどのような異なるタイプの人がいるのか分からないが、自動的に構造をデータの中に見つけられないか、自動的に個人を前もって知られていないタイプにクラスタリングすることで、と言っているわけです。
アルゴリズムに正解をデータセット内のサンプルに対して与えていないためこれは教師なし学習です。教師なし学習はあるいはクラスタリングは他にも幾つかの応用例があります。大規模なコンピュータ・クラスターを整理するために使われています。
ある友人は大規模なデータセンター、つまり大規模なコンピュータ・クラスターを調べてどのマシンが一緒に動作する傾向にあるかを知ろうとしていました。もしこうしたマシンを隣接させることができれば、データセンターの稼動効率が改善されます。
二番目の応用例は、ソーシャルネットワーク分析です。ある知識が与えられていて、例えばどの友人に最も多くの電子メールを送るかとかFacebook フレンドリストあるいはGoogle+ サークルの情報を元に、自動的にどれが密接な友人のグループか、また、お互いが全て顔見知りの人々のグループはどれか、ということを特定できないか?
マーケットセグメンテーション(市場細分化)。多くの企業は巨大な顧客情報データベースを保持しています。この顧客情報のデータセットを見て、自動的にマーケットセグメントを発見し、自動的に顧客を異なるマーケットセグメントにグループ分けして自動的に、もっと効率的に、販売やマーケティングを異なるマーケットセグメントに一括して行うことができないか?
これも、また、教師なし学習です。
なぜなら、こうした顧客データは全てあるものの、前もってどのようなマーケットセグメントがあるか知りませんしデータセット内の顧客について前もって誰がマーケットセグメント 1 に属し、誰がマーケットセグメント 2 に属すかなどを知らないからです。しかしこれを全て単にデータから発見させなければなりません。
最後に、実は教師なし学習が使われている用途には意外なことに、天文学データ解析もあります。そしてこうしたクラスタリング・アルゴリズムは意外にも銀河発生について興味深い有用な理論を提供しています。
これらは全てクラスタリングの事例です。そしてこれは教師なし学習の一種に過ぎません。
別のものについてお話します。これからお話するのは、カクテルパーティー問題です。
カクテルパーティーに行ったことはありますよね?想像できると思いますが、パーティーがあって、部屋に人がいっぱいいて、みな座って同時に会話をしていて、みんなが同時に話をしているので話し声が重複しています。目の前にいる人の声を聞くのも困難なくらいです。
そこで、仮に二人の人がカクテルパーティをしていて二人が同時に話をしているとします。これはやや小さなカクテルパーティーです。そして二つのマイクロフォンを部屋に設置します。
これがマイクロフォンです。そしてこれらのマクロフォンは二箇所の異なる距離の場所で話し手の声を拾いますので、それぞれのマイクロフォンはこの二人の話しての声を異なる組み合わせで録音します。
例えば話し手 1 はマイクロフォン 1 ではやや大きな声に聞こえ、もしかして話し手 2 はマイクロフォン 2 に対してやや大きな声で聞こえるかもしれません。
二つのマイクロフォンは相対的に異なる位置で二人の声を拾うので、それぞれのマイクロフォンが録音するのは、両方の話し手の声の重複した組み合わせです。
さて、ここに実際に研究者が録音した二人の話し声があります。再生してみましょう。最初に第一のマイクロフォンが拾った音です。
One (uno), two (dos),
three (tres), four (cuatro),
five (cinco), six (seis), seven (siete),
eight (ocho), nine (nueve), ten (y diez).
まあ、あんまり楽しそうなカクテルパーティーではなさそうですが、二人の人が1 から 10 まで二つの言語で数えています。お分かりの通り。たった今お聞き頂いたのは、第一のマイクロフォンの録音です。これが二番目の録音です。
Uno (one), dos (two), tres (three),
cuatro, (four), cinco (five), seis (six), siete (seven),
ocho (eight), nueve (nine) y diez (ten).
そこで私たちができるのは、この二つのマイクロフォンの録音を教師なし学習アルゴリズムに与えることです。これをカクテルパーティー・アルゴリズムと呼びます。そしてアルゴリズムに命令します。このデータから構造を見つけなさいと。そしてアルゴリズムが行うのは、これらの音声録音を聞き、どうやら、この音声では、二つの音声録音が追加されているか、あるいは合計されてこうした録音が生み出されたと答えます。
さらに、カクテルパーティーアルゴリズムが行うのは、二つの音源を追加されるあるいは合計されて最終的な録音となったものを分離します。実際にここにカクテルパーティー・アルゴリズムの最初の出力結果を聞いてみましょう。
One, two, three, four, five, six, seven, eight, nine, ten.
このように英語の声が録音された音声の一つから分離されています。これが二番目の出力です。
Uno, dos, tres, quatro, cinco, seis, siete, ocho, nueve y diez.
なかなか悪くないですね。
もう一つ例を出すと、ここに別のやはり似たような状況で録音されたものがあります。これが第一のマイクロフォンです。
One,two, three, four, five, six,seven, eight, nine, ten.
OK 可哀想にこの人はカクテルパーティーから帰ってきて自宅の部屋でラジオに向かって独り言を言っているようです。これが二番目のマイクロフォンの録音です。
One, two, three, four, five, six, seven, eight, nine, ten.
この二つのマイクロフォンの録音を同じアルゴリズムに与えると、それが行うのは、またこう答えます。この音声には、二つの音源があって、さらに、アルゴリズムの答えは、これが発見された最初の音源です。
One, two, three, four, five, six, seven, eight, nine, ten.
これは完璧ではありませんでした。声は復元されていますが、そこには少しだけ音楽も混じっています。そしてこれがアルゴリズムの二番目の出力です。悪くありません。二番目の出力では、声がなんとか完全に除去されています。
そしてうまく音楽から 1 から 10 まで数える声を除去してきれいにしています。そこで、このような教師なし学習アルゴリズムを見て、思い浮かぶ疑問は、これを実装するのはどれだけ複雑か、ということですよね。
一見して、このアプリケーションを構築するには、この音声処理を行うには、たくさんのコードを書くか、あるは、いくつかの音声処理用の C++ や Java ライブラリにリンクするか、非常に複雑なプログラムのように見えます。このように音声を処理し、音声を分離したりするのは。
実は、このアルゴリズムが先ほどお聞き頂いたものを出力するのに実行するのは単に一行のコードだけです。ここにある通り。
研究者がこの一行のコードを開発するのには大変時間がかかりました。ですから、これが簡単な問題であるというつもりはありません。
しかし、実は、適切なプログラミング環境を用いると、多くの学習アルゴリズムは非常に短いプログラムになります。ですから、これがこのクラスでは、Octave プログラミング環境を利用する理由です。Octave は無料のオープンソースソフトウェアです。そしてOctave や MATLAB のようなツールを使うと多くの学習アルゴリズムが単に数行のコードとして実装できます。
このクラスでは後で少しどのようにOctave を使うか講義します。そしてこうしたアルゴリズムを Octave で実装していくことになります。
もし MATLAB をお持ちであれば、それを使うことも出来ます。実は、シリコンバレーでは、多くの機械学習アルゴリズムにおいてまず最初に行うのは、ソフトウェアの試作をOctave で行います。Octave のソフトウェアを使うと信じられないほど速くこうした学習アルゴリズムを実装できるからです。
ここの、これらの関数のそれぞれ、例えば svd関数は、特異値分解 singular value decomposition の略です。これは実はOctave では単に内蔵された線型代数ルーチンです。これをC++ か Java で行おうとするとこれは、多くの行数の複雑な C++ や Java のライブラリにリンクするコードとなります。つまり、こうしたものをC++ や Javaあるいは Pythonで実装可能ですが、こうした言語ではもっと複雑なことになります。私がこれまで機械学習を教えてほぼ十年間見てきたことは、プログラミング環境としてOctave を使うと、非常に速く学ぶことができるということです。
Octave を学習のため、そして試作のためのツールとして使うと学習アルゴリズムをもっと手早く学び、試作ができるということです。そして、事実、多くの人が大手のシリコンバレーの企業で行っているのは、Octave のアルゴリズムを使って最初に学習アルゴリズムを試作し、そしてそれが実際に機能するようにした後にのみそれをC++ あるいは Java などに移植します。結果的に、こうしたやり方をすると、アルゴリズムが実際に機能するようにするのに、C++ で始めるよりずっと速くなります。
もちろん、私は承知しています。教師として「これについては私の言うことを信じなさい」と言えるのはほんのわずかの限定された回数のみであると。しかし、こうしたOctave のようなプログラミング環境を使ったことがない方にお願いしたいことは、これについては私の言うことを信じてください、ということです。
そして、言いたいのは、皆さんは、皆さんの時間、皆さんの開発時間は、もっとも貴重な資源の一つであると。そして多くの人がこれを実践するのを見てきて言えるのは、機械学習の研究者あるいは機械学習の開発者としてあなたの生産性がずっと高くなるのは、試作から始めることを習得し、他の言語ではなく Octave から始める場合ですと。
最後に、このビデオのまとめとして、一つだけ復習のための問題があります。
教師なし学習について学んできました。これは学習の設定として、アルゴリズムに非常に多くのデータを与え、そして単にデータから構造を見つけなさいと求めるというものです。
以下の四つの例のうち、この四つのどれがあなたの考えでは教師なし学習アルゴリズムで、教師ありアルゴリズムではないと思いますか。左の四つのチェックボックスそれぞれチェックして頂きたいのは、教師なし学習アルゴリズムが適切だと思われるものです。そして、右下にあるボタンをクリックして正解を見てください。ビデオが停止したら、どうぞスライドにある質問に答えてください。
さて、スパムフォルダの問題で覚えていて頂きたいのは、ラベルがついたデータある場合は、電子メールがスパムか非スパムかなど、これは教師あり学習として取り扱います。
報道記事の例は、これは正にこのビデオで見た Google News の例と同じですので、既に見たとおり、クラスタリング・アルゴリズムを使ってこうした記事をクラスタリングしてまとめることが出来ますので、これは教師なし学習です。
マーケットセグメンテーションの例は少し前にお話したもので、これも教師なし学習問題として扱うことが出来ます。なぜなら、単にアルゴリズムにはデータを与えるだけで、後はそれに自動的にマーケットセグメントを発見させるからです。
最後の糖尿病の例は、これは実は、前のビデオの乳癌の例にちょうど似ています。単に、良性と悪性の癌腫瘍、良性と悪性の腫瘍ではなくその代わりに、糖尿病かそうでないかということですので、これは教師あり、これを解決するのには教師あり学習問題として扱います。ちょうど乳房の腫瘍のデータと同じように。
さて、ここまでが教師なし学習です。
次のビデオでは、もっと特定の学習アルゴリズムを掘り下げていき、実際にこうしたアルゴリズムがどのように動くのかそしてそれをどのように実装するのかについてお話していきます。