Upgrade to Pro — share decks privately, control downloads, hide ads and more …

機械学習/cookpad summer internship 2017 ml

yoppe
August 15, 2017

機械学習/cookpad summer internship 2017 ml

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

yoppe

August 15, 2017
Tweet

More Decks by yoppe

Other Decks in Technology

Transcript

  1. 時間割 時間 内容 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
  2. 講師紹介 • 名前 菊田 遥平(きくた ようへい) • 所属 研究開発部 •

    肩書 リサーチサイエンティスト 博士(理学) • 専門 画像分析、推薦アルゴリズム • 好きな食べ物 焼き餃子、寿司、Dr Pepper @yohei_kikuta 4 / 133
  3. ポアソン分布が好き! • 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
  4. 分析環境の構築 • 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
  5. 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
  6. 事例:機械翻訳 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
  7. 疑問 機械学習は確かに強力な事例が満載だが... • 機械学習の定義は? • 以下の用語の違いを説明できるか? ◦ 機械学習(Machine Learning: ML)

    ◦ 人工知能(Artificail Intelligence: AI) ◦ ディープラーニング(Deep Learning: DL) • 機械学習で扱える問題にはどのようなものがあるのか? 21 / 133
  8. 機械学習の定義 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
  9. 機械学習で扱える問題 機械学習を用いることで、以下のような問題を解くことができる • Regression (回帰) • Time Series Analysis (時系列分析)

    • Classification (分類) • Learning to Rank (ランキング学習) • Game Play and Robot Action (ゲームやロボットの自動操作) • Pattern Mining (パターン発見) • Clustering (クラスタリング) • Optimization (最適化) • Generation (生成) • ... 27 / 133
  10. 機械学習で扱える問題 • 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 . . .
  11. 学習アルゴリズム 機械学習の学習アルゴリズムは以下の4つに大別される • Supervised learning (教師あり学習) 我々がターゲットとする問題の 80% がこれに相当 •

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

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

    F 2 > F 3 ある指標 データを4つのグループに分けるということは所与の条件として、 定めた指標を小さくするように学習をしていくことできれいに分けられる 41 / 133
  14. 機械学習の活用 • (機械学習に関する幾許かの知識) • 問題の設計 • データの収集 • モデルの学習 •

    モデルの評価 • モデルをプロダクトにデプロイ ( もしくは問題を諦める ) • 継続してモデルを改善 様々なトライ&エラー 46 / 133
  15. 機械学習の活用 • (機械学習に関する幾許かの知識) 無からは無しか生まれない 発展著しい機械学習の話題をキャッチアップする必要がある 情報源の例: ◦ 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
  16. 機械学習の活用 • 問題の設計 興味ある問題に機械学習を適用するために最重要となる部分 ◦ 基本的には一般的なプロジェクトと同様 ◦ 重要になるのは成功が保証されていないという観点 ▪ 様々な場合で試していくつかが成功すれば御の字

    ▪ 進捗共有の方法を設定(issue や notebook のまとめ方など) ▪ いつ諦めるのかという期限を設ける ◦ 機械学習の役割を同定 ▪ モデルの入力 ▪ モデルの出力 ◦ 可能な限り機械学習に依存する部分を切り出す ▪ 依存性の切り分け、効果的な役割分担 48 / 133
  17. 機械学習の活用 • モデルの学習 モデルとは入力空間を出力空間に写像する関数 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
  18. 機械学習の活用 • モデルの評価 “モデルがどれくらい優れているか” を定量的に定める必要有 評価関数自体が研究対象になるほど深いものだが最低限は以下 (滑らかな関数はモデルの学習時に用いられることが多い) ◦ 回帰の場合 平均二乗誤差

    (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
  19. 機械学習の活用 • モデルをプロダクトにデプロイ ( もしくは問題を諦める ) 自信満々のモデルをデプロイして成果を出そう! 問題を諦めるという意思決定も時には重要 • 継続してモデルを改善

    自信満々のモデルは往々にして大した成果は出ない そこで継続的にモデルを改善する仕組みが重要となる 更にデータは dynamical な対象なのでアップデートが必要 モデル自体も次々と新しく強力なものが登場するのでそれを試す 52 / 133
  20. “経験者”への最短経路 • 使用言語 ◦ 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
  21. 機械学習を学ぶために • 書籍 ◦ フリーライブラリで学ぶ機械学習入門: 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
  22. 機械学習を学ぶために • ウェブ情報 ◦ 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
  23. 機械学習を学ぶために • 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
  24. 機械学習を学ぶために • 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
  25. 代表的な学会 種類 国際学会 国内学会 理論 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
  26. 分析の準備 • 分析環境の構築 (まだしてなければ) 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
  27. はじめに Deep Learning (DL) は応用範囲が広いため全てをカバーするのは困難 • 今日話すこと ◦ DLの定義 ◦

    Convolutional Neural Networks (CNN) の基礎と最近の発展 ◦ CNNで何ができるか • 今日話さないこと ◦ DLの歴史 ◦ CNN以外のモデル(Recurrent Neural Networks など) ◦ 様々なDLライブラリの具体的な使い方や比較 66 / 133
  28. DLの定義 Deep Learning 隠れ層が2層以上の Neural Networks (NN) (機械) 学習 過去10年位で適切に重みを

    学習するために様々な要素が進展 • 大量のデータ • Rectified Linear Unit (ReLU) • 最適化手法の発展 • ドロップアウトやバッチ正規化 • 事前学習 . . . . . . . . . . . . 68 / 133
  29. NNとは何か? 基本的な構成要素はパーセプトロン 和 + 閾値 重み i 重み 1 重み

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

    Hierarchically stacked perceptrons • Pros. 十分な数のノードがあれば任意の関数を近似可能(万能性定理) 層を積み重ねることで入力と出力の複雑な関係性を表現可能 • Cons. パラメタ数が多くなるため学習が難しい 入力層 出力層 . . . . . . . . . . . . 71 / 133
  31. Back propagation Back propagation はニューラルネットワークの学習方法の一種 入力層 出力層 予測と答えの差を最小化するために誤差信号を出力層から伝播 伝播する方向は予測をする際の過程と逆方向 →

    入力層に近い部分では信号が弱くなりがち(勾配消失問題) prediction back propagation *線の太さは信号の強さを表現 . . . . . . . . . . . . 73 / 133
  32. 勾配消失問題の解決 • 大量のデータ データサイズは性能向上に重要 (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
  33. DLの定義 Deep Learning 隠れ層が2層以上の Neural Networks (NN) (機械) 学習 過去10年位で適切に重みを

    学習するために様々な要素が進展 • 大量のデータ • Rectified Linear Unit (ReLU) • 最適化手法の発展 • ドロップアウトやバッチ正規化 • 事前学習 . . . . . . . . . . . . 75 / 133
  34. DLの特徴 • 大量のパラメタを大量のデータを用いて学習 (パラメタの数)>(データの数)となる場合も多い なぜこれでうまくいくのかということは現在も盛んに議論 • 分散表現 高い表現能力 • 階層的かつ自動的な特徴量の抽出

    単純なものから複雑なものへと段階的に特徴量を抽出 人力で特徴量を作らなくてもよいというパラダイムシフト • 特定のタスクに関して非常に高い性能 ある種のタスクに関しては人間よりも高い性能を発揮 77 / 133
  35. 具体的なDLのモデル 高い性能を発揮するには目的に応じた特別な構成のモデルが必要 • Convolutional Neural Network (CNN) ◦ 画像分析でよく使われるモデル ◦

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

    ◦ 画像分析でよく使われるモデル ◦ 画像中のオブジェクトに対する幾何学的変換に対してロバスト ◦ ex.) 画像中の異なる場所に位置する同一のオブジェクトを認識 • Recurrent Neural Network (RNN) ◦ 自然言語処理でよく使われるモデル ◦ 時間順序性のあるデータに対して有用 ◦ ex.) “私” の次に “が” や “は” が来やすいことを予測可能 88 / 133
  37. 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
  38. 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 自乗和平方根
  39. 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
  40. Dense Dense layer は元々の MLP における層と同じで全てのノードを接続 Dense layer は Fully

    Connected (FC) layer とも呼ばれる 現代的な CNN では出力層に近い部分でのみ使用されることが多い 重みのパラメタ数が dim(in)*dim(out) となるため大きくなりがち → パラメタ数を減らすためにも多用はしたくない 95 / 133 . . . . . .
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. VGG • 基本的な構成要素を用いた深いモデル ◦ convolution ◦ pooling ◦ activation (ReLU)

    ◦ Dense ◦ softmax • 小さめの convolution の積み重ね ◦ 3*3 spatial convolutions • パラメタ数が非常に多い ◦ 浅い層でチャネル数が多い ◦ Dense layer が多い Ref: https://arxiv.org/abs/1409.1556 103 / 133
  48. 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
  49. ResNet • Residual structure ◦ shortcut (by-pass) connection 勾配消失を防ぐ ◦

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

    重み量子化 Huffman符号化 • 小さなモデル データを 6 bit で扱え ば 0.47 [MB] Ref: https://arxiv.org/abs/1602.07360 106 / 133
  51. 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
  52. • Dense block ◦ 前方向の skip connections ◦ 入力近くと出力近くの layer

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

    • 複素数を使うことによる利点 ◦ 生物学的 & 信号処理的側面 発火率や相対タイミングを表現可能 ◦ パラメタ数的に効率的 2(depth) 分だけ実数値と比べて効率的 Ref: https://arxiv.org/abs/1705.09792 109 / 133
  54. 最近の話題 • Adversarial training を用いた画像生成 より現実に近い画像を生成するために様々な GAN の亜種が登場 • 各種

    style transfer 様々な観点に基づき画像変換(プロ風画像に変換、昼夜変換、etc) • DLにおける汎化性能の再考 (パラメタ数) > (データ数) となるDLの汎化性能はなぜ高いのか? • DLの誤判別を引き起こすような adversarial perturbations DLのロバスト性の理解、人間とDLの認識の違いを理解 • モバイルをはじめとするIoT機器への実装 MobileNetのような軽量のモデルをIoT機器へ搭載 • Pose estimations, Video analyses, 3D analyses 単純な分類からより高度な分析へ • ... 125 / 133
  55. 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
  56. 分析の準備 • 分析環境の構築 (まだしてなければ) 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
  57. 課題リスト • 実習で使用した notebook の末尾にある課題に挑戦 それぞれが独立した問題なので好きなものを解いてよい • repository の advanced_challenges.md

    にある課題に挑戦 いくつか問題を準備したので好きなものを解いてよい • 自分でオリジナルの課題を設定して挑戦 機械学習に関連することならばどんなものでもよい 131 / 133
  58. まとめ • 機械学習の理解 機械学習の定義とどのような場面で使うことができるかを理解 • 機械学習の初歩を理解する実習 Xgboost を用いたテキストデータでのレシピ分類を実装 • ディープラーニングの基礎を理解

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