Upload
takahiro-kubo
View
929
Download
2
Embed Size (px)
Citation preview
Machine Learning Bootstrap
2015年10月9日 TIS株式会社 コーポレート本部 戦略技術センター 久保 隆宏
Agenda
機械学習の解説
機械学習とは
機械学習の使いどころ
機械学習の仕組み
機械学習を実装するには
(おまけ)機械学習関連の情報収集について
⇒ハンズオンへ
2
Who are you?
業務コンサルタント出身。
化学系メーカーへのパッケージ導入や周辺業務システム開発を手掛ける(ASP.NET VB.NET/C#)。
現在は「人のパートナーとなれるアプリケーション」の研究開発(Python/機械学習)。
サイボウズ公認kintoneエヴァンジェリスト
3
Tech-Circle
月一程度でTech-Circleという勉強会を開催しています(本日の内容も、以前開催した勉強会の資料をリバイスしたもの)。
4
• 今、一番おすすめしたい技術を紹介
• 技術に実際に触れて試せるハンズオンスタイル
• 参加者同士で対話でき、サポートが厚い少人数形式
Tech-Circle
Check it out!
• Tech-Circle connpassページ
• Tech-Sketch (技術ブログ)
• Tech-Circle Café (Facebookページ)
5
Tech-Circle is waiting for you.
機械学習とは
6
機械学習とは
7
人がルールを教えるのでなく、データからルールを学習させる技術。 例:ニュース記事を分類するケース
人(プログラマー) ルール
データ 学習 ルール
AKB=芸能、国会=経済、 ・・・
与えられたデータからその法則(ルール)を学習
記事1->芸能 記事2->経済 ・・・
自分で学習してくれるんやろ? これからは仕事しなくてええんや!
8
機械学習の特性
9
データがあればなんでもできるんでしょ? データから判断できることは判断できるようになる。人が見逃していた判断が見つかることはあるが、人でもわからないような発見をすることはほぼない。 (容疑者のデータを入れたからといって犯人が分かるわけではない)。
よくある誤解
スゴイ精度が出るんでしょ? 一部領域を除き、基本的には人の判断の方が精度が高い。また、精度が100%になることはない。
勝手に学習してくれるんでしょ? 基本的に、学習させるためのデータは人が用意する必要がある。自律的に学習させる手法は存在するが、そのための環境(状況設定)は人が整えてやる必要がある。
10
機械学習って・・・
機械学習の特性
11
精度 そこそこの精度が出せ、領域によっては人間以上の精度で判断できる。
処理速度 学習済みのことであれば、高速に判断できる。また、大量のデータを扱える(X万ユーザーそれぞれについておすすめの商品を提案する、など)。
タフネス 24時間働いても疲れない、判断が鈍くなったり遅くなったりしない。
人間ほどではないが、複雑なルールに基づく処理を、そこそこの精度で大量/高速に処理できる
機械学習の使いどころ
12
機械学習の使いどころ
13
A
C
B
気温・株価・売上etc
画像/音声認識 異常検知etc
値の予測 分類の予測
機械学習でできるのは主に以下二つの予測。
機械学習の使いどころ
ユーザーの評価値を予測して推薦
Amazon: 商品レコメンド Gmail: 迷惑メールフィルタ
Facebook: 顔認識によるタグ付
成功を収めている、メジャーな事例
値の予測 分類の予測
・大規模なデータ/ユーザー ・完璧な精度は必要ないが、あるとうれしい(人間の作業のサポート) 機械学習の強みを活かした適用
機械学習の使いどころ
人間でも予測困難なものは当てられない。
株価の予測 Android: 顔認識を利用したロック
適用が難しい領域
値の予測 分類の予測
・人間にも不可能なことをやらせる ・完璧な精度が必要なシーン ・単純なルールの方が適しているシーン 名刺管理のSanSanのように、システム+人の力を活用した例もある
パスワード(ルール)の方が早い。また、夜など状況によっては解除できない可能性も。 ただ、セキュリティ的な面の需要は考えられる。
スマートフォンのアシスタント機能
音声認識は100%にはならない。 アイコン化されたボタンをタップする(ルール)方が簡単
付加価値の創出
Bill Guard: オンライン決済の不正利用の検知
ダイキン工業: 故障の予知によるサポートサービス
東京海上日勤火災保険: 顧客属性(攻め・守り)の自動判定
コストの削減
Googleデータセンター :消費電力削減
日本郵船: エンジン制御による燃料費削減
ThyssenKrupp Elevator: 機械学習によるビル管理
新規事業の創出
千葉県: 健康診断データを活用したマーケット創出
クックパッド: レシピデータの提供・分析サービス
機械学習の使いどころ
ビジネス領域での応用例
17
muwonder
音楽レコメンドを行うサービス。今聞いている音楽をベースにして「もう少しアップテンポがいいですか?」といった応答形式で好みの音楽を探していける。
会議診断士さゆり
会議の様子を見て、それが無駄かどうかを診断してくれるサービス。会議中にアドバイスを行ってくれる。
機械学習の使いどころ
実際作ってみたもの
18
Enigma Travel
旅行の行先を決めてくれるサービス。旅行に参加するメンバが行うのは、提案されてくる観光地の写真の中から気に入ったものをクリックするだけ。
そうすると、システム側で各人からお気に入りとして登録されたイメージに合う観光地・ツアーを予算範囲内で決定し、メンバに通知してくれる。
おんぱしゃ
写真を撮るとそれが楽曲になる、というサービス。誰でも、どこでも、写真を撮るだけで作曲ができ、思い出の写真が曲にのりスライドショーで表示される、というアプリ。
作成した楽曲は、Pepperが歌ってくれたりもする。
機械学習の使いどころ
実際作ってみたもの(@ハッカソン)
機械学習の使いどころ
文化の理解
音楽、また文章のパターンから分類を類推
体のサポート
心拍や瞬きの回数といった身体データから、適切な運動を提案するなど。
嗜好の理解
ライフログのような行動データの記録が一般的になれば、嗜好の学習も可能?
とれる値が増えてくるため、予測によるサポートが充実していく。
画像や音声の認識が進むにつれ、その先の概念の学習に道が開かれる
感情の理解
表情や声と感情の相関について学習
今後の予測
値の予測 分類の予測
20
機械学習の使いどころ
機械学習は、人間ほどではないが、複雑なルールに基づく処理をそこそこの精度で大量/高速に処理できる。 これにより、何百万と配信されるアプリケーション、また多くのユーザーそれぞれに対し、「人間的な」対応や判断を行う機能を実装することができる。 そのメリットとして、以下のようなものがあげられる。 • サービスにさらなる付加価値を付ける
レコメンド、サポートサービス • コストダウン
運用管理コスト、異常検知自動化による無人化 • 新サービスの創出
自社データを活用したサービスプラットフォーム
機械学習のしくみ
21
22
データ 学習 ルール
機械学習の流れ(確認)
機械学習のしくみ
23
機械学習とは、モデル(機械)の、パラメーターの調整(学習)を行うこと。 ○モデル 要するに数式(すごいざっくりした説明だが・・・) ○パラメーター調整 数式の中にあるパラメーターをデータに合うよう調整する(誤差の最小化)。
24
データ 学習 ルール
機械学習のしくみ
モデルの選択
パラメーター調整
機械学習のしくみ
25
データに合うよう調整するのが学習だが、どのような「データ」を与えるかで少し異なる。
教師有り学習
データ 答え
答え(ラベル付き)のデータを与える。 予測結果と与えられた答えの間の誤差が小さくなるようパラメーター調整を行う。 これにより、データと答えの間のルールを学習する。
教師無し学習
データ
単純にデータのみ与える。 同じ分類にしたデータ同士の差異が小さくなるよう、パラメーターを調整する。 これにより、データ内のルールを学習する。 (白のボックスの位置で分けられそうなど)
クラスタリングの場合
機械学習のしくみ
26
データを与えない手法もある。システム自身がデータを得られる環境を用意し、そこに適合させるというイメージ。
強化学習
環境を与え、その中で行動させる。 行動に対する報酬を設定し、その報酬が最大になるようパラメーターを調整する。 これにより、特定環境下で報酬が最大になる戦略(ルール)を学習する。
ゲームでプロゲーマー並みの点数をを出したと話題になったDQNはこの
学習のタイプ
機械学習のしくみ
27
機械学習とはモデル(機械)を選択し、パラメーターの調整(学習)を行うこと。 パラメーターは、実際のデータと予測したデータの差異が小さくなるように調整される。 学習のさせ方は、以下のようなものがある。 • 教師有り学習: 答え付きデータを与え、その関係を学習させる • 教師無し学習: データのみ与えて、その特徴を学習させる • 強化学習: あるルール(環境)の中で、最適な行動原理を学習させる なお、最近流行のディープラーニング(深層学習)は、ニューラルネットワークを多層にしたモデルを扱う手法全般を指す (多層ニューラルというモデル・多層ニューラルの学習手法双方を含む) 。
機械学習のしくみ
28
これからは全部ディープラーニングにすればええんやろ? ディープラーニング、いわゆる多層ニューラルネットは精度が高い分、学習に大量のデータが必要です(収束も遅い)。また、その判断基準を人が理解することは難しいです。 何事も適材適所です。基本的にはシンプルなモデルから始めましょう。多くの場合、それで十分です。
教師無しはデータだけあればいいんやろ?簡単やん! 教師無し学習では、教師を与えないため、分類結果は機械任せになります。分類結果が人間に理解できるもの(意図したもの)とは限らないですし、その判断基準も予測できません。 データの傾向をつかんだり、特徴を抽出するには良いですが、安易に教師無しにするのは危険です。
よくある誤解
機械学習を実装するには
29
機械学習を実装するには
30
導入のスピード
拡張性 ライブラリ型
パッケージ型
サービス型
scikit-learn(Python)
MLlib (Scala等)
mahout (Java)
Jubatus
Azure Machine Learning
Google Prediction API
Prediction I/O
クラウド上で実装しHTTPから使用
組み込み済みの機能をAPIで使用
プログラムに組み込む
機械学習を実装するには
ライブラリ型:プログラムに組み込むライブラリ形式で提供されているもの
○:高い自由度でプログラムに組み込むことができる
×:利用にあたっては専門的な知識が必要
パッケージ型:よく利用するアルゴリズムをサーバー等にまとめたもの
○:目的 (推薦・異常検知など)に応じまとまった形で機能が提供されており、利用しやすい
×:パッケージが提供するAPI・機能の範囲でのみカスタマイズが可能。
サービス型:クラウド経由で提供するもの
○:クラウド上でサービスが提供されており、導入の敷居が低い。
×:手軽に導入できる分、機能・データ量等に制限がある場合がある。課金体系にも注意。
31
自由度と使いやすさのトレードオフ
機械学習を実装するには
実際使ってみよう!
ライブラリ型:scikit-learn
scikit-learn-notebook
パッケージ型:Jubatus・・・は用意できなかったので事例を
住友精密工業株式会社(2014/2/12)
住友精密が提供するビニールハウス温度管理サービスにおいて、ビッグデータのリアルタイム分析基盤「Jubatus」を導入。各センサユニットから得られたセンサデータを機械学習し、個々のビニールハウスにおける季節毎の異常値の自動検知や最適な温度管理の自動設定の実現を目指す(現在は検証中)。
クラウド型:Azure Machine Learning
Azure Machine Learning を利用したアプリケーション開発
32
今からハンズオンで使います
機械学習関連の情報収集について
33
機械学習関連の情報収集について
基礎知識 Courseraの機械学習コース
最もおすすめ。日本語字幕もあり(最近、自分のペースで進められる自習用コースも開設)。
日本語の解説を書いてくれている方もいる。こちら参照(① ② ③ ④ ⑤)。
ただ、機械学習は数式と英語の海なのでもう慣れておいた方がいいという説あり。
実践 機械学習システム
扱っているテーマ(自然言語処理・レコメンドなど・・・)が豊富で、基礎知識と応用をバランスよく学ぶことが可能(ただ、理論的な説明はあまりないため、基礎理論を学んだあとの応用として◎)。
機械学習 はじめよう
サイボウズエンジニアの方による非常に丁寧な解説。実装例はないので、Pythonを使って自分で実装していったり、英語でわからないときに見返すと良い。
言語処理100本ノック
自然言語処理マスターに向けての100の課題を提供している。2015年にリニューアル。旧版はこちら。Pythonの入門としても良い。
(機械学習プロフェッショナルシリーズ)
書いている人がばらばらなため、難易度にもばらつきがある。全体的にはわかりやすく書かれているが、買う際は可能であれば中身を見た方が良い。
Pythonも含めた、機械学習ライブラリの情報 awesome-machine-learning
34
機械学習関連の情報収集について
最初の一歩としてあまりお勧めしないもの(数学の素養がある場合を除く) はじめてのパターン認識
パターン認識と機械学習(上下)
これくらい読んどくべきでしょ、という意見はあると思います。ただ、最初にこれらに取り組むと高い確率で挫折すると思います。
そのため、先ほど上げた基礎知識編から初めて、必要に応じて読むという方がいいと思います。
35
機械学習関連の情報収集について
36
数学・統計の知識を身に着けるために(上記のような本を読みこなすために) データ解析のための統計モデリング入門 一般化線形モデル・階層ベイズモデル・MCMC (確
率と情報の科学)
上の2冊に比べればだいぶ読みやすい
データ分析のための線形代数
少し見ただけだが、かなりわかりやすい(版を重ねてないのが気になるが・・・)
Hands On Start
ハンズオンAgenda
ハンズオンの目的
ハンズオンの解説
機械学習アプリケーションの構成
データの分割
モデルの評価
Advanced
Herokuへのデプロイ
モデルのチューニング
38
ハンズオンの手順については、 こちらを参照してください。
ハンズオンの目的
39
本日のハンズオンの目的は、手書きの数字を認識するWebアプリケーションの精度を上げていくことです!
では、「準備(ハンズオン手順 #0 準備)」 を開始してください。
40
41
機械学習モデルを作成するプロセスを体験する
リポジトリ構成について
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フォルダに機械学習モデル を配置
リポジトリ構成について
43
機械学習アプリケーションの構成として、どういう風にするのがいいのかはまだ明確な答えはありません。
今回このような構成にしているのは、以下の意図があります。
applicationとmachinesを分けることで、分業しやすくする (アプリチームと機械学習チームが分かれる場合など)。
複数の学習モデルを使う場合に備え、中で仕切りを立てる。
ドキュメント(iPython notebook)を残しておくことで、モデルの正当性とノウハウの引き継ぎを担保する。
大規模な場合、構築/学習はさすがにバッチとなるが、手法についてはきちんと書いておく
グラフを表示してモデルの状態を見る、レポートを表示してみるなど、検証・確認用スクリプトを共有しておく
iPython notebook
44
コードの実行結果を含んだドキュメントを作成できるツール。
言語非依存の部分がJupyterとして独立しており、Python以外の言語のカーネルの開発も行われている(こちら参照)。
詳しい使い方は、以下をご参照ください。
はじめるiPython notebook
機械学習モデルを作成するプロセスを体験する
45
今回、アプリケーション内で使用される数字認識の機械学習モデルはmachines/number_recognizer内に定義されています。
まずは、この機械学習モデルを作成するプロセスを体験していきます。
動作確認で立ち上げた、iPython notebookの画面を開いてください。
では、「#1 機械学習モデルを作成するプロセスを体験する 」 を実行してみてください
46
機械学習モデルを作成するプロセスを体験する
47
機械学習の構築プロセスは大体このように進んでいきます。
上の実行ボタンで文中にあるPythonコードを実行できるので、最後の保存(Store the Model)まで実行していってみてください。
機械学習モデルを作成するプロセスを体験する
48
最後まで実行を行い、機械学習モデルを保管したファイルがきちんと更新されていればOKです。
49
データの分割
データの分割
50
精度・・・ほぼ100%??
データの分割
51
データの分割
52
データの分割
53
学習に使ったデータで予測を行い、それで精度の評価を行っている。 これはこれで意味があるが(ちゃんと学習したか評価)、最終的な目的は「学習していないデータに対してどれくらい当てはまるか」なので、その精度はこれでは計測できない。
では、「#2 学習データの分割を行う」 を実行してみてください
54
55
モデルの評価
モデルの評価
56
精度は良い方がいいですが、「良すぎる」場合は問題が潜んでいる可能性があります。具体的には、以下のような問題です。
過学習 データの不均衡
学習用データに過剰に適合してしまい、未知のデータに対応できなくなっている状態。
精度
データ量
右図のように、学習データに対する精度(緑)が非常に良いのに、評価データに対する精度(赤)が上がらなくなる。
データの中に大きな偏りがあり、単純な予測でも高い精度が出てしまうケース。
99%: A
1%:B
上図のように、99%がAなら「常にA」としても精度は99%になってしまう。
モデルの評価
57
そのため、以下のような対応を行う必要があります。
過学習 データの不均衡
基本的には、予測データに対して、モデルが複雑になりすぎている。
=データとモデルの複雑度の不均衡
対策としては、以下。
• 特徴量を減らす
• 単純なモデルに変える
• 学習データを増やす
または、正則化を行いモデルのパラメーターに対し制約を課す。
簡単な対応としては、少ない方のデータを増やすことが挙げられる。
そして、単純な精度(当たった数/総数)だけでなく、より詳細な分析を行う。
例:前述のデータが少ないBについて、
• 適合率: Bと予測したものが本当にBだった割合(シュートの精度)
• 再現率: 全体のBのうち、Bと予測できた割合(シュートの本数)
上記の精度をきちんと確認する。
58
よすぎる精度は基本的に疑う
では、「#3 モデルの評価を行う」 を実行してみてください
59
60
Advanced
Herokuへのデプロイ
61
せっかく作ったアプリケーションなので、ぜひHerokuへデプロイして実際使えるようにしましょう。
とはいえ、やることはHerokuボタンを押すだけです。
conda-buildpackを利用することで、Heroku上でcondaによるアプリケーション環境構築が可能になります。
これにより、Herokuでも簡単に機械学習系アプリケーションを稼働させることができます。
詳細はこちらを参照してください。
モデルのチューニング
62
モデルを構築する際には、こちらで指定しなければならないパラメーターがいくつかあります(今回の場合、損失関数(loss)や学習率(alpha)など。これをハイパーパラメータと呼びます)。
これらのパラメータが何を意味するのかについては、今回は省きますが、要は外から指定しないといけないパラメーターがいくつかあり、それによってモデルの精度も変わってくるということです。
このハイパーパラメータを変えながら精度を計算していき、最適なものを探索することをGridSearchと言います。
scikit-learnではこれをサポートする機能があり、この機能によりモデルのチューニングを行うことができます。
オンライン機械学習
63
データを一度に用意して学習させる以外に、逐次学習させる手法もあります。
これを、オンライン学習と呼びます。
今回は、アプリケーション上でフィードバックを与えることで学習させることができるので、試してみて下さい。
※ユーザーの入力ほど信頼できないものはないので、普通はこうしたスタイルで学習させることはありません。一旦データを集めて、的外れなデータを除外したのちに学習させる方が賢明です。
また、動的に学習してしまうと予期しない方向へ学習が進んでしまうことも想定されます。そのため、オンライン機械学習の採用に当たってはその設計を慎重に行う必要があります。
では、「Handson Advanced」 を実行してみてください
64
Thank you