「機械学習 By スタンフォード大学」勉強会 2015.09.11

46
ウウウウウウウウウウウ http://www.ulsystems.co.jp mailto:[email protected] Tel: 03-6220-1420 Fax: 03-6220-1402 ULS Copyright © 2015 UL Systems, Inc. All rights reserved. ウウウウ by ウウウウウウウウウ ウウウ Andrew Ng ウウウ Coursera ウウウウウウウウウウウウウウウウウウウ2015/9/11 講講講 講講 講

Transcript of 「機械学習 By スタンフォード大学」勉強会 2015.09.11

Page 1: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ウルシステムズ株式会社http://www.ulsystems.co.jp

mailto:[email protected]: 03-6220-1420 Fax: 03-6220-1402

ULS Copyright © 2015 UL Systems, Inc. All rights reserved.

「機械学習 by スタンフォード大学」勉強会~ Andrew Ng 教授の Coursera のオンラインコースを受講して学んだこと~

2015/9/11講師役:近棟 稔

Page 2: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 2

はじめに

この勉強会は、 Andrew Ng 教授が以下の URL で公開している機械学習のオンラインコースを受講した内容をもとに、学んだことを紹介するための勉強会です。もしも機械学習に興味が出てきたり、詳細を知りたくなったら、ぜひこのオンラインコースを受講してみてください。日本語字幕もあります。

講義の中ではシリコンバレーにおける機械学習プロジェクトについての言及が何度もありました。講義を通して、シリコンバレーの様子について少し知ることも出来ます。

講義の中や、生徒向けの宿題では Octave というプログラミング言語を用いました。 Andrew Ng 教授曰く、「 C++ 、 Java 、 R 、 Python 、 NumPy みたいに沢山のプログラミング言語が存在するけれども、手早く機械学習の勉強をしたいのならば Octaveが良い」と話していました。実際のプロジェクトにおいても同様で、試行錯誤する段階においては Octave を使うべきだということでした。プロジェクトの最終段階で、それをいよいよ大規模なデータに適用する段階に入ってから C++ や Java で再実装べきだと教えられました。それはシリコンバレーでもよく見かける方法だという事でした。

https://www.coursera.org/learn/machine-learning/

Page 3: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 3

そもそもなぜ機械学習?

プログラムをハードコードする事が困難な領域が存在するから

たとえばスパムフィルターのようなものを作ろうとした時、ハードコードされたプログラムで作ることは困難です。「何々だったらスパムである」というシンプルな法則が無いためです。ある単語が多かったらスパムである可能性が高いかもしれませんし、ある宛先から来るメールの場合はスパムである可能性が高いかもしれません。このような不確かでいくつあるか分からないスパムのルールを考え出して、ハードコードされたプログラムで組むのは大変です。また、スパムの特徴は日々変化します。そのような変化にプログラマーが追随するのも大変です。

他にも、クレジットカードの不正利用のようなものを自動検出するプログラムを書くのも困難です。「このような場合は不正利用」という明確でシンプルなルールが無いためです。また、スパムと同じく、日々違う形の不正利用が生まれ、どんな不正利用が今後生まれるか予測もできません。ハードコードされたプログラムがこの変化に追随する事は非常に困難です。

機械学習では、プログラムをハードコードする代わりにデータを利用してルールを自動調整します。このようにしておけば、傾向が変化した際、新たなデータを使ってルールを再調整すれば変化に追随することが出来ます。

Page 4: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 4

機械学習のざっくりとしたイメージ

機械学習は、プログラムをハードコードすることなく、データをもとに汎用の関数を調整することによって、有用な関数を得る方法です。ざっくりとしたイメージは以下のようになります。

学習フェーズ ( 得たいのは調整済みの hypothesis 関数 )hypothesis 関数は、後に便利に活用したい関数です。

調整済みの hypothesis 関数を使う時は、手組の関数と同じで、単に呼び出して使うだけです。引数を与えると、返り値が返って来ます。たとえば、写真を与えると、人が写っているか否かを true/false で返したり、スマートフォンの加速度センサー情報を与えると、持ち主が歩いているのか否かを true/false で返したりします。

training set( トレーニング用のデータ )

機械学習アルゴリズム

調整済みのhypothesis 関数入力 出力

調整済みのhypothesis 関数

未調整の hypothesis 関数

関数の入力値

関数の出力値

機械学習の調整パラメーターregularization のなど。

入力 出力

入力

入力

Page 5: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 5

一般的に 3種類の機械学習のカテゴリーがあります

supervised learning ( 教師あり学習 )学習データを与える際に、正解のデータを一緒に与えるもの。具体的には、ある入力に対して期待する出力がある場合、そのような入力と出力のペアを学習用のデータとして沢山用意し、入力と出力の相関をコンピューターに学習させる方式。学習後は、新たな入力値を与えればコンピューターは適切な出力値を算出してくれる。Andrew Ng 教授の講義で出てきた例 :

家賃の予測 スパムフィルター 文字の認識(手書き文字認識、 OCR のような活字の認識など) 写真の認識(写真に何が写っているかを判別する。人 , 自転車 , 車など)

unsupervised learning ( 教師なし学習 )学習データを与える際に正解のデータを与えないもの。Andrew Ng 教授の講義で出てきた例 :

異常検知 (製品の不良の検出、データセンターにおけるマシンの故障、 Web システムの不正利用 )

リコメンデーション 購買層をいくつのグループに分けるか

(T- シャツを売る際に何通りのサイズ (S,M,L,XL とか ) とし、そのサイズは具体的にいくつにするか )

多次元データを人間が理解可能な 3次元程度のデータに変換する方法。 reinforcement learning ( 強化学習 )

より多くの報酬が得られるように学習していく方式。たとえばゲームのパックマンをクリアする方法を自己学習するようなプログラムを作ることが出来る。 Andrew Ng 教授の講義では扱わなかった。

加速度センサーなどのセンサーデータやカメラのデータを扱う際にもよく用いられます。

Page 6: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 6

supervised learninglinear regression

( 数値の予測 )

Page 7: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 7

linear regression で何をしたいか?

さまざまな情報をもとに、ある数値を言い当てたいという状況が存在します。たとえば以下の様なものです。

さまざまな情報をもとに、妥当な家賃を決めたい 特定の状況になった時の消費電力を予測したい 加速度センサーの情報などから運動による消費カロリーを予測したい 食べ物の写真からカロリーを概算したい ダムの水位から、発電量を予測したい

このような時に、 linear regression が使えます。

Page 8: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 8

家賃を推測しよう!

以下のようなデータがある時、データをプロットしてみると家賃は家の広さが広くなるとそれに比例して高くなるという傾向が見えたとします。この時、データになるべく沿った直線を引こうとするのですが、どうやってこの直線を引けば良いでしょうか?

データにフィットする直線や曲線などの関数を決める事を「カーブフィッティング」と呼びます。 Excel の機能でも、「近似曲線」の機能で提供されています。カーブフィッティングの方法の 1つに linear regression(線形回帰 ) があります。機械学習向けライブラリーにもそのような機能が提供されています。

機械学習では、のような関数をデータから決める事を、「データから家賃を予測する関数を学習する」と表現します。また、この学習の際に用いるデータには答えである家賃のデータが含まれているため、「 supervised learning(教師あり学習)」であると言います。

家賃の例の場合、という関数が具体的に決まれば、新しい物件が出てきた際に、その物件の家の広さを関数に代入すると家賃が求まります。これを機械学習では「家賃が推測出来るようになった」と言います。

家の広さ () 家賃 ()21 6万円26 6.5万円30 8万円35 9万円・・・ ・・・

家賃

家の広さ ()

𝑦=𝑎𝑥+𝑏

Page 9: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 9

家賃を家の広さと路線価から推測しよう!

前のスライドでは家の家賃は家の広さだけに比例すると仮定しました。今度は家の広さと路線価から家賃を推測するようにしてみましょう。この場合、データをプロットすると 3次元になります。

のうち、 , は定数です。前のページと同じように、これらの定数はデータから決める事が可能です。 ここで用いたやをまとめて、以下のようにベクトルを用いた記法を導入します。このようなベクトルを feature vector

と呼びます。なお、この場合はは常に 1 とします。

, のような定数に関しても、今後はベクトルで表現することにします。なお、というのは行列の行と列を入れ替えた形のもので、「シータ・トランスポーズ (transpose) 」と読みます。

このようにやを記述すると、は以下のようにコンパクトにと記述出来るようになります。

家の広さ () 路線価()

家賃()

21㎡ 21万円 /㎡ 6万円26㎡ 32万円 /㎡ 6.5万円30㎡ 16万円 /㎡ 8万円35㎡ 28万円 /㎡ 9万円・・・ ・・・ ・・・

家賃

家の広さ ()

路線価 ()

𝑦=𝜃0+𝜃1𝑥1+𝜃2𝑥2

Page 10: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 10

もっと沢山の情報から家賃を推測しよう!

実際には、おそらくとても沢山の情報から家賃が決まるはずです。具体的には家の広さや路線価に加えて、地価、最寄りの駅までの距離、築年数、部屋数などなど、多くの条件によって家賃は決まりそうです。

このような多くの種類の情報に関しても、 linear regression は扱うことが出来ます。まず、家賃の予測をするためのデータはすべて feature vector となり、以下のように記述します。なお、この場合もは常に 1 とします。また、ベクトルに関しても同様に定義します。

家賃が~に比例すると仮定すると、家賃を算出する関数はは以下のようにと記述できます。

あとはデータを用いて~の値を決めれば、この式は家賃の予測に使えるようになります。家の広さ、路線価、地価、最寄り駅までの距離、築年数、部屋数を引数に入れれば、この関数は家賃を算出してくれます。

Page 11: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 11

家賃が家の広さの 2乗に比例している場合は?

以下のように、家賃が家の広さの 2乗に比例していると思われる場合、どうすればよいでしょうか?

この場合も、以下のように考えれば今までと同じ議論が成り立ちます。このように考えれば、結局家賃を予測する式はとなります。

あとはデータを用いて~の値を決めれば、この式は家賃の予測に使えるようになります。

家賃

家の広さ ()

𝑦=𝜃0 𝑥0+𝜃1 𝑥1+𝜃2𝑥12

Page 12: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 12

家賃が家の広さの 1乗 2乗 3乗 4乗 5乗に比例している場合は?

この場合も以下のように考えれば今までと同じ議論が成り立ちます。結局家賃を予測する式はとなります。

あとはデータを用いて~の値を決めれば、この式は家賃の予測に使えるようになります。 このようにより多くの項を入れた式(高い次数の多項式 : higher-order polynomial)で家賃を表現した場合、データに対して非常にフィットした関数が得られます。ただし、やり過ぎるとデータに含まれるノイズにまで関数がフィットしてしまい、その結果、未知の物件に対して家賃をうまく言い当てられない関数となっていきます。このような状況を「オーバーフィッティング」と呼びます。

家賃

家の広さ ()

オーバーフィッティング

Page 13: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 13

家賃がさまざまな情報の変換結果に比例する場合

家賃が、たとえば「家の広さ ×路線価」に比例したり、に比例したりするかもしれません。このような場合も、特徴ベクトルにそのような値を採用することで家賃を推測する式を立てることが出来ます。結局家賃を予測する式はとなります。

このような変換を入れれば入れるほど、家賃は込み入った関数として表現でき、関数としての表現の自由度が上がります。

関数の表現の自由度が低いものを「 high bias 」と呼び、関数の表現力が高いものを「 low bias 」と呼びます。

なお、どこまで特徴ベクトルの要素数を増やしてよいかですが、おおよそ数百とか数千まで増やしてもかまいません。

Page 14: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 14

をデータから求める方法

ここまで、家賃を予測するために、という数式で家賃を予測しようとしてきました。は家賃を予測する際に使用できそうな複数の情報の羅列で、「 feature vector(特徴ベクトル)」と呼ばれるものでした。は定数のベクトルであり、データを用いて決めるものでした。

hypothesis 関数のように、何かを予測するために使用する関数を「 hypothesis 関数」と呼び、と記述します。は、が決まれば、引数としてを代入することで予測値が決まる関数です。 hypothesis 関数は linear regres-sion の場合はという形をしていますが、他のアルゴリズムの場合は別の形をしています。

コスト関数m個の学習データが与えられた時、その m個のデータをに代入すると m個の予測値が得られます。この予測値と正解のデータとの誤差を「エラー」と呼びます。 (2乗誤差 )

エラーはが正解に近い値を出力すればするほど低い値となり、最小値は0です。エラーはを変えれば変わります。エラーのように、 hypothesis 関数の良さを見積もる関数を「コスト関数」といい、と記述します。なお、オーバーフィッティングを避けるためにコスト関数にはエラーの他に regular-ization という項を追加します。 regularization の項にあるの値を増減させることで、 regularization の強さを変えることが出来ます。を大きくすればするほど、の要素はゼロに近くしなければコストが大きくなるといったペナルティがかかる仕組みになっています。

hypothesis 関数のをデータから求める方法コスト関数を最小にするをどうにかして求めれば、与えられたデータに最もフィットするが得られた事になります。の求め方には色々ありますが、典型的な考え方は次のページで説明します。エラー regularization

注)やは番目の データという意味

Page 15: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 15

コスト関数の坂を転がり落ちて、落ち着いた所のが欲しい情報

コスト関数を最小化するを求めるためには、ボールが坂を転がり落ちるように、の値を少しずつ変えながら動かしていくという方法を使います。一番底に着くと、そこがコスト関数の最小値です。この最小値を求める方法はたくさんありますが、大抵機械学習のライブラリーがうまくやってくれます。詳細を知りたい人は、 Andrew Ng 教授の講義を受講してください。

このようなアルゴリズムでとても有名なものは gradient descent ですが、他にも優れたアルゴリズムは沢山あるようです。 conjugate gradient, BFGS, L-BFGS などです。実装済みのライブラリーもあるようなので、自分で実装する必要はあまりないそうです。

こんな形のの場合は、ボールが転がり落ちる先が複数あります。転がり落ちた先が最小値とは限りません。

どっちが低い場所だろう?

ボールは一度に「 × 傾き」ほど動かします。このを「 learning rate 」と呼びます。傾きが無くなるとボールは静止し、そこが答えになります。

× 傾き

Page 16: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 16

regularization の意味と重要性

次数の高い多項式で hypothesis 関数を表現した場合、以下のようにデータに対してオーバーフィッティングを起こしてしまいます。このようなオーバーフィッティングを抑制するためにあるのが reg-ularization です。 regularization は、以外のの値をゼロに近付ける性質を持ちます。

regularization の強さを調整するためのの数値をゼロから段々大きくすると、以下の様なフィッティングの傾向が生まれます。の調整次第で性能が変わってきますので、実システムではの値を自動選択するようなプログラムを作ります。(単にの値を順に変えていって、良さそうなを決めるという方法)

家賃

家の広さ ()

家賃

家の広さ ()

=0家賃

家の広さ ()

大きすぎる

家賃

家の広さ ()

調度良い

J (𝜃 )= 12𝑚∑

𝑖=1

𝑚

(h𝜃 (𝑥 (𝑖 ) )− 𝑦 (𝑖 ) )2+ 𝜆2𝑚∑

𝑗=1

𝑚

𝜃 𝑗2

エラー regularizationオーバー

フィッティング

Page 17: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 17

supervised learninglogistic regression

( 分類 )

Page 18: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 18

logistic regression で何をしたいか?classification problem と multiclass classification problem classification problem

classification problem とは、与えられたデータを true もしくは false のどちらかに分類する問題です。応用例としては以下の様なものがあります。

スパムフィルターe-mail を入力とし、出力としてスパムか否かを判別したい場合 (true/false)

病気の判定血液検査や X線写真などの情報をもとに、ある病気にかかっているか否かを判別したい場合(true/false)

multiclass classification problem複数の区分値に分類する場合は multiclass classification problem と呼びます。応用例としては以下の様なものがあります。

手書き文字認識1文字の手書き文字データを unicode の 1文字に分類したい場合 (複数の文字に分類 )

ジェスチャー認識スマートフォンやタブレットの画面上での大雑把な操作や、加速度センサー情報などから、利用者が行いたいこと ( コマンド ) を識別したい場合 (複数のコマンドに分類 )

モーション認識活動量計がやっているように、加速度センサーの情報を用い、歩いているのか、走っているのか、自転車に乗っているのか、車に乗っているのか、寝ているのかなどの活動の種類を判別したい場合

画像の認識示された画像に写っているものが人間なのか、車なのか、自転車なのか、バイクなのかなどをカテゴライズするような場合

Page 19: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 19

良性腫瘍・悪性腫瘍の判定( true/false) 腫瘍が良性腫瘍なのか悪性腫瘍なのかを判別したいときに、過去のデータをプロットしてみると、だいたい腫瘍の大き

さと年齢をもとに区分け出来ると分かったとします。この良性か悪性かの分かれ目を decision boundary と呼びます。decision boundary は、この例のように直線であることもありますし、曲線であることもあります。 decision bound-ary さえ決められれば、腫瘍の大きさと年齢から良性腫瘍なのか悪性腫瘍なのかをおおよそ判別できるようになるため、この境界を決めたいとします。

良性腫瘍なのか悪性腫瘍なのかを判別する条件を明確に記述すると、以下のように整理できます。

この decision boundary もデータからを求めることで決めることが可能です。 なお、 decision boundary の近くのデータに関しては、それほど強い自信をもって判断できません。一方、 decision

boundary から離れているデータに関しては(上記ルール上は)自信を持って判断できます。 logistic regression では、このような「確からしさ」も算出可能です。「確からしさ」を算出する方法としては、「シグモイド関数」 g を使います。

は、の時 (decision boundary の真上の時 ) は 0.5 となります。つまり「 0 とも 1 とも言えない」ので 0.5 です。が 0 より少し大きくなると小さな正の値となり、それより大きくなるほど1に近づきます。また、が 0 より少し小さくなると小さな負の値となり、それより小さくなるほど0に近づきます。

腫瘍の大きさ

𝜃0+𝜃1𝑥1+𝜃 2𝑥2=0もしくは𝜃𝑇 𝑥=0

良性 悪性

年齢

シグモイド関数

Page 20: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 20

画像の判定( true/false) 文字を1文字、手書きした画像と、その他の画像(風景写真など)を用意し、どちらの種類の画像なのかを判別したいとします。文字であれば 1, 文字でなければ 0 を出力するとします。このような判定も、 logistic regression で可能です。なお、画像はグレースケール(白黒画像)とします。

logistic regression の特徴ベクトルには、画像のピクセル値をそのまま使用します。たとえば 20x20ピクセルの画像を対象とする場合は、全部で 400ピクセルを扱う必要が有るため、特徴ベクトルとしては 401個の要素があるようなベクトルになります。

あとはを学習データによって決めれば、画像が手書き文字なのか風景写真などの別の画像なのかを判別できるようになります。

𝑥=(1

(0,0 )の位置にあるピクセル 値(1 ,0 ) の位置にあるピクセル値(2 ,0 ) の位置にあるピクセル値

…(19 ,19 ) の位置にあるピクセル値

)=(𝑥0𝑥1𝑥2𝑥3…𝑥400

) ,𝜃=(𝜃0𝜃1𝜃2𝜃3…𝜃4 00

)とすると、 𝑦= 11+𝑒−𝜃

𝑇 𝑥

Page 21: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 21

手書き文字の認識(分類)

1~3の数字1文字の手書き文字を数字に変換したいとします。 logistic regression は true/false の2 つに分割するものなので、複数のグループに分類するには工夫が必要です。

複数のグループに分ける際は、 one-vs-all という考え方を用います。

これらの decision boundary は学習データから決めることが可能です。decision boundary が求まれば、新たな手書き文字データを与えた際、「 1 である確率」や「 2 である確率」や「 3 である確率」がそれぞれいくらかをシグモイド関数によって算出することが出来ます。

たとえばコンピューターが自信を持って「答えは 2 である」と答える場合、「 2 である確率」がとても大きな値として算出されます。コンピューターが自信を持って答えられない場合は、3つとも 0 に近い値になります。

ピクセル値 𝑥1

12

ピク

セル

ピクセル値𝑥1

12

ピク

セル

ピクセル値 𝑥1

12

ピク

セル

ピクセル値 𝑥1

12

ピク

セル

1 とそれ以外 2 とそれ以外 3とそれ以外

Page 22: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 22

logistic regression とニューロンとの関係( logistic regression は 1 つのニューロンの処理に相当する)

人の頭の中にある最も基本的な素子は「ニューロン」と呼ばれる神経細胞です。このニューロンの動作はかなり昔 (1943年 ) から分かっていまして、以下の様なものです。

ニューロンは入力の値それぞれに重みを掛け算し、その総和が - を超えると発火し、に 1 を出力します。発火しなかった場合は 0 を出力します。数式で表現すると以下のようになります。この数式は logistic regression の数式と全く同じです。

ここで、やを以下のようにベクトルで表現すると、もう少し数式を整理できます。 ( とします )

𝑥1𝑥2𝑥3……𝑥10000

𝜃1𝜃2𝜃3

𝜃10000

𝜃0 yモデル化

シグモイド関数を使うと

とすると、

ヒトのニューロンは大体1000 ~ 10000 の入力を受け付けます

https://ja.wikipedia.org/wiki/神経細胞

Page 23: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 23

feedforward neural network (フィードフォワードニューラルネットワーク)

logistic regression では関数の表現の自由度が不足する場合、非常に関数の表現の自由度が高い feedforward neural network というものが使用できます。 feedforward neural network は、 logistic regression の出力を再度別の logistic regressionへ入力するようにしたものです。下の図を見ると、 one-vs-all を用いた logistic regression を拡張したものがfeedforward neural network になっている事が直観的に理解できると思います。

𝑥1𝑥2𝑥3𝑥4

𝑦1𝑦2𝑦 3

𝑥1𝑥2𝑥3𝑥4

𝑦1𝑦2𝑦 3

feedforward neural networkone-vs-all を用いたlogistic regression

通常の logistic regression (1個のニューロンに相当 )𝑥1𝑥2𝑥3𝑥4

𝑦 は 0 ~ 1 の値となる

Page 24: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 24

feedforward neural network の層の数などをどう決めるか

feedforward neural network を作る際、 Andrew Ng 教授のお薦めは以下の様なネットワークから始めると良いという話でした。

𝑥1𝑥2𝑥3𝑥4

𝑦1𝑦2𝑦 3

feature vectorの要素数だけ必要

分類先の分類の種類の数だ

け必要

まず、 Q の方向の層の数は最初 1 から始め、アンダーフィッティングを起こすようだったら徐々に層の数を増やすのが良い。また、 P の方向の数は、 feature vectorの数よりも多くしておく。層によって P の方向の数を増減させることは考えなくて良い。

P

Q

Page 25: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 25

をデータから求める方法

linear regression の時と同じく、 logistic regression や feedforward neural networkでも以下の様な概念が登場します。

hypothesis 関数linear regression の時はでした。 logistic regression の場合はです。また、 feedforward neural network の場合は少し複雑なので数式は書きませんが、 logistic regression を繋いでいった形として、が定義できます。

コスト関数linear regression の時と同じように、 logistic regression や feedforward neural net-work でもコスト関数を定義できます。ただし、数式が複雑なのでここには書きません。

hypothesis 関数のをデータから求める方法linear regression の時と同じように、コスト関数を最小にするをさまざまなアルゴリズムで求めます。特に feedforward neural network の場合は、「バックプロパゲーション」という方法でコスト関数を最小にするを求めることが出来ます。詳しいバックプロパゲーションの解説は、 Andrew Ng 教授の講義にあります。

Page 26: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 26

実プロジェクトへの適用

Page 27: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 27

機械学習システムの開発ステップ

スパムフィルターのような機械学習を用いたシステムを作ろうとした時、Andrew Ng 教授の場合は以下のステップをふむそうです。

1. 汚いソースコードでいいから、手早く最初のプロトタイプを Octave で作成する。作成にかける時間は1日程度。

2. プロトタイプの性能や状況を分析。この分析により、データが足りないのか、特徴ベクトルに特徴が足りないのかなどを判断する。

3. 誤判断となったデータを人の手で分析する。その結果、特徴ベクトルに追加したほう良い、新たな特徴のアイディアが出てくる。

4. 分析結果や新たなアイディアをもとに、新たなデータを集めたり、プロトタイプを改善し、再度ステップ2に戻る。

5. プロトタイプで満足する結果が得られたら、 Java や C++ などのプログラミング言語を用いて本番システムを構築する。

機械学習システムを作る際のポイント 次の1手として何をすれば良いかは自明ではありません。むやみに新たな

データを集めても時間の無駄になる可能性があります。よって、プロトタイプの診断方法がとても重要です。

何か手を打ったとして、その改善が結局のところどれほどシステムのパフォーマンスに貢献したかを数値化すべきです。(方法は後述)

Page 28: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 28

データの使い方

機械学習では、手元にあるデータを 3 つに分けて使用します。分ける際には、使うデータに偏りがないよう、最初にシャッフルします。また、データの値が同じ割合で各グループに入るようにします。

エラー関数は、出来上がった hypothesis 関数がどこまでそれぞれのデータにフィットしているかを数値として算出するための関数です。完璧にデータにフィットした場合、ゼロになり、全くフィットしていない場合大きな数値を返します。

データ1

データ2

データ3

...

...

...

...

...

...

...

60%

20%

20%

trainingset

crossvalidationset (cv)

test set

が入力されたらが出て欲しいという情報

の羅列

𝑥𝑐𝑣 , 𝑦𝑐𝑣

𝑥𝑡𝑒𝑠𝑡 , 𝑦 𝑡𝑒𝑠𝑡

呼び方 記法 データの利用目的

hypothesis 関数のをデータから算出するために用います。

regularization の強さを調整するために利用する。

性能評価のために用います。

エラー関数

𝐽 𝑡𝑟𝑎𝑖𝑛 (𝜃 )

𝐽 𝑐𝑣 (𝜃 )

𝐽 𝑡𝑒𝑠𝑡 (𝜃 )

12𝑚∑

𝑖=1

𝑚

(h𝜃 (𝑥( 𝑖 ) )− 𝑦 (𝑖 ) )2

Page 29: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 29

機械学習システムの性能改善のために出来ること

機械学習システムの性能改善のために出来ることはおおよそ決まっていて、以下のどれかです。スパムフィルターを例に、どのようなことをするかを具体的に紹介します。

この中で、特に下 2 つはデータ収集の作業となるため、やるとなると数ヶ月単位で作業時間がかかります。本当にこのアクションが改善に繋がるのか、ある程度確信を持った上で実施したいでしょう。どうやってこの判断をすればよいのか、以降のスライドで説明します。

性能改善のためのアクション

作業量 スパムフィルターの場合

hypothesis 関数の表現の自由度を上げ下げしてみる(詳細は次ページ)

軽微ニューラルネットワークの層の数を増減してみる。linear regression や logistic regressionの場合は多項式の次数を増減してみる。

regularization を強く効かせたり弱く効かせたりしてみる

軽微regularization を調整することでもデータに対するアンダーフィッティングやオーバーフィッティングを防止できます。

より多くのデータを入手する 大変

スパムフィルターの場合は、典型的には「ハニーポット」プロジェクトと呼ばれる方法でデータを入手する。つまり、スパム収集のためのアカウントを作成し、そこに来たスパムをデータとして利用する。

特徴ベクトルに新たな特徴を追加する

大変メールの場合、メールのヘッダー情報を特徴ベクトルとして入れてみたり、綴り間違えの数を特徴ベクトルに入れてみたりする。アイディアはさまざま。

Page 30: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 30

hypothesis 関数の表現の自由度とは

hypothesis 関数の表現の自由度は、以下のように自在に変えられます。現状のプロトタイプが high bias なのか low bias なのかを診断できると、使用している hypothesis 関数に自信を持つことが出来ます。

𝑥1𝑥2𝑥3𝑥4

𝑦1𝑦2𝑦 3

𝑥1𝑥2𝑥3𝑥4

𝑦1𝑦2𝑦 3

表現の自由度が低い(high bias)

表現の自由度が高い(low bias)

linear regression やlogistic regression

の場合

feedforward neural

networkの場合

Page 31: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 31

hypothesis 関数の表現の自由度が十分か否かを判定する方法

現状のプロトタイプが high bias なのか low bias なのかを診断するには、同じデータを用いて high bias な hypothesis 関数から low bias な hypothesis 関数まで変化させ、エラーがどのように推移するかを見ます。

このようなプロットをしてみると、 hypothesis 関数は high bias過ぎても low bias過ぎても良くないことが分かります。調度良い hypothesis 関数を探す必要があります。これを探すには、このようなプロットをした後に目視で確認するか、調度よい所を自動で探すプログラムを作ります。

エラー

high biashypothesis 関数

low biashypothesis 関数

𝐽 𝑡𝑟𝑎𝑖𝑛 (𝜃 )

𝐽𝑐𝑣 (𝜃 )

high bias では training setにも cross validation setにもフィットしない。

low bias では training setにかなり忠実にフィットする。

low bias では training set にオーバーフィットしすぎ、 cross validation set にはフィットしない。

調度良いところ

Page 32: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 32

regularization の調整がうまく行っているかを確認する方法

現状のプロトタイプの regularization がうまく調整できているか否かを確認することも重要です。

hypothesis 関数の調整と同じで、 regularization の強さも大きすぎても小さすぎても良くありません。調度良い適切な値を見つける必要があります。この調整の方法としてはプログラム的に探す事が多いのですが、安心のため、上記のようなプロットもしてみるとより安心できます。なお、ニューラルネットワークの場合は層の数を多めにしたものを固定的に使い、 regularization の強さでこのような調整を行う事が多いそうです。

エラー

大きな 小さな

𝐽 𝑡𝑟𝑎𝑖𝑛 (𝜃 )

𝐽𝑐𝑣 (𝜃 )

大きなを用いると training set にも cross validation set にもフィットしない。

小さなを用いると training setにかなり忠実にフィットする。

小さなを用いると training set にオーバーフィットしすぎ、 cross validation set にはフィットしない。

調度良いところ

Page 33: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 33

データの数を増やせば良いのか、新たな feature を追加するのが良いのかを判定する方法(新たな feature を追加すれば良い場合)

新たなデータを入手することは、場合によっては非常に大変な労力がかかる作業です。新たなデータを入手することで、現状のプロトタイプの性能が上がるのか否か、判断できると便利です。そのための方法として、 learning curve を描いてみるという方法があります。

[データを増やしても性能が改善しない状況]

このような状況を改善するには、以下の手が考えられます。 feature vector に新たな feature を追加する。 もっと low bias な hypothesis 関数を使用する。 regularization を弱くする。

エラー

データの数

𝐽 𝑡𝑟𝑎𝑖𝑛 (𝜃 )

𝐽 𝑐𝑣 (𝜃 )

少ない数の training set には完全にフィット可能

少ない数の training set で学習しても、未知のデータをうまく予測できない

これ以上データを増やしても性能が上がらない

この2つに関しては、先のページにあるように、きちんと調整されていれば問題は起こさない

Page 34: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 34

データの数を増やせば良いのか、新たな feature を追加するのが良いのかを判定する方法(データを増やせば良い場合)

[データを増やせば性能が改善する状況]

この状況を改善するには、以下の手が考えられます。 データの量を増やす。 もっと high bias な hypothesis 関数を使用する。 regularization を強くする。

エラー

データの数

𝐽 𝑡𝑟𝑎𝑖𝑛 (𝜃 )

𝐽 𝑐𝑣 (𝜃 )

少ない数の training set には完全にフィット可能

少ない数の training set で学習しても、未知のデータをうまく予測できない

まだギャップがあり、データを増やせば性能が上がる

ギャップ

この2つに関しては、先のページにあるように、きちんと調整されていれば問題は起こさない

Page 35: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 35

プロトタイプの性能を簡単に評価するにはスコアを用いる

プロトタイプの性能を簡単に評価するためには、スコアと呼ばれるスコア値を用いる事がよくあります。このスコア値が以前よりも高ければ、プロトタイプの性能は上がったとみなして良いですし、低くなれば性能は下がったと考えて良くなります。このような性能評価を用いると、性能を上げるためのさまざまな試行錯誤の中で良い指標となります。

スコアの計算方法

P(precision:精度 ) と R(recall: 再現率 ) の定義チェック用のデータ (cross validation set や test set) に対し、以下の A,B,C,D の分類をします。この分類の結果、それぞれのグループの個数を数え、 P や R の計算を行います。なお、この計算をする際には、レアケースである場合を A として考えます。

スパムが来るのがレアケースである場合、が常に 0 を返すような関数であっても、スパムフィルターの性能が高いという評価になりかねません。スコアを用いると、 ,となるので、は計算不能、となり、スコアとしては評価不能となります。

1 0

1 true positive(A)

false positive(B)

0 false negative(C)

true negative(D)

データ上の値

の計算結果

𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛(精度)=𝐴

𝐴+𝐵𝑅𝑒𝑐𝑎𝑙𝑙 (再現率)=

𝐴𝐴+𝐶

エラーメッセージ例: The sum of true positives and false positives are equal to zero for some labels. Precision is ill defined for those labels.

Page 36: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 36

使用する学習アルゴリズムの優劣より学習データの量が性能の決め手になる

2001年に Michele Banko と Eric Brill が出した論文によると、複数の異なる学習アルゴリズムを用いてある機械学習の問題のベンチマークをしてみると、学習アルゴリズムの違いよりも、使用する学習データの量が性能の決め手になることが分かり、機械学習の世界では「最も多くのデータを持っている者が勝者になる」と言われています。この洞察により、「ビッグデータ」の重要性が理解され、様々な企業がより多くのデータを集めたがっています。

http://ucrel.lancs.ac.uk/acl/P/P01/P01-1005.pdf

性能

の高

学習データの量

"It's not who has the best algo-rithm that wins. It's who has the most data."

(注)この後に活発に研究された deep neural network (DNN) により、実際には「アルゴリズムの違いなんて関係ない」という部分が崩れています。今は、 DNN かそれ以外かで性能がかなり違うという状況になっています。

Page 37: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 37

巨大データを持っている場合の必勝法

まずは「 low bias algorithm 」を用いることが前提になります。「 low bias algorithm 」とは、関数の表現の自由度が高い機械学習アルゴリズムです。具体的には多数の項を追加した linear regres-sion を使用したり、沢山の層を導入した feedforward neural network です。これらはどんなデータにもフィット可能な柔軟性を持ちます。典型的には層をたくさん持つ feedforward neural networkを使います。

feedforward neural network のような「 low bias algorithm 」を用いれば、非常に高い表現の自由度があるため、表現形式がボトルネックになることはありません。「 low bias algorithm 」は、データが少ない状況ではデータに対しておかしなフィットの仕方をします。しかし、巨大データがあれば、こんな心配も無くなります。簡単に非常に性能の高いものを得ることが可能です。

𝑥1𝑥2𝑥3𝑥4

𝑦1𝑦2𝑦 3

𝑦

𝑥データが少ない時

𝑦

𝑥巨大なデータさえあれば

𝑥=(𝑥0𝑥11

𝑥12

𝑥13

𝑥14)=(

𝑥0𝑥1𝑥2𝑥3𝑥4

) ,𝜃=(𝜃0𝜃1𝜃2𝜃3𝜃4

) , 𝑦=𝜃𝑇 𝑥

higher degree polynomial 層をたくさん持つ feedforward neural network

Page 38: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 38

OCRソフトを作るプロジェクトでは、以下のようにいくつかのステップで全体が動作します。このように複数の機械学習が組み合わされたものを machine learning pipeline と呼びます。

1. テキストエリアの検出2. テキストエリアを1文字1エリアへ分割3. 1文字の画像を1文字のデータに分類

このような複雑なシステムを開発するためには、各ステップごとに機械学習の開発チームを割り振り、それぞれの担当ステップの精度が上がるように努力します。

なお、このような多段の処理が必要なシステムの場合、最終的な OCR の認識率というのは全ステップの総合評価が結果としてあらわれます。 machine learning pipeline のうちどのステップが認識率のボトルネックになっているか調査するためには、次ページで説明する「 ceiling analysis 」を行います。

実プロジェクトにおけるサブシステム分割の例(OCRソフトを題材に)

入力データ例(画像)

→"R"

Page 39: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 39

ceiling analysis ceiling analysis とは、 machine learning pipeline の中の各ステップを、機械の代わり

に人間が処理した場合、どこまで性能が上がっていくかを見る手法です。ほぼ完璧な認識率を誇る人間が各ステップを処理することで、どのステップを改善することが全体の改善に繋がるのかを判断できます。

この例では、テキストエリアの検出の際に、人間レベルの完璧な仕事が機械にできた場合、全体の認識率は 9% 向上することが分かります。逆に、テキストエリアを 1文字 1エリアに分割するステップを人間レベルの精度に引き上げたとしても、たった1%の性能向上しか見込めないことになります。よって、何に注力すべきかがこれでよく分かります。

なお、このような分析は、一般的なシステムの性能向上においても使える手法です。システムが複数の処理ステップが組み合わさっている時、各ステップを理想的な状態になったと仮定してみて、全体性能がどこまで上がりそうかを見ると、良い示唆が得られます。

テスト1 テスト2 テスト3 テスト4

テキストエリアの検出

機械 人間 人間 人間

テキストエリアを1文字1エリアへ分割

機械 機械 人間 人間

1文字の画像を1文字のデータに分類

機械 機械 機械 人間

全体の認識率 85% 94% 95% 100%

9% の改善 1% の改善 5% の改善

Page 40: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 40

unsupervised learningprincipal component

analysis (PCA:主成分分析 )

Page 41: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 41

PCA を使った dimensionality reduction の方法

PCA(主成分分析 ) は、機械学習では feature vector の次元を下げる時に使えるアルゴリズムです。次元を下げるとはどういった意味かを説明します。

上の図のように、の3次元からなる空間があるとして、その中にデータがプロットされているとします。よくよく見ると、データはある平面上にしか存在していません。このような場合、新しく軸を2つほど作り、この2つの軸ですべてのデータを表現し直すことが可能です。このようにすると、3次元空間だった空間を2次元空間へ変えることが出来ています。次元が減ったということになります。

次元を下げた表現のデータ、元の次元に復元することも可能です。(可逆変換) 上の図のように完璧に新たな次元の空間にすべてのデータを引っ越しできるとは限りませ

ん。次元を下げるにしたがい、通常は元のデータがいくらか欠損していきます。どこまで次元を下げると、どこまでデータが欠損するかも算出することが可能です。

𝑥1

𝑥 2

新しい軸1新しい軸2

𝑥3

Page 42: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 42

PCA の便利な使い方

その1:機械学習システムのスピードを上げる方法として

PCA を用いて feature vector の次元圧縮をすると、 feature vector の次元が下がることで機械学習システム全体の動作スピードが上がります。ただし、次元を下げ過ぎると重要なデータの特徴まで消してしまい、ちゃんと機械が判断出来なくなってしまうため、注意が必要です。

その2:多次元データを可視化する方法として

人間は4次元以上の空間を認識できません。どうしても2次元空間か3次元空間に次元を落とさないとデータを可視化出来ないということになってしまいます。このデータの可視化のために、無理やり PCA を用いて2次元空間などにデータを落とし込み、データを可視化する方法があります。

Page 43: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 43

unsupervised learninganomaly detection

(異常検知 )

Page 44: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 44

anomaly detection の概要

出荷する製品の品質的な異常や、エンジンの不調、データセンターにおけるマシンの異常、ネットワークの異常、カード決済の不審な操作など、「いつもと違う」事を検出したい場合があります。このような事を検出する方法が anomaly detection と呼ばれるものです。

anomaly detection では、 feature vector をガウス分布にフィッティングします。これにより、「いつもの feature vector はどんなものか」を決めます。なお、以下の図は 3次元ですが、実際には feature vector はもっと高い次元であることが多いため、これの多次元版のイメージになります。

何を正常とし、何を異常とするかは、このの値次第です。の値を上げれば、より多くの状況で異常と判断されますし、の値を下げれば、非常に異常な状態でのみ異常と判断されます。

𝑥1𝑥2

より上は正常、より下なら異常

この高さをとする

Page 45: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 45

おわりに

今回、 Andrew Ng 教授の授業で取り上げられた内容の中で、色々説明できなかったトピックがあります。およそ受講に 2ヶ月かかる講義を 2 時間で紹介することは難しいです。扱うことが出来なかった主なトピックを以下に列挙します。これらについて内容を知りたい場合は、ぜひ Andrew Ng 教授の講義を受講して頂ければと思います。

k-means によるクラスタリング support vector machine back propagation の中身 リコメンドシステム 大規模データを扱う方法や、人工的に学習データを増やす方法 各種の詳細な内容

最新の機械学習の世界はこの講義内容から離れ、どんどん進んでいます。この講義はAndrew Ng 教授によって、おおよそ 2008年頃に作成されたコンテンツなのですが、その後、 2010年あたりから deep neural network と呼ばれる技術革新が広く認識されました。 Andrew Ng 自身、 deep neural network にフォーカスした研究を行うようになり、 deep neural network の世界での有名人にもなっています。最近の AI 関連のニュースで目にする成果は、どちらかというと deep neural network に関するニュースの方が多く含まれるようになっています。このような事情で、この講義内容は「最新の内容」というわけではなくなっています。機会があれば、次回は deep neural network にフォーカスした勉強会を開催したいと思います。

Page 46: 「機械学習 By スタンフォード大学」勉強会 2015.09.11

ULS Copyright © 2015 UL Systems, Inc. All rights reserved. 46

おまけ: deep neural network で、いま出来ることの例

音声認識:今の Google の音声認識がそうです。 画像認識:既存の機械学習よりも非常に高い精度で

何が写っているかを認識することが出来ます。

イメージ・キャプショニング:示された画像に対して、その画像に対する短い説明をさまざまな言語で生成できます。Long Short Term Memory (LSTM) recurrent neural network という技術で実現できます。例) http://www.ted.com/talks/fei_fei_li_how_we_re_teaching_computers_to_understand_pictures

文章の作成:簡単なものであれば文章を生成することが可能です。このような文章の自動生成は、 AP 通信などが既に使用しています。 recurrent neural network を使ったものがよく知られています。

人間とのチャット:マニュアルを覚えて適切な助言をチャットを通じて人間に与えたり、世間話をしたりする事が可能です。(例: http://arxiv.org/pdf/1506.05869.pdf)このような事も、 Long Short Term Memory (LSTM) recurrent neural network という技術で実現できます。以下はチャットの例です。

http://googleresearch.blogspot.jp/2014/09/building-deeper-understanding-of-images.html

例)