機械学習/cookpad summer internship 2017 ml

A182964bc0a261a5fc8bb207d660c743?s=47 yoppe
August 15, 2017

機械学習/cookpad summer internship 2017 ml

2017 cookpad 17day TECH INTERNSHIP ( https://internship.cookpad.com/2017/summer/17day-tech/ ) の6日目に開催した機械学習の講義資料です。

A182964bc0a261a5fc8bb207d660c743?s=128

yoppe

August 15, 2017
Tweet

Transcript

  1. 17day TECH INTERNSHIP 機械学習 クックパッド株式会社 研究開発部 菊田 遥平 2017/08/15

  2. 時間割 時間 内容 09:30 - 10:30 【講義】機械学習とは何か? 10:40 - 12:00

    【実習】機械学習初歩 12:00 - 13:00 ランチ 13:00 - 14:30 【講義】ディープラーニング(画像分析) 14:40 - 16:20 【実習】画像分析 16:30 - 17:50 発展的課題への挑戦 17:50 - 18:00 本日のまとめ 18:00 - 18:30 日報・質問 各トピックの間には10分間の休憩を挟みます 2 / 133
  3. 講師紹介 & 分析環境構築 3 / 133

  4. 講師紹介 • 名前 菊田 遥平(きくた ようへい) • 所属 研究開発部 •

    肩書 リサーチサイエンティスト 博士(理学) • 専門 画像分析、推薦アルゴリズム • 好きな食べ物 焼き餃子、寿司、Dr Pepper @yohei_kikuta 4 / 133
  5. ポアソン分布が好き! • world cup ゴール数のポアソン分布分析 (1930 ~ 1982) Ref: https://github.com/yoheikikuta/worldcup_poisson_distrib

    5 / 133
  6. ポアソン分布が好き! • world cup ゴール数のポアソン分布分析 (1986 ~ 2014) Ref: https://github.com/yoheikikuta/worldcup_poisson_distrib

    http://www.goldmansachs.com/our-thinking/outlook/world-cup-and-economics-2014-folder/world-cup-economics-report.pdf なども面白い 6 / 133
  7. 分析環境の構築 • Docker 環境を構築 Docker for Mac をインストール 以下から stable

    版をインストール https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac (Androidエミュレータが干渉する可能性があるのでその場合は落とす) Memory を 4.0 GB 程度に設定して Apply & Restart • Hello from Docker (動作チェック) $ docker run --rm hello-world • 分析環境の構築 以下のレポジトリを clone https://github.com/cookpad/cookpad-internship-2017-summer $ cd cookpad-internship-2017-summer/ml $ bash run.sh このシェルスクリプトで環境構築が実施される 標準出力に http://0.0.0.0:8888/?token=xxxx のように表示される これをブラウザのアドレスバーにコピペすることで jupyter notebook が起動 7 / 133
  8. Docker コンテナでの作業 • Docker とは何かについては詳しくは説明しない ホストマシンのプロセスとしてコンテナと呼ばれる仮想化環境を構築 コンテナプロセス起動時に必要な docker image というファイルシステムを使用

    Dockerfile というファイルで docker image を build 機械学習という観点では Dockerfile があれば分析環境が容易に再現できるため有用 興味のある人は https://www.docker.com/what-docker などを参考のこと • コンテナを停止する (前頁の run.sh を走らせた後の話) jupyter notebook を立ち上げている terminal で Ctrl + c をするとコンテナが停止 • コンテナを再起動して jupyter notebook を使う コンテナを再起動 $ docker start cookpad-intern-ml jupyter notebook のプロセスに対応する URL を取得 $ docker exec -it cookpad-intern-ml jupyter notebook list これで http://0.0.0.0:8888/?token=xxxx が取得できるので、ブラウザにコピペ • 詳しいチートシートは例えば以下 https://github.com/wsargent/docker-cheat-sheet 8 / 133
  9. 【講義】 機械学習とは何か? 9 / 133

  10. 機械学習の事例 10 / 133

  11. 事例:画像認識 Ref: https://arxiv.org/abs/1112.6209 大量の画像(画像に何が写っているかという情報なし)を学習することで、人の顔や猫の顔 に特に強く反応するノードが自動的に出現した 11 / 133

  12. 事例:質問応答 Ref: http://watson2016.com/ 自然言語で出題された質問に対し、データから答えを推測する様々なアルゴリズムを駆使 し、クイズ番組で人間を上回った 12 / 133

  13. 事例:機械翻訳 Ref: http://arxiv.org/pdf/1707.01310v1 Ref: https://github.com/yoheikikuta/arxiv_summary_translation In typical reinforcement learning (RL),

    the environment is assumed given and the goal of the learning is to identify an optimal policy for the agent taking actions through its interactions with the environment. In this paper, we extend this setting by considering the environment is not given, but controllable and learnable through its interaction with the agent at the same time. Theoretically, we find a dual Markov decision process (MDP) w.r.t. the environment to that w.r.t. the agent, and solving the dual MDP-policy pair yields a policy gradient solution to optimizing the parametrized environment. Furthermore, environments with non-differentiable parameters are addressed by a proposed general generative framework. Experiments on a Maze generation task show the effectiveness of generating diverse and challenging Mazes against agents with various settings. 典型的な強化学習( RL)では、環境が与えられていると仮定され、学習の目標は、エージェントが環境との相互作用を通じて行動をとるための 最適なポリシーを特定することである。本論文では、環境を与えないでエージェントとの対話を通じて同時に制御可能で学習可能であることを 考慮して、この設定を拡張する。理論的には、エージェントに対する環境ではマルコフ決定プロセス( MDP)が2つあり、デュアルMDPポリシー ペアを解決すると、パラメータ化された環境を最適化するためのポリシー勾配ソリューションが得られます。さらに、非微分可能なパラメータを 有する環境は、提案された一般的な生成フレームワークによって対処される。迷路生成タスクの実験では、さまざまな設定のエージェントに対 して多様で挑戦的な迷路を生成する効果が示されます。 代表的な強化学習( RL)で、環境が与えられたと学習の目標は、環境との相互作用を介して行動を取るエージェントに最適なポリシーを識別す ることであると仮定されます。本稿では、環境を考慮して、この設定を拡張するには与えられていないが、同時に薬剤との相互作用を介して制 御可能と学習可能。理論的には、我々は二重のマルコフ決定過程( MDP)はそのWRTエージェントに環境を WRT見つけ、およびデュアル MDP-ポリシーのペアを解くと、パラメータ化環境を最適化するための方策勾配ソリューションを生み出します。また、非微分パラメータを持つ環 境では、提案された一般的な生成的枠組みによって対処されます。迷路生成タスクの実験は、様々な設定を持つエージェントに対して多様か つ挑戦的な迷路を生成するの有効性を示します。 元の文章 従来手法での翻訳 ニューラル機械翻訳での翻訳 与えられた自然言語を他の自然言語に翻訳することも、対となる文章を大量に学習すること で、人間に近いレベルの翻訳ができるようになってきている 13 / 133
  14. 事例:ゲーム操作 Ref: https://storage.googleapis.com/deepmind-media/alphago/AlphaGoNaturePaper.pdf 碁のような全ての場合を尽くすのが原理的に不可能な複雑なゲームにおいても、機械同士 を戦わせるなどの学習を駆使して人間のトッププロに勝てるほどになった 14 / 133

  15. 事例:電力節約 Ref: https://deepmind.com/blog/deepmind-ai-reduces-google-data-centre-cooling-bill-40/ 機械学習を駆使して電力消費量を抑えるように効率的にデータセンターの冷却を実施するこ とで、従来と比べて 40% ものコスト削減に成功した 15 / 133

  16. 事例:画像生成 Ref: https://arxiv.org/abs/1703.10717 ランダムなノイズから画像を生成する機械と画像が生成されたものか本物かを判断する機 械とを対立的構造で学習をすることで、機械で現実的な画像を生成可能となった 16 / 133

  17. 事例:自動着色 Ref: https://github.com/pfnet/PaintsChainer Ref: https://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger 前頁と同様の構造で学習することで、白黒画像を自動的に着色できるようにもなる (下の例は本来は線画を着色するサービスに白黒写真を適用している) 17 / 133

  18. 事例:行動学習 Ref: https://www.youtube.com/watch?v=hx_bgoTF7bs 機械に明示的な行動をプログラムせずとも、行動の結果として報酬が与えられるという条件 下で学習をすることで、適切な行動を選択できるようになる 18 / 133

  19. 19 / 133

  20. 疑問 そもそも機械学習とは何だろうか? 20 / 133

  21. 疑問 機械学習は確かに強力な事例が満載だが... • 機械学習の定義は? • 以下の用語の違いを説明できるか? ◦ 機械学習(Machine Learning: ML)

    ◦ 人工知能(Artificail Intelligence: AI) ◦ ディープラーニング(Deep Learning: DL) • 機械学習で扱える問題にはどのようなものがあるのか? 21 / 133
  22. 機械学習の定義 22 / 133

  23. 機械学習の定義 Def: A computer program is said to learn from

    experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E. Ref: Mitchell, T. (1997). Machine Learning. McGraw Hill. p. 2 23 / 133
  24. AI, ML, DL, その他 包含関係(以下の図で面積や位置は何も反映していない) Computer Science AI (Artificial Intelligence)

    ML (Machine Learning) DL (Deep Learning) Statistics 24 / 133
  25. AI, ML, DL, その他 Ref: https://www.nisargdave.com/single-post/2016/10/05/Multidisciplinary-Data-Science Ref: http://blogs.sas.com/content/subconsciousmusings/2014/08/22/looking-backwards-looking-forwards-sas-data-mining-and-machine-learning/ 25 /

    133
  26. 機械学習が対象とする問題 26 / 133

  27. 機械学習で扱える問題 機械学習を用いることで、以下のような問題を解くことができる • Regression (回帰) • Time Series Analysis (時系列分析)

    • Classification (分類) • Learning to Rank (ランキング学習) • Game Play and Robot Action (ゲームやロボットの自動操作) • Pattern Mining (パターン発見) • Clustering (クラスタリング) • Optimization (最適化) • Generation (生成) • ... 27 / 133
  28. 機械学習で扱える問題 • Regression (回帰) 説明変数と目的変数の回帰を推定・予測 ex.) 店舗の売上予測、広告費用の効果予測 目的変数 説明変数 28

    / 133
  29. 機械学習で扱える問題 • Time Series Analysis (時系列分析) 回帰分析と似ているが時間発展を陽に考慮 ex.) 株価予測、電力消費量予測 目的変数

    時間 29 / 133
  30. 機械学習で扱える問題 • Learning to Rank (ランキング学習) 与えられたアイテムに対して順位を推定・予測 ex.) 情報検索 A

    B C A A B B C C A B B B A C C C A Score(A) Score(B) Score(C) f(A) > f(B) f(A) > f(C) f(B) > f(C) P A,B,C P B,A,C P B,C,A > > > > Ranking: A → B → C 30 / 133 . . .
  31. 機械学習で扱える問題 • Classification (分類) どのデータ点がどのクラスに所属するかを推定・予測 ex.) 料理・非料理分類、スパム判定 : class1 :

    class2 : class3 変数1 変数2 31 / 133
  32. 機械学習で扱える問題 • Game Play and Robot action (ゲームやロボットの自動操作) 明示的なルールを与えずにゲームやロボットの操作を学習 ex.)

    将棋や碁を打つ、ロボットがネジを締める 32 / 133
  33. 機械学習で扱える問題 • Pattern Mining (パターン発見) データの中に存在するパターンを発見 ex.) 共起情報に基づく推薦、ユーザの典型的行動パターンの発見 33 /

    133
  34. 機械学習で扱える問題 • Clustering (クラスタリング) データをいくつかの特定の塊にグルーピング ex.) 顧客セグメント、ニュース記事を似ているものにまとめる ∂ ∂ 34

    / 133
  35. 機械学習で扱える問題 ∂ ∂ ∂ ∂ • Clustering (クラスタリング) データをいくつかの特定の塊にグルーピング ex.)

    顧客セグメント、ニュース記事を似ているものにまとめる 35 / 133
  36. 機械学習で扱える問題 • Optimization (最適化) ある条件下での最適(もしくは良い)解を発見 ex.) 無料道路のみを使うカーナビの経路探索 36 / 133

  37. 機械学習で扱える問題 • Generation (生成) 学習したモデルに基づきデータを生成 ex.) 画像生成、自動着色、スタイル変換 Ref: https://github.com/artcg/BEGAN f

    θ (z) p(z) ^ 37 / 133
  38. 機械学習の学習アルゴリズム 38 / 133

  39. 学習アルゴリズム 機械学習の学習アルゴリズムは以下の4つに大別される • Supervised learning (教師あり学習) 我々がターゲットとする問題の 80% がこれに相当 •

    Unsupervised learning (教師なし学習) 我々がターゲットとする問題の 15% がこれに相当 • Semi-supervised learning (半教師あり学習) • Reinforcement learning (強化学習) 39 / 133
  40. 学習アルゴリズム • Supervised Learning (教師あり学習) 目的関数 J(予測, 答え) を最小化するようにモデルを学習 Ref:

    http://yann.lecun.com/exdb/mnist/ 学習過程 Predictor Predictor’ Predictor’’ 3 1 4 5 7 4 予測 答え 予測と答えを比較してフィードバック 40 / 133
  41. 学習アルゴリズム • Unsupervised Learning (教師なし学習) ある与えられた指標に基づきデータ構造を推定 学習 F 1 >

    F 2 > F 3 ある指標 データを4つのグループに分けるということは所与の条件として、 定めた指標を小さくするように学習をしていくことできれいに分けられる 41 / 133
  42. 学習アルゴリズム • Semisupervised Learning (半教師あり学習) 一部答えのないデータも活用する教師あり学習 No color : unlabeled

    ラベルがついていない データを使わずに 分類をした結果 42 / 133
  43. 学習アルゴリズム • Semisupervised Learning (半教師あり学習) 一部答えのないデータも活用する教師あり学習 何らかの方法で ラベルが付与できれば 分類境界が変更 43

    / 133
  44. 学習アルゴリズム • Reinforcement Learning (強化学習) 報酬を最大化するようにエージェントが自動的に行動を学習 44 / 133

  45. 機械学習をどう活用するか 45 / 133

  46. 機械学習の活用 • (機械学習に関する幾許かの知識) • 問題の設計 • データの収集 • モデルの学習 •

    モデルの評価 • モデルをプロダクトにデプロイ ( もしくは問題を諦める ) • 継続してモデルを改善 様々なトライ&エラー 46 / 133
  47. 機械学習の活用 • (機械学習に関する幾許かの知識) 無からは無しか生まれない 発展著しい機械学習の話題をキャッチアップする必要がある 情報源の例: ◦ Reddit machine learning

    (機械学習に関する話題の掲示板) https://www.reddit.com/r/MachineLearning/ ◦ GitXiv (論文と実装がセットで紹介) http://www.gitxiv.com/ ◦ arXiv (最先端の論文) https://arxiv.org/ ◦ SNS (主にtwitter) オススメアカウント: https://twitter.com/yohei_kikuta 47 / 133
  48. 機械学習の活用 • 問題の設計 興味ある問題に機械学習を適用するために最重要となる部分 ◦ 基本的には一般的なプロジェクトと同様 ◦ 重要になるのは成功が保証されていないという観点 ▪ 様々な場合で試していくつかが成功すれば御の字

    ▪ 進捗共有の方法を設定(issue や notebook のまとめ方など) ▪ いつ諦めるのかという期限を設ける ◦ 機械学習の役割を同定 ▪ モデルの入力 ▪ モデルの出力 ◦ 可能な限り機械学習に依存する部分を切り出す ▪ 依存性の切り分け、効果的な役割分担 48 / 133
  49. 機械学習の活用 • データの収集 機械学習のモデルにとってはデータ量こそが最重要 “Shut up and collect more data”

    49 / 133
  50. 機械学習の活用 • モデルの学習 モデルとは入力空間を出力空間に写像する関数 f θ : x → y

    where x ∈ input, y ∈ output and θ is parameter パラメタ θ は以下のようにして定める ◦ 教師あり学習の場合はモデル出力と答えの差を最小化するもの ◦ 教師なし学習の場合は人間の感覚で決定 モデルは非常に多様なものだが、まず次のものから試すとよい ◦ 構造化データには Xgboost(もしくは LightGBM) https://github.com/dmlc/xgboost https://github.com/Microsoft/LightGBM ◦ 画像やテキストのような非構造化データには Deep Learning https://github.com/fchollet/keras https://github.com/tensorflow/tensorflow 50 / 133
  51. 機械学習の活用 • モデルの評価 “モデルがどれくらい優れているか” を定量的に定める必要有 評価関数自体が研究対象になるほど深いものだが最低限は以下 (滑らかな関数はモデルの学習時に用いられることが多い) ◦ 回帰の場合 平均二乗誤差

    (1/n) Σ i ( f(x i ) - y answer, i )2 ◦ 分類の場合 Accuracy : (TP+TN) / (TP+FP+FN+TN) Precision : TP / (TP+FP) Recall : TP / (TP+FN) Area Under the Curve (AUC): https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve Multiclass logloss: https://www.kaggle.com/wiki/Metrics 教師なしの場合は人間の感覚で決定することも多い ex.) 分けられたクラスタが感覚とマッチしているか Binary classification answer Positive Negative model Positive TP FP Negative FN TN 51 / 133
  52. 機械学習の活用 • モデルをプロダクトにデプロイ ( もしくは問題を諦める ) 自信満々のモデルをデプロイして成果を出そう! 問題を諦めるという意思決定も時には重要 • 継続してモデルを改善

    自信満々のモデルは往々にして大した成果は出ない そこで継続的にモデルを改善する仕組みが重要となる 更にデータは dynamical な対象なのでアップデートが必要 モデル自体も次々と新しく強力なものが登場するのでそれを試す 52 / 133
  53. 機械学習の形式的な議論 53 / 133

  54. 機械学習の形式的な議論 • No Free Lunch Theorem 事前知識なしには全てのモデルの平均性能は同じになる → 問題に応じた事前知識やモデルの設定が重要 54

    / 133
  55. 機械学習の形式的な議論 • Ugly duckling theorem 全特徴量を同等に扱うと任意の2つの対象の類似度が同じになる → 問題に応じた特徴量の設計が必要 55 /

    133
  56. 機械学習を学ぶための情報 56 / 133

  57. “経験者”への最短経路 • 使用言語 ◦ Python (https://www.python.org/) • 分析環境 ◦ Docker

    (https://www.docker.com/) ◦ cpu & gpu (nvidia-docker - https://github.com/NVIDIA/nvidia-docker) ◦ Jupyter notebook ( http://jupyter.org/ ) • データの取扱 ◦ Numpy (http://www.numpy.org/), Pandas (http://pandas.pydata.org/) ◦ (データの可視化) ▪ seaborn (https://seaborn.pydata.org/) ▪ Bokeh (http://bokeh.pydata.org/en/latest/) • 構造化データの分析 ◦ Xgboost (https://xgboost.readthedocs.io/en/latest/) もしくは LightGBM (https://github.com/Microsoft/LightGBM) ◦ regression, classification, learning to rank • 画像やテキストのような非構造化データの分析 ◦ Deep Learning using Keras (https://keras.io/) with TensorFlow backend 57 / 133
  58. 機械学習を学ぶために • 書籍 ◦ フリーライブラリで学ぶ機械学習入門: THE BEST ML BOOK IN

    THE WORLD(冗談) http://www.shuwasystem.co.jp/products/7980html/4961.html ◦ データ解析のための統計モデリング入門: 統計モデリングの基礎、Rを使用 https://www.iwanami.co.jp/book/b257893.html ◦ はじめてのパターン認識: 様々な機械学習モデルの数学的基礎 http://www.morikita.co.jp/books/book/2235 ◦ Python Machine Learning: 機械学習の基礎を豊富なPythonコードと共に学べる https://www.packtpub.com/big-data-and-business-intelligence/python-machine-learning https://github.com/rasbt/python-machine-learning-book (support page) ◦ Introduction to Machine Learning with Python: Pythonを用いた機械学習を基礎から学べる http://shop.oreilly.com/product/0636920030515.do https://github.com/amueller/introduction_to_ml_with_python (support page) ◦ Hands-On Machine Learning With Scikit-Learn and TensorFlow: DLを含む様々なモデルを試せる http://shop.oreilly.com/product/0636920052289.do https://github.com/ageron/handson-ml (support page) ◦ Machine Learning: 機械学習に関する形式的な議論 https://www.mhprofessional.com/9780070428072-usa-machine-learning ◦ Pattern Recognition and Machine Learning: 機械学習(特にベイジアン)を理論的に学ぶための傑作 http://www.springer.com/br/book/9780387310732 最近はサポートページが充実しているものも多いので、まず始めるにはこれらから着手するのが良い 数学的にかっちりした議論に興味がある人はもう少し古典的な統計の本を読むのが良さそう (講師は現代的な機械学習を数学的にきちんと定式化して議論するという本を知らない) 58 / 133
  59. 機械学習を学ぶために • ウェブ情報 ◦ Stanford Computer Science lectures: スタンフォード大の Computer

    Science の講義は質が高い http://exploredegrees.stanford.edu/schoolofengineering/computerscience/ ▪ CS229: machine learning http://cs229.stanford.edu/materials.html ▪ CS224n: natural language processing with DL http://web.stanford.edu/class/cs224n/ ▪ CS231n: convolutional neural networks for visual recognition (2017年の講義も20170811に公開) http://cs231n.stanford.edu/ ◦ ML tutorials using the jupyter notebook: notebook で完結する形でチュートリアルが実施できる ▪ jupyter notebook: jupyter notebook の基本的な使い方 https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks#introductory-tutorials ▪ Data-Analysis-and-Machine-Learning-Projects: 一つの notebook でよくまとめられている https://github.com/rhiever/Data-Analysis-and-Machine-Learning-Projects/blob/master/example-data-scie nce-notebook/Example%20Machine%20Learning%20Notebook.ipynb ▪ LearnDataScience: 基本的な機械学習のモデルを jupyetr notebook で学べる https://github.com/nborwankar/LearnDataScience ▪ jupyter notebooks: 主要なライブラリの使い方などが例を通じて学べる https://github.com/jdwittenauer/ipython-notebooks ◦ Tutorials of libraries: scikit-learn や pandas のチュートリアルは機械学習を学ぶ上で有用 ▪ scikit-learn http://scikit-learn.org/stable/tutorial/index.html ▪ pandas https://pandas.pydata.org/pandas-docs/stable/tutorials.html 59 / 133
  60. 機械学習を学ぶために • Online courses, Video lectures ◦ Cousera Machine Learning:

    Andrew Ng 氏による有名な講義。Matlab (Octave) を用いた課題有 https://www.coursera.org/learn/machine-learning/ ◦ Applied Data Science with Python Specialization: Pythonを使った機械学習のコース。20170811の時点で ⅘ コースが公開済 https://www.coursera.org/specializations/data-science-python ◦ DataCamp Introduction to Machine Learning: Rを使った機械学習の導入のコース https://www.datacamp.com/courses/introduction-to-machine-learning-with-r ◦ Caltech machine learning lecture: Lectures of Caltech ML course https://www.youtube.com/playlist?list=PLD63A284B7615313A ◦ Stanford Machine Learning lecture: Lectures of Stanford ML course https://www.youtube.com/playlist?list=PLA89DCFA6ADACE599 ◦ MIT Machine Learning lecture: Lectures of MIT ML course https://www.youtube.com/playlist?list=PLnvKubj2-I2LhIibS8TOGC42xsD3-liux オンラインコースや講義のウェブ公開などが充実しているので、レベルに合ったものを選ぶのが良い 特に大学の公開講義は内容がしっかりしてるので、じっくり勉強したい場合はとても有用 60 / 133
  61. 機械学習を学ぶために • See more ◦ Awesome machine learning: 機械学習関連の優れたレポジトリのリスト https://github.com/josephmisiti/awesome-machine-learning

    ◦ Cousera machine learning https://www.coursera.org/courses?languages=en&query=machine+learning ◦ Udacity machine learning https://www.udacity.com/courses/machine-learning ◦ DataCamp machine learning https://www.datacamp.com/courses/topic:machine_learning • Researches ◦ arXiv: 最新の論文がチェックできる。昨今は Computer Science 界隈でも利用者が増えている https://arxiv.org/ ◦ gitxiv: arXiv + GitHub のようなサイトで、論文とそれを実装したレポジトリがセットで公開 http://www.gitxiv.com/ ◦ Reddit machine learning: 最先端の論文の議論もなされる掲示板 https://www.reddit.com/r/MachineLearning/ • Competitions ◦ kaggle: データ分析のコンペティションをホストしている。腕磨きに最適 https://www.kaggle.com/ ◦ KDD (http://www.kdd.org/kdd2017/) のような学会でも付随してデータ分析のコンペティションが開催 ウェブに繋がりさえすれば、最先端の研究や実装、機械学習の最新テクニックを学ぶ環境は整っている 61 / 133
  62. 代表的な学会 種類 国際学会 国内学会 理論 Neural Information Processing Systems (NIPS):

    https://nips.cc/ Information-Based Induction Sciences and Machine Learning (IBISML): http://ibisml.org/ データマイニング Advances in Knowledge Discovery and Data Mining (KDD): http://www.kdd.org/kdd2017/ レコメンド Recommender Systems (RECSYS): https://recsys.acm.org/ 画像分析 Conference on Computer Vision and Pattern Recognition (CVPR): http://cvpr2017.thecvf.com/ Computer Vision and Image Media (CVIM): http://cvim.ipsj.or.jp/ Meeting on Image Recognition and Understanding (MIRU): http://cvim.ipsj.or.jp/MIRU2017/ 自然言語処理 Association for Computational Linguistics (ACL): http://acl2017.org/ The Association for Natural Language Processing http://www.anlp.jp/ 人工知能 International Joint Conference on Artificial Intelligence (IJCAI): https://ijcai-17.org/ The Japanese Society For Artificial Intelligence (JSAI): https://www.ai-gakkai.or.jp/ この他にも学会はたくさんある e.g., http://lipn.univ-paris13.fr/~bennani/CSRank.html 62 / 133
  63. 【実習】 機械学習初歩 63 / 133

  64. 分析の準備 • 分析環境の構築 (まだしてなければ) https://github.com/cookpad/cookpad-internship-2017-summer を clone $ cd cookpad-internship-2017-summer/ml

    $ bash run.sh このシェルスクリプトでデータ準備から環境構築までを実施 標準出力に http://0.0.0.0:8888/?token=xxxx のように表示される これをブラウザのアドレスバーにコピペすることで jupyter notebook が起動 • /notebooks 以下に分析用の notebook が格納されていて、ここでは以下を使う ・/notebooks/basic.ipynb ・/notebooks/recipe_classification_text.ipynb 64 / 133
  65. 【講義】 ディープラーニング (画像分析) 65 / 133

  66. はじめに Deep Learning (DL) は応用範囲が広いため全てをカバーするのは困難 • 今日話すこと ◦ DLの定義 ◦

    Convolutional Neural Networks (CNN) の基礎と最近の発展 ◦ CNNで何ができるか • 今日話さないこと ◦ DLの歴史 ◦ CNN以外のモデル(Recurrent Neural Networks など) ◦ 様々なDLライブラリの具体的な使い方や比較 66 / 133
  67. ディープラーニングの定義 67 / 133

  68. DLの定義 Deep Learning 隠れ層が2層以上の Neural Networks (NN) (機械) 学習 過去10年位で適切に重みを

    学習するために様々な要素が進展 • 大量のデータ • Rectified Linear Unit (ReLU) • 最適化手法の発展 • ドロップアウトやバッチ正規化 • 事前学習 . . . . . . . . . . . . 68 / 133
  69. NNとは何か? NNは生物の脳を模倣したモデルの一種 (最近のモデルは脳とは乖離しているので Artificial NN とも呼ぶ) Ref: http://www.bordalierinstitute.com/target1.html 69 /

    133
  70. NNとは何か? 基本的な構成要素はパーセプトロン 和 + 閾値 重み i 重み 1 重み

    n 入力 n 入力 i 入力 1 出力 閾値 入力信号 の和 活性化 関数 sigmoid func. step func. • 構造 単純な入力の線形結合と活性化関数 • Pros. 単純ではあるが ”学習可能”(データから重みを更新可) • Cons. 線形分離不可能問題を解くことができない . . . . . . 70 / 133
  71. NNとは何か Multi Layer Perceptron (MLP) はパーセプトロンを積み重ねたもの 隠れ層 重み • 構造

    Hierarchically stacked perceptrons • Pros. 十分な数のノードがあれば任意の関数を近似可能(万能性定理) 層を積み重ねることで入力と出力の複雑な関係性を表現可能 • Cons. パラメタ数が多くなるため学習が難しい 入力層 出力層 . . . . . . . . . . . . 71 / 133
  72. 可視化 http://playground.tensorflow.org/ を用いたデモ 72 / 133

  73. Back propagation Back propagation はニューラルネットワークの学習方法の一種 入力層 出力層 予測と答えの差を最小化するために誤差信号を出力層から伝播 伝播する方向は予測をする際の過程と逆方向 →

    入力層に近い部分では信号が弱くなりがち(勾配消失問題) prediction back propagation *線の太さは信号の強さを表現 . . . . . . . . . . . . 73 / 133
  74. 勾配消失問題の解決 • 大量のデータ データサイズは性能向上に重要 (https://arxiv.org/abs/1707.02968) GPUにより大量のデータ処理も可能になっている • Rectified Linear Unit

    (ReLU) ReLU のみが新しい発見だと主張する人もいる 閾値以上で一定の勾配を返す関数なので消失を防げる • 洗練された最適化手法 SGD (with momentum), RMSprop, Adam, ... optimizer自体も学習 (https://arxiv.org/abs/1606.04474) • ドロップアウトやバッチ正規化 汎化性能を向上させるための様々な発展 DLの汎化性能は最近の話題の1つ (https://arxiv.org/abs/1611.03530) • 事前学習 教師なし事前学習は自然言語処理などで使用 教師あり事前学習はImageNetで学習したものを画像分析でよく使用 一定 勾配 74 / 133
  75. DLの定義 Deep Learning 隠れ層が2層以上の Neural Networks (NN) (機械) 学習 過去10年位で適切に重みを

    学習するために様々な要素が進展 • 大量のデータ • Rectified Linear Unit (ReLU) • 最適化手法の発展 • ドロップアウトやバッチ正規化 • 事前学習 . . . . . . . . . . . . 75 / 133
  76. ディープラーニングの特徴 76 / 133

  77. DLの特徴 • 大量のパラメタを大量のデータを用いて学習 (パラメタの数)>(データの数)となる場合も多い なぜこれでうまくいくのかということは現在も盛んに議論 • 分散表現 高い表現能力 • 階層的かつ自動的な特徴量の抽出

    単純なものから複雑なものへと段階的に特徴量を抽出 人力で特徴量を作らなくてもよいというパラダイムシフト • 特定のタスクに関して非常に高い性能 ある種のタスクに関しては人間よりも高い性能を発揮 77 / 133
  78. DLの特徴 • 大量のパラメタを大量のデータを用いて学習 (パラメタの数)>(データの数)となる場合も多い Ref: https://arxiv.org/abs/1512.03385 ~ 20,000,000 !!! 78

    / 133
  79. DLの特徴 • 分散表現 モデルの表現力(データ空間を分割する能力)が指数的に上昇 ex.) 3次元のバイナリ変数の場合 シンボリック表現 (1,1,1) 分散表現 (0,0,1)

    (0,1,1) (1,0,1) (1,0,0) (0,1,0) (1,1,0) i j k i,j,k = {0,1} 3 patterns 23 patterns 79 / 133
  80. . . . DLの特徴 • 階層的かつ自動的な特徴量の抽出 単純なものから複雑なものへと段階的に特徴量を抽出 複雑なオブジェクト(顔)は単純なパーツ(目,鼻,...)から構成 Ref: http://www.cs.toronto.edu/~rgrosse/icml09-cdbn.pdf

    . . . . . . . . . 80 / 133
  81. DLの特徴 • 階層的かつ自動的な特徴量の抽出 Ref: http://rinuboney.github.io/2015/10/18/theoretical-motivations-deep-learning.html 従来手法: 専門家が人手で 特徴量を作成 DL: 階層的に自動的に

    特徴量を作成 81 / 133
  82. DLの特徴 • 特定のタスクに関して非常に高い性能 画像分析:ImageNet Large Scale Visual Recognition Competition Ref:

    http://www.image-net.org/challenges/LSVRC/ 82 / 133
  83. DLの特徴 • 特定のタスクに関して非常に高い性能 音声認識:ノイズのない状況では人間を上回る性能 Ref: https://arxiv.org/abs/1512.02595 83 / 133

  84. DLの特徴 • 特定のタスクに関して非常に高い性能 翻訳:人間に比肩する能力 Ref: https://research.googleblog.com/2016/09/a-neural-network-for-machine.html https://arxiv.org/pdf/1609.08144.pdf 84 / 133

  85. DLの特徴 • 特定のタスクに関して非常に高い性能 ゲーム操作:多くのゲームで人間を上回る性能 Ref: https://www.nature.com/nature/journal/v518/n7540/full/nature14236.html 85 / 133

  86. 具体的なモデル Convolutional Neural Networks 86 / 133

  87. 具体的なDLのモデル 高い性能を発揮するには目的に応じた特別な構成のモデルが必要 • Convolutional Neural Network (CNN) ◦ 画像分析でよく使われるモデル ◦

    画像中のオブジェクトに対する幾何学的変換に対してロバスト ◦ ex.) 画像中の異なる場所に位置する同一のオブジェクトを認識 • Recurrent Neural Network (RNN) ◦ 自然言語処理でよく使われるモデル ◦ 時間順序性のあるデータに対して有用 ◦ ex.) “私” の次に “が” や “は” が来やすいことを予測可能 87 / 133
  88. 具体的なDLのモデル 高い性能を発揮するには目的に応じた特別な構成のモデルが必要 今回は CNN のみを取り扱う • Convolutional Neural Network (CNN)

    ◦ 画像分析でよく使われるモデル ◦ 画像中のオブジェクトに対する幾何学的変換に対してロバスト ◦ ex.) 画像中の異なる場所に位置する同一のオブジェクトを認識 • Recurrent Neural Network (RNN) ◦ 自然言語処理でよく使われるモデル ◦ 時間順序性のあるデータに対して有用 ◦ ex.) “私” の次に “が” や “は” が来やすいことを予測可能 88 / 133
  89. DLとCNNの論文数推移 Ref: https://arxiv.org/ on 20170810 *これは非常に限定的なカウントであることに注意 89 / 133

  90. CNNのモチベーション 画像分析の場合を例に考える 異なる位置にある同一のオブジェクトは同じものであると認識したい 人間の目には同じオブジェクトが写っているがデータとしては異なる このような状況をうまく取り扱えるモデルを構築したい → 並進移動や回転やスケーリング等の幾何学的変換に対してロバスト 同じオブジェクトだが 異なる位置に存在 90

    / 133
  91. CNNの基礎 AlexNet (https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks) Convolution (H,W,C) → (H’,W’,C’) conv. の後に ReLU

    を適用 Pooling (H,W,C) → (H’,W’,C) Dense (Fully Connected) (D) → (D’) dense の前に特徴量を一次 元化 (H,W,C) → (D) データの次元は次のように表現: (H,W,C) = (Height, Width, Channel) Softmax (D) → (D) 確率値を 返す関数 91 / 133
  92. Convolution Convolution はある種の特徴量抽出として機能 Convolution それ自体は単なる数学的演算で行列の積として表現可 ex.) 3*3 convolution の演算 1

    2 1 2 4 2 1 2 1 * = 1 2 1 2 4 2 1 2 1 1 2 1 2 4 2 1 2 1 1 2 1 2 4 2 1 2 1 92 / 133
  93. Convolution Convolution はある種の特徴量抽出として機能 Convolution それ自体は単なる数学的演算で行列の積として表現可 ex.) Sobel フィルタを用いたエッジ検出 従来手法ではフィルタの重みを人手で設計する必要があったが、 CNN

    では重みは back propagation で “学習” することが可能 • 複数チャネルで様々な特徴を自動的に抽出可能 ただし1つのチャネルに関しては同一の重みを使用 (shared weight) • 並進移動不変性とパラメタ数削減が実現 * -1 0 1 -2 0 2 -1 0 1 -1 -2 -1 0 0 0 1 2 1 93 / 133 自乗和平方根
  94. Pooling Pooling は feature map を圧縮する働きを担う 最もよく使われる max pooling は与えられた領域の最大値を取得

    (その他にも average pooling などがある ) 1 2 9 2 -2 5 4 2 4 3 -3 -1 4 3 0 1 この演算によって以下が実現 • “小さな” 幾何学的変換に対してロバストになる 層を積み重ねることで不変性は強固になる • feature map のサイズを削減 2*2 filters with stride 2 5 9 4 1 94 / 133
  95. Dense Dense layer は元々の MLP における層と同じで全てのノードを接続 Dense layer は Fully

    Connected (FC) layer とも呼ばれる 現代的な CNN では出力層に近い部分でのみ使用されることが多い 重みのパラメタ数が dim(in)*dim(out) となるため大きくなりがち → パラメタ数を減らすためにも多用はしたくない 95 / 133 . . . . . .
  96. Softmax Softmax は次で定義される関数: f(x i ) = exp(x i )

    / Σ j exp(x j ) この関数は [0,1] の実数値を返すもので確率値として解釈可能 f(x i ) ∈ [0,1] Σ i f(x i ) = 1 この softmax を出力とすることで DL を classifier として扱える (multiclass では softmax を使わずに sigmoid を使ったりもする) 96 / 133
  97. CNNの発展 97 / 133

  98. 1980 Neocognitoron: http://www.cs.princeton.edu/courses/archive/spr08/cos598B/Readings/Fukushima1980.pdf 1998 LeNet-5: http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf 2012 AlexNet: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks 2013

    Network in Network: https://arxiv.org/abs/1312.4400 2014 VGG: https://arxiv.org/abs/1409.1556 2015 Inception(V3): https://arxiv.org/abs/1512.00567 2015 ResNet: https://arxiv.org/abs/1512.03385 2016 SqueezeNet: https://arxiv.org/abs/1602.07360 2016 ENet: https://arxiv.org/abs/1606.02147 2016 Densely Connected Convolutional Networks: https://arxiv.org/abs/1608.06993 2017 Deep Complex Networks: https://arxiv.org/abs/1705.09792 CNNの進化 98 / 133
  99. Neocognitron • CNNのプロトタイプ CNNの基本的な要素 を数多く含んでいる • 階層的な構造 ◦ S-cells (convolution)

    特徴抽出 ◦ C-cells (avg. pooling) 変換に対する不変性 • 自己組織化的な学習 back propagation ではない学習方法 Ref: http://www.cs.princeton.edu/courses/archive/spr08/cos598B/Readings/Fukushima1980.pdf 99 / 133
  100. LeNet-5 • Convolution 特徴抽出 • Subsampling (avg. pooling) 位置不変性、サイズ削減 •

    非線型性 sigmoid, tanh 2 8 -2 3 1 7 2 1 -1 2 9 2 -2 0 3 3 4.5 2 -0.5 4.25 Ref: http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf 100 / 133
  101. AlexNet • ReLU 勾配消失を防ぐ • Max pooling avg. より高性能 •

    GPU comp. 計算速度向上 • Dropout 汎化性能向上 1 2 9 2 -2 5 4 2 4 3 -3 -1 4 3 0 1 5 9 4 1 Ref: https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks 101 / 133
  102. Network In Network • MLP after conv. feature maps の効率

    的組み合わせを学習 • Global Average Pooling 1 feature map が1クラスの 出力に対応 (no dense) • 小さなモデル 29 [MB] for ImageNet model MLP softmax Ref: https://arxiv.org/abs/1312.4400 102 / 133
  103. VGG • 基本的な構成要素を用いた深いモデル ◦ convolution ◦ pooling ◦ activation (ReLU)

    ◦ Dense ◦ softmax • 小さめの convolution の積み重ね ◦ 3*3 spatial convolutions • パラメタ数が非常に多い ◦ 浅い層でチャネル数が多い ◦ Dense layer が多い Ref: https://arxiv.org/abs/1409.1556 103 / 133
  104. InceptionV3 • Inception module ◦ parallel ops. and concatenation 効率的に異なる特徴を抽出

    ◦ 基本的には 3*3 convolution これは VGG を踏襲 ◦ 1*1 convolution チャネル数を減らして計算効率化 • Global Average Pooling and Dense ◦ 精度とモデルサイズのバランス • 分類問題で高い性能を発揮! Ref: https://arxiv.org/abs/1512.00567 104 / 133
  105. ResNet • Residual structure ◦ shortcut (by-pass) connection 勾配消失を防ぐ ◦

    1*1 convolution チャネル数を減らして計算効率化 • 非常に深いモデル ◦ 全 152 layer ◦ 1000 layer 以上も構築可能! Ref: https://arxiv.org/abs/1512.03385 105 / 133
  106. SqueezeNet • Fire module チャネル数を絞って計 算を効率化 • Deep compression 重みスパース化

    重み量子化 Huffman符号化 • 小さなモデル データを 6 bit で扱え ば 0.47 [MB] Ref: https://arxiv.org/abs/1602.07360 106 / 133
  107. ENet • Realtime segmentation model ◦ 浅い層での downsampling ◦ 非対称な

    encoder-decoder 構造 ◦ PReLU ◦ small model ~ 1[MB] • Encoder 部分は CNN として扱える ◦ Global Max Pooling を使う input 3 × 512 × 512 encoder decoder Ref: https://arxiv.org/abs/1606.02147 107 / 133
  108. • Dense block ◦ 前方向の skip connections ◦ 入力近くと出力近くの layer

    の connection を含むモデルは効率 的に学習可能とされている • Growth rate ◦ feature maps の数を制限してモ デルサイズをコントロール DenseNet Ref: https://arxiv.org/abs/1608.06993 108 / 133
  109. Deep Complex Networks • 複素構造 ◦ convolution ◦ batch normalization

    • 複素数を使うことによる利点 ◦ 生物学的 & 信号処理的側面 発火率や相対タイミングを表現可能 ◦ パラメタ数的に効率的 2(depth) 分だけ実数値と比べて効率的 Ref: https://arxiv.org/abs/1705.09792 109 / 133
  110. 各モデルの比較 Ref: https://arxiv.org/pdf/1605.07678.pdf DenseNet-161 (k=48) SqueezeNet 110 / 133

  111. CNNの具体的な応用例 111 / 133

  112. Classification 一枚の画像に対してその画像がどのクラスに属するのかを分類する 112 / 133

  113. Classification 画像をパッチに分割すればパッチ毎に分類をしてヒートマップを作成することも可能 113 / 133

  114. Ref: https://arxiv.org/abs/1703.06870 Semantic Segmentation 画像をピクセル毎に分類してクラスごとに画像を塗りつぶす 114 / 133

  115. Object detection 画像中のオブジェクトを識別して矩形で切り出し、どのクラスに属するかを分類 115 / 133

  116. Style Transfer 画像を特定のスタイルに変換(下の例は色が鮮やかになるような変換) 116 / 133

  117. Regression 画像をインプットにして回帰分析をする(下の例では魅力度のスコアを算出) 117 / 133

  118. Ref: http://demos.algorithmia.com/colorize-photos/ Colorization 白黒の画像を自動的に着色する 118 / 133

  119. Ref: http://im2recipe.csail.mit.edu/ Image to Text 画像とテキストを同じ特徴量空間に射影して対応付ける (下の例では画像をクエリとして対応するレシピのテキストを検索) 119 / 133

  120. Ref: https://github.com/paucarre/tiefvision Similarity Computation 画像を低次元の特徴量化して、類似度を算出 120 / 133

  121. Ref: https://arxiv.org/abs/1707.02921 Super Resolution 画像を美しく拡大する 121 / 133

  122. Ref: https://arxiv.org/abs/1704.00028 Image Generation ノイズから画像を生成する 122 / 133

  123. Ref: https://arxiv.org/abs/1605.03170 Pose Estimation 画像中の人の関節点を推定して姿勢を求める 123 / 133

  124. 画像分析の最近の話題 124 / 133

  125. 最近の話題 • Adversarial training を用いた画像生成 より現実に近い画像を生成するために様々な GAN の亜種が登場 • 各種

    style transfer 様々な観点に基づき画像変換(プロ風画像に変換、昼夜変換、etc) • DLにおける汎化性能の再考 (パラメタ数) > (データ数) となるDLの汎化性能はなぜ高いのか? • DLの誤判別を引き起こすような adversarial perturbations DLのロバスト性の理解、人間とDLの認識の違いを理解 • モバイルをはじめとするIoT機器への実装 MobileNetのような軽量のモデルをIoT機器へ搭載 • Pose estimations, Video analyses, 3D analyses 単純な分類からより高度な分析へ • ... 125 / 133
  126. ディープラーニングの 各種フレームワーク 126 / 133

  127. Frameworks https://github.com/tensorflow/tensorflow 66,374 32,505 https://github.com/torch/torch7 https://github.com/chainer/chainer 7,175 2,129 2,775 737

    https://github.com/BVLC/caffe 19,558 11,996 https://github.com/dmlc/mxnet 10,705 3,998 https://github.com/Theano/Theano 6,753 2,258 https://github.com/Microsoft/CNTK 12,021 3,084 Framework GitHub repository Stars Forks Languages Python C++ Python Lua Python Python C++ Python, R Julia, Scala Python C++ Python C++ Features The best total ability Good RNN modeling cap. High speed Dynamical comp. graph Flexible Dynamical comp. graph Often used in img. recognition Low level treatment Imperative & Symbolic Multi platforms & devices On 2017/0810 support support support 127 / 133
  128. 【実習】 画像分析 128 / 133

  129. 分析の準備 • 分析環境の構築 (まだしてなければ) https://github.com/cookpad/cookpad-internship-2017-summer を clone $ cd cookpad-internship-2017-summer/ml

    $ bash run.sh このシェルスクリプトでデータ準備から環境構築までを実施 標準出力に http://0.0.0.0:8888/?token=xxxx のように表示される これをブラウザのアドレスバーにコピペすることで jupyter notebook が起動 • /notebooks 以下に分析用の notebook が格納されていて、ここでは以下を使用 ・/notebooks/recipe_classification_image.ipynb ・/notebooks/object_detection/object_detection.ipynb 129 / 133
  130. 【実習】 発展的課題への挑戦 130 / 133

  131. 課題リスト • 実習で使用した notebook の末尾にある課題に挑戦 それぞれが独立した問題なので好きなものを解いてよい • repository の advanced_challenges.md

    にある課題に挑戦 いくつか問題を準備したので好きなものを解いてよい • 自分でオリジナルの課題を設定して挑戦 機械学習に関連することならばどんなものでもよい 131 / 133
  132. まとめ 132 / 133

  133. まとめ • 機械学習の理解 機械学習の定義とどのような場面で使うことができるかを理解 • 機械学習の初歩を理解する実習 Xgboost を用いたテキストデータでのレシピ分類を実装 • ディープラーニングの基礎を理解

    画像分析で使われる CNN の基礎と最近の発展を理解 • 画像分析の実習 Keras with TensorFlow backend でレシピ分類を実装 • 発展的課題への取り組み 各々が自分の興味のあるタスクにチャレンジ 133 / 133