65
Machine Learning Bootstrap 2015年10月9日 TIS株式会社 コーポレート本部 戦略技術センター 久保 隆宏

Machine Learning Bootstrap

Embed Size (px)

Citation preview

Page 1: Machine Learning Bootstrap

Machine Learning Bootstrap

2015年10月9日 TIS株式会社 コーポレート本部 戦略技術センター 久保 隆宏

Page 2: Machine Learning Bootstrap

Agenda

機械学習の解説

機械学習とは

機械学習の使いどころ

機械学習の仕組み

機械学習を実装するには

(おまけ)機械学習関連の情報収集について

⇒ハンズオンへ

2

Page 3: Machine Learning Bootstrap

Who are you?

業務コンサルタント出身。

化学系メーカーへのパッケージ導入や周辺業務システム開発を手掛ける(ASP.NET VB.NET/C#)。

現在は「人のパートナーとなれるアプリケーション」の研究開発(Python/機械学習)。

サイボウズ公認kintoneエヴァンジェリスト

3

Page 4: Machine Learning Bootstrap

Tech-Circle

月一程度でTech-Circleという勉強会を開催しています(本日の内容も、以前開催した勉強会の資料をリバイスしたもの)。

4

• 今、一番おすすめしたい技術を紹介

• 技術に実際に触れて試せるハンズオンスタイル

• 参加者同士で対話でき、サポートが厚い少人数形式

Page 6: Machine Learning Bootstrap

機械学習とは

6

Page 7: Machine Learning Bootstrap

機械学習とは

7

人がルールを教えるのでなく、データからルールを学習させる技術。 例:ニュース記事を分類するケース

人(プログラマー) ルール

データ 学習 ルール

AKB=芸能、国会=経済、 ・・・

与えられたデータからその法則(ルール)を学習

記事1->芸能 記事2->経済 ・・・

Page 8: Machine Learning Bootstrap

自分で学習してくれるんやろ? これからは仕事しなくてええんや!

8

Page 9: Machine Learning Bootstrap

機械学習の特性

9

データがあればなんでもできるんでしょ? データから判断できることは判断できるようになる。人が見逃していた判断が見つかることはあるが、人でもわからないような発見をすることはほぼない。 (容疑者のデータを入れたからといって犯人が分かるわけではない)。

よくある誤解

スゴイ精度が出るんでしょ? 一部領域を除き、基本的には人の判断の方が精度が高い。また、精度が100%になることはない。

勝手に学習してくれるんでしょ? 基本的に、学習させるためのデータは人が用意する必要がある。自律的に学習させる手法は存在するが、そのための環境(状況設定)は人が整えてやる必要がある。

Page 10: Machine Learning Bootstrap

10

機械学習って・・・

Page 11: Machine Learning Bootstrap

機械学習の特性

11

精度 そこそこの精度が出せ、領域によっては人間以上の精度で判断できる。

処理速度 学習済みのことであれば、高速に判断できる。また、大量のデータを扱える(X万ユーザーそれぞれについておすすめの商品を提案する、など)。

タフネス 24時間働いても疲れない、判断が鈍くなったり遅くなったりしない。

人間ほどではないが、複雑なルールに基づく処理を、そこそこの精度で大量/高速に処理できる

Page 12: Machine Learning Bootstrap

機械学習の使いどころ

12

Page 13: Machine Learning Bootstrap

機械学習の使いどころ

13

A

C

B

気温・株価・売上etc

画像/音声認識 異常検知etc

値の予測 分類の予測

機械学習でできるのは主に以下二つの予測。

Page 14: Machine Learning Bootstrap

機械学習の使いどころ

ユーザーの評価値を予測して推薦

Amazon: 商品レコメンド Gmail: 迷惑メールフィルタ

Facebook: 顔認識によるタグ付

成功を収めている、メジャーな事例

値の予測 分類の予測

・大規模なデータ/ユーザー ・完璧な精度は必要ないが、あるとうれしい(人間の作業のサポート) 機械学習の強みを活かした適用

Page 15: Machine Learning Bootstrap

機械学習の使いどころ

人間でも予測困難なものは当てられない。

株価の予測 Android: 顔認識を利用したロック

適用が難しい領域

値の予測 分類の予測

・人間にも不可能なことをやらせる ・完璧な精度が必要なシーン ・単純なルールの方が適しているシーン 名刺管理のSanSanのように、システム+人の力を活用した例もある

パスワード(ルール)の方が早い。また、夜など状況によっては解除できない可能性も。 ただ、セキュリティ的な面の需要は考えられる。

スマートフォンのアシスタント機能

音声認識は100%にはならない。 アイコン化されたボタンをタップする(ルール)方が簡単

Page 16: Machine Learning Bootstrap

付加価値の創出

Bill Guard: オンライン決済の不正利用の検知

ダイキン工業: 故障の予知によるサポートサービス

東京海上日勤火災保険: 顧客属性(攻め・守り)の自動判定

コストの削減

Googleデータセンター :消費電力削減

日本郵船: エンジン制御による燃料費削減

ThyssenKrupp Elevator: 機械学習によるビル管理

新規事業の創出

千葉県: 健康診断データを活用したマーケット創出

クックパッド: レシピデータの提供・分析サービス

機械学習の使いどころ

ビジネス領域での応用例

Page 17: Machine Learning Bootstrap

17

muwonder

音楽レコメンドを行うサービス。今聞いている音楽をベースにして「もう少しアップテンポがいいですか?」といった応答形式で好みの音楽を探していける。

会議診断士さゆり

会議の様子を見て、それが無駄かどうかを診断してくれるサービス。会議中にアドバイスを行ってくれる。

機械学習の使いどころ

実際作ってみたもの

Page 18: Machine Learning Bootstrap

18

Enigma Travel

旅行の行先を決めてくれるサービス。旅行に参加するメンバが行うのは、提案されてくる観光地の写真の中から気に入ったものをクリックするだけ。

そうすると、システム側で各人からお気に入りとして登録されたイメージに合う観光地・ツアーを予算範囲内で決定し、メンバに通知してくれる。

おんぱしゃ

写真を撮るとそれが楽曲になる、というサービス。誰でも、どこでも、写真を撮るだけで作曲ができ、思い出の写真が曲にのりスライドショーで表示される、というアプリ。

作成した楽曲は、Pepperが歌ってくれたりもする。

機械学習の使いどころ

実際作ってみたもの(@ハッカソン)

Page 19: Machine Learning Bootstrap

機械学習の使いどころ

文化の理解

音楽、また文章のパターンから分類を類推

体のサポート

心拍や瞬きの回数といった身体データから、適切な運動を提案するなど。

嗜好の理解

ライフログのような行動データの記録が一般的になれば、嗜好の学習も可能?

とれる値が増えてくるため、予測によるサポートが充実していく。

画像や音声の認識が進むにつれ、その先の概念の学習に道が開かれる

感情の理解

表情や声と感情の相関について学習

今後の予測

値の予測 分類の予測

Page 20: Machine Learning Bootstrap

20

機械学習の使いどころ

機械学習は、人間ほどではないが、複雑なルールに基づく処理をそこそこの精度で大量/高速に処理できる。 これにより、何百万と配信されるアプリケーション、また多くのユーザーそれぞれに対し、「人間的な」対応や判断を行う機能を実装することができる。 そのメリットとして、以下のようなものがあげられる。 • サービスにさらなる付加価値を付ける

レコメンド、サポートサービス • コストダウン

運用管理コスト、異常検知自動化による無人化 • 新サービスの創出

自社データを活用したサービスプラットフォーム

Page 21: Machine Learning Bootstrap

機械学習のしくみ

21

Page 22: Machine Learning Bootstrap

22

データ 学習 ルール

機械学習の流れ(確認)

Page 23: Machine Learning Bootstrap

機械学習のしくみ

23

機械学習とは、モデル(機械)の、パラメーターの調整(学習)を行うこと。 ○モデル 要するに数式(すごいざっくりした説明だが・・・) ○パラメーター調整 数式の中にあるパラメーターをデータに合うよう調整する(誤差の最小化)。

Page 24: Machine Learning Bootstrap

24

データ 学習 ルール

機械学習のしくみ

モデルの選択

パラメーター調整

Page 25: Machine Learning Bootstrap

機械学習のしくみ

25

データに合うよう調整するのが学習だが、どのような「データ」を与えるかで少し異なる。

教師有り学習

データ 答え

答え(ラベル付き)のデータを与える。 予測結果と与えられた答えの間の誤差が小さくなるようパラメーター調整を行う。 これにより、データと答えの間のルールを学習する。

教師無し学習

データ

単純にデータのみ与える。 同じ分類にしたデータ同士の差異が小さくなるよう、パラメーターを調整する。 これにより、データ内のルールを学習する。 (白のボックスの位置で分けられそうなど)

クラスタリングの場合

Page 26: Machine Learning Bootstrap

機械学習のしくみ

26

データを与えない手法もある。システム自身がデータを得られる環境を用意し、そこに適合させるというイメージ。

強化学習

環境を与え、その中で行動させる。 行動に対する報酬を設定し、その報酬が最大になるようパラメーターを調整する。 これにより、特定環境下で報酬が最大になる戦略(ルール)を学習する。

ゲームでプロゲーマー並みの点数をを出したと話題になったDQNはこの

学習のタイプ

Page 27: Machine Learning Bootstrap

機械学習のしくみ

27

機械学習とはモデル(機械)を選択し、パラメーターの調整(学習)を行うこと。 パラメーターは、実際のデータと予測したデータの差異が小さくなるように調整される。 学習のさせ方は、以下のようなものがある。 • 教師有り学習: 答え付きデータを与え、その関係を学習させる • 教師無し学習: データのみ与えて、その特徴を学習させる • 強化学習: あるルール(環境)の中で、最適な行動原理を学習させる なお、最近流行のディープラーニング(深層学習)は、ニューラルネットワークを多層にしたモデルを扱う手法全般を指す (多層ニューラルというモデル・多層ニューラルの学習手法双方を含む) 。

Page 28: Machine Learning Bootstrap

機械学習のしくみ

28

これからは全部ディープラーニングにすればええんやろ? ディープラーニング、いわゆる多層ニューラルネットは精度が高い分、学習に大量のデータが必要です(収束も遅い)。また、その判断基準を人が理解することは難しいです。 何事も適材適所です。基本的にはシンプルなモデルから始めましょう。多くの場合、それで十分です。

教師無しはデータだけあればいいんやろ?簡単やん! 教師無し学習では、教師を与えないため、分類結果は機械任せになります。分類結果が人間に理解できるもの(意図したもの)とは限らないですし、その判断基準も予測できません。 データの傾向をつかんだり、特徴を抽出するには良いですが、安易に教師無しにするのは危険です。

よくある誤解

Page 29: Machine Learning Bootstrap

機械学習を実装するには

29

Page 30: Machine Learning Bootstrap

機械学習を実装するには

30

導入のスピード

拡張性 ライブラリ型

パッケージ型

サービス型

scikit-learn(Python)

MLlib (Scala等)

mahout (Java)

Jubatus

Azure Machine Learning

Google Prediction API

Prediction I/O

クラウド上で実装しHTTPから使用

組み込み済みの機能をAPIで使用

プログラムに組み込む

Page 31: Machine Learning Bootstrap

機械学習を実装するには

ライブラリ型:プログラムに組み込むライブラリ形式で提供されているもの

○:高い自由度でプログラムに組み込むことができる

×:利用にあたっては専門的な知識が必要

パッケージ型:よく利用するアルゴリズムをサーバー等にまとめたもの

○:目的 (推薦・異常検知など)に応じまとまった形で機能が提供されており、利用しやすい

×:パッケージが提供するAPI・機能の範囲でのみカスタマイズが可能。

サービス型:クラウド経由で提供するもの

○:クラウド上でサービスが提供されており、導入の敷居が低い。

×:手軽に導入できる分、機能・データ量等に制限がある場合がある。課金体系にも注意。

31

自由度と使いやすさのトレードオフ

Page 32: Machine Learning Bootstrap

機械学習を実装するには

実際使ってみよう!

ライブラリ型:scikit-learn

scikit-learn-notebook

パッケージ型:Jubatus・・・は用意できなかったので事例を

住友精密工業株式会社(2014/2/12)

住友精密が提供するビニールハウス温度管理サービスにおいて、ビッグデータのリアルタイム分析基盤「Jubatus」を導入。各センサユニットから得られたセンサデータを機械学習し、個々のビニールハウスにおける季節毎の異常値の自動検知や最適な温度管理の自動設定の実現を目指す(現在は検証中)。

クラウド型:Azure Machine Learning

Azure Machine Learning を利用したアプリケーション開発

32

今からハンズオンで使います

Page 33: Machine Learning Bootstrap

機械学習関連の情報収集について

33

Page 34: Machine Learning Bootstrap

機械学習関連の情報収集について

基礎知識 Courseraの機械学習コース

最もおすすめ。日本語字幕もあり(最近、自分のペースで進められる自習用コースも開設)。

日本語の解説を書いてくれている方もいる。こちら参照(① ② ③ ④ ⑤)。

ただ、機械学習は数式と英語の海なのでもう慣れておいた方がいいという説あり。

実践 機械学習システム

扱っているテーマ(自然言語処理・レコメンドなど・・・)が豊富で、基礎知識と応用をバランスよく学ぶことが可能(ただ、理論的な説明はあまりないため、基礎理論を学んだあとの応用として◎)。

機械学習 はじめよう

サイボウズエンジニアの方による非常に丁寧な解説。実装例はないので、Pythonを使って自分で実装していったり、英語でわからないときに見返すと良い。

言語処理100本ノック

自然言語処理マスターに向けての100の課題を提供している。2015年にリニューアル。旧版はこちら。Pythonの入門としても良い。

(機械学習プロフェッショナルシリーズ)

書いている人がばらばらなため、難易度にもばらつきがある。全体的にはわかりやすく書かれているが、買う際は可能であれば中身を見た方が良い。

Pythonも含めた、機械学習ライブラリの情報 awesome-machine-learning

34

Page 35: Machine Learning Bootstrap

機械学習関連の情報収集について

最初の一歩としてあまりお勧めしないもの(数学の素養がある場合を除く) はじめてのパターン認識

パターン認識と機械学習(上下)

これくらい読んどくべきでしょ、という意見はあると思います。ただ、最初にこれらに取り組むと高い確率で挫折すると思います。

そのため、先ほど上げた基礎知識編から初めて、必要に応じて読むという方がいいと思います。

35

Page 36: Machine Learning Bootstrap

機械学習関連の情報収集について

36

数学・統計の知識を身に着けるために(上記のような本を読みこなすために) データ解析のための統計モデリング入門 一般化線形モデル・階層ベイズモデル・MCMC (確

率と情報の科学)

上の2冊に比べればだいぶ読みやすい

データ分析のための線形代数

少し見ただけだが、かなりわかりやすい(版を重ねてないのが気になるが・・・)

Page 37: Machine Learning Bootstrap

Hands On Start

Page 38: Machine Learning Bootstrap

ハンズオンAgenda

ハンズオンの目的

ハンズオンの解説

機械学習アプリケーションの構成

データの分割

モデルの評価

Advanced

Herokuへのデプロイ

モデルのチューニング

38

ハンズオンの手順については、 こちらを参照してください。

Page 39: Machine Learning Bootstrap

ハンズオンの目的

39

本日のハンズオンの目的は、手書きの数字を認識するWebアプリケーションの精度を上げていくことです!

Page 41: Machine Learning Bootstrap

41

機械学習モデルを作成するプロセスを体験する

Page 42: Machine Learning Bootstrap

リポジトリ構成について

42

machines

tests

number_recognizer

machine_loader.py

__init__.py

number_recognizer.ipynb

machine.pkl

__init__.py 各学習モデルはフォルダで区切る。 中にiPython notebookを作成し、モデルの構築/学習/評価方法について記述。

machinesフォルダ内の機械学習モデルをロードするための汎用処理。 run_application.py

Webアプリケーションを実行する

application

data applicationフォルダにwebアプリ、 dataフォルダに学習用データ、 machinesフォルダに機械学習モデル を配置

Page 43: Machine Learning Bootstrap

リポジトリ構成について

43

機械学習アプリケーションの構成として、どういう風にするのがいいのかはまだ明確な答えはありません。

今回このような構成にしているのは、以下の意図があります。

applicationとmachinesを分けることで、分業しやすくする (アプリチームと機械学習チームが分かれる場合など)。

複数の学習モデルを使う場合に備え、中で仕切りを立てる。

ドキュメント(iPython notebook)を残しておくことで、モデルの正当性とノウハウの引き継ぎを担保する。

大規模な場合、構築/学習はさすがにバッチとなるが、手法についてはきちんと書いておく

グラフを表示してモデルの状態を見る、レポートを表示してみるなど、検証・確認用スクリプトを共有しておく

Page 44: Machine Learning Bootstrap

iPython notebook

44

コードの実行結果を含んだドキュメントを作成できるツール。

言語非依存の部分がJupyterとして独立しており、Python以外の言語のカーネルの開発も行われている(こちら参照)。

詳しい使い方は、以下をご参照ください。

はじめるiPython notebook

Page 45: Machine Learning Bootstrap

機械学習モデルを作成するプロセスを体験する

45

今回、アプリケーション内で使用される数字認識の機械学習モデルはmachines/number_recognizer内に定義されています。

まずは、この機械学習モデルを作成するプロセスを体験していきます。

動作確認で立ち上げた、iPython notebookの画面を開いてください。

Page 47: Machine Learning Bootstrap

機械学習モデルを作成するプロセスを体験する

47

機械学習の構築プロセスは大体このように進んでいきます。

上の実行ボタンで文中にあるPythonコードを実行できるので、最後の保存(Store the Model)まで実行していってみてください。

Page 48: Machine Learning Bootstrap

機械学習モデルを作成するプロセスを体験する

48

最後まで実行を行い、機械学習モデルを保管したファイルがきちんと更新されていればOKです。

Page 49: Machine Learning Bootstrap

49

データの分割

Page 50: Machine Learning Bootstrap

データの分割

50

精度・・・ほぼ100%??

Page 51: Machine Learning Bootstrap

データの分割

51

Page 52: Machine Learning Bootstrap

データの分割

52

Page 53: Machine Learning Bootstrap

データの分割

53

学習に使ったデータで予測を行い、それで精度の評価を行っている。 これはこれで意味があるが(ちゃんと学習したか評価)、最終的な目的は「学習していないデータに対してどれくらい当てはまるか」なので、その精度はこれでは計測できない。

Page 55: Machine Learning Bootstrap

55

モデルの評価

Page 56: Machine Learning Bootstrap

モデルの評価

56

精度は良い方がいいですが、「良すぎる」場合は問題が潜んでいる可能性があります。具体的には、以下のような問題です。

過学習 データの不均衡

学習用データに過剰に適合してしまい、未知のデータに対応できなくなっている状態。

精度

データ量

右図のように、学習データに対する精度(緑)が非常に良いのに、評価データに対する精度(赤)が上がらなくなる。

データの中に大きな偏りがあり、単純な予測でも高い精度が出てしまうケース。

99%: A

1%:B

上図のように、99%がAなら「常にA」としても精度は99%になってしまう。

Page 57: Machine Learning Bootstrap

モデルの評価

57

そのため、以下のような対応を行う必要があります。

過学習 データの不均衡

基本的には、予測データに対して、モデルが複雑になりすぎている。

=データとモデルの複雑度の不均衡

対策としては、以下。

• 特徴量を減らす

• 単純なモデルに変える

• 学習データを増やす

または、正則化を行いモデルのパラメーターに対し制約を課す。

簡単な対応としては、少ない方のデータを増やすことが挙げられる。

そして、単純な精度(当たった数/総数)だけでなく、より詳細な分析を行う。

例:前述のデータが少ないBについて、

• 適合率: Bと予測したものが本当にBだった割合(シュートの精度)

• 再現率: 全体のBのうち、Bと予測できた割合(シュートの本数)

上記の精度をきちんと確認する。

Page 58: Machine Learning Bootstrap

58

よすぎる精度は基本的に疑う

Page 60: Machine Learning Bootstrap

60

Advanced

Page 61: Machine Learning Bootstrap

Herokuへのデプロイ

61

せっかく作ったアプリケーションなので、ぜひHerokuへデプロイして実際使えるようにしましょう。

とはいえ、やることはHerokuボタンを押すだけです。

conda-buildpackを利用することで、Heroku上でcondaによるアプリケーション環境構築が可能になります。

これにより、Herokuでも簡単に機械学習系アプリケーションを稼働させることができます。

詳細はこちらを参照してください。

Page 62: Machine Learning Bootstrap

モデルのチューニング

62

モデルを構築する際には、こちらで指定しなければならないパラメーターがいくつかあります(今回の場合、損失関数(loss)や学習率(alpha)など。これをハイパーパラメータと呼びます)。

これらのパラメータが何を意味するのかについては、今回は省きますが、要は外から指定しないといけないパラメーターがいくつかあり、それによってモデルの精度も変わってくるということです。

このハイパーパラメータを変えながら精度を計算していき、最適なものを探索することをGridSearchと言います。

scikit-learnではこれをサポートする機能があり、この機能によりモデルのチューニングを行うことができます。

Page 63: Machine Learning Bootstrap

オンライン機械学習

63

データを一度に用意して学習させる以外に、逐次学習させる手法もあります。

これを、オンライン学習と呼びます。

今回は、アプリケーション上でフィードバックを与えることで学習させることができるので、試してみて下さい。

※ユーザーの入力ほど信頼できないものはないので、普通はこうしたスタイルで学習させることはありません。一旦データを集めて、的外れなデータを除外したのちに学習させる方が賢明です。

また、動的に学習してしまうと予期しない方向へ学習が進んでしまうことも想定されます。そのため、オンライン機械学習の採用に当たってはその設計を慎重に行う必要があります。

Page 65: Machine Learning Bootstrap

Thank you