Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Machine Learning Bootstrap

5,273 views

Published on

Tech-Circle 機械学習を利用したアプリケーション開発をはじめよう(ハンズオン)の解説資料

Published in: Data & Analytics

Machine Learning Bootstrap

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

×