「機械学習とは?」から始める deep learning実践入門

48
機機機機機機 機機機機機 Deep Learning 機機機機

Upload: hideto-masuoka

Post on 12-Apr-2017

188 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: 「機械学習とは?」から始める Deep learning実践入門

「機械学習とは?」から始めるDeep Learning実践入門

Page 2: 「機械学習とは?」から始める Deep learning実践入門

自己紹介• 名前• 舛岡英人 (@hidetomasuoka)

• 略歴• 株式会社ソピア(現アクセンチュア)入社

• 中小企業向け ERP のスクラッチ開発を提案からサポートまですべてを担当• 株式会社 Preferred Infrastructure 入社

• 各製品の提案からサポートまですべてを担当• 株式会社 Intimate Merger に出向

• 株式会社 レトリバ創業メンバー

Page 3: 「機械学習とは?」から始める Deep learning実践入門

自己紹介• 社外活動• PyConJP 2016 スタッフ

• 招待講演担当• Chainer OSS 活動

• community イベントのリード

Page 4: 「機械学習とは?」から始める Deep learning実践入門

会社概要株式会社レトリバ• 設立: 2016 年 8 月• 場所:東京都千代田区大手町• 役員:代表取締役 社長 河原 一哉   取締役      西鳥羽 二郎• 従業員数: 11 名• 事業内容:ソフトウェア製品の開発・販売• ミッション:お客様の課題を最先端の技術で解決する• HP:https://retrieva.jp/• Twitter:@retrieva_jp

Page 5: 「機械学習とは?」から始める Deep learning実践入門

アジェンダ• Part1: 機械学習とDeepLearningの概要• 機械学習とは• DeepLearning とは?• Chainer とは?

• Part2: jupyter notebookと Chainerを使ってDeep Learningに触れてみよう• jupyter notebook をセットアップしよう!• Deep Learning の Hello world である Minst をやってみよう!• chainer で線画自動着色してみよう!

Page 6: 「機械学習とは?」から始める Deep learning実践入門

Part1: 機械学習とDeep Learningの概要

Page 7: 「機械学習とは?」から始める Deep learning実践入門

機械学習とは• 機械学習の定義

- 「経験(データ)によって賢くなるアルゴリズム」

• 古典的な統計手法に比べた特徵

- 確率分布の仮定などの制限が少ない

- 大規模・高次元データにも有効

7

Dimensionality Reduction by Learning an Invariant MappingRaia Hadsell, Sumit Chopra, Yann LeCun, CVPR, 2006

学習データ

分類モデル

Page 8: 「機械学習とは?」から始める Deep learning実践入門

機械学習の典型的なプロセス

8

(0, 1, 2.5, -1, …)(1, 0.5, -2, 3, …)(0, 1, 1.5, 2, …)

特徴ベクトル

グラフィカルモデル

分類 / 回帰SVM/LogReg/PACW/ALOW/Naïve Bayes/CNB/DT

RF/ANN…

クラスタリングK-means/Spectral Clustering/MMC/L

SI/LDA/GM…

構造分析HMM/MRF/CRF…

分野に依存しない抽象化データ 様々な手法理論を適用

機械学習

文書

画像 センサー

行動履歴

様々な様式の生データ

特徴抽出

Page 9: 「機械学習とは?」から始める Deep learning実践入門

文章からの特徴抽出• 例:固有名詞を取り出してニュース記事の特徴とする

9

2020年の東京五輪・パラリンピックの主会場となる新国立競技場をめぐり、安倍晋三首相は、総工費が2520億円に膨らんだ建設計画を見直す考えを17日に表明する方向で最終調整に入った。競技場を19年のラグビーワールドカップ(W杯)の主会場にする計画は断念する。同日、東京五輪・パラリンピック組織委員会会長の森喜朗元首相と会談し、計画見直しへの協力を求める方針だ。

2020年の東京五輪・パラリンピックの主会場となる新国立競技場をめぐり、安倍晋三首相は、総工費が2520億円に膨らんだ建設計画を見直す考えを17日に表明する方向で最終調整に入った。競技場を19年のラグビーワールドカップ(W杯)の主会場にする計画は断念する。同日、東京五輪・パラリンピック組織委員会会長の森喜朗元首相と会談し、計画見直しへの協力を求める方針だ。単語 頻度東京五輪 2パラリンピック 2新国立競技場 1安倍晋三 1・・・ ・・・

機械学習アルゴリズム

文章からの固有名詞の抽出は固有表現抽出( Named Entity Recognition; NER )という

Page 10: 「機械学習とは?」から始める Deep learning実践入門

画像からの特徴抽出• 例: Histogram of Gradient (HoG 特徴量 )

http://www.vlfeat.org/overview/hog.html

機械学習アルゴリズム

各ピクセルでの勾配を小ブロック(セル)単位でまとめてヒストグラム化

各セルでのヒストグラムを(正規化して)すべてまとめる

Page 11: 「機械学習とは?」から始める Deep learning実践入門

精度をあげるのが職人技•精度をあげるためには特徴抽出が重要•特徴抽出は難しい• タスクごとに最適な特徴抽出方法は異なる• 機械学習コンテストは最後は特徴抽出のチューニング勝負

•これまで様々な特徴抽出方法が研究されてきた• 自然言語: n-gram/BoW  画像: SIFT/SURF/HOG/PHOW/BoVW• その他にも様々なヒューリスティックが存在

•精度をあげるにはデータに合わせたチューニングが必要

Page 12: 「機械学習とは?」から始める Deep learning実践入門

12

2012年画像認識コンテストでDeep Learningを用いたチームが優勝

→ILSVRC2012優勝チーム Supervison の結果 [Krizhevsky+ ‘12]

衝撃的な出来事• 限界と思われた認識エラーを 4割も減らした (26%→16%)• 特徴抽出を行わず、生の画素を NN に与えた翌年の同コンテストの上位チームはほぼ Deep Learning ベースの手法

Page 13: 「機械学習とは?」から始める Deep learning実践入門

ニューラルネットブーム• 様々なコンペティションで DL が既存手法を凌駕• 16%(‘12) → 11%(‘13) → 6.6%(’14) → 4.8%('15) → 2.9%('16)

• 各企業が DL研究者の獲得競争• Google/FaceBook/Microsoft/Baidu

•実サービスも DL ベースに置き換えられる• Siri/Google 画像検索 /Google翻訳

GoogLeNet のアーキテクチャ↓

http://research.google.com/archive/unsupervised_icml2012.html

Google Brain による猫認識↑[Le, Ng, Jeffrey+ ’12]

Page 14: 「機械学習とは?」から始める Deep learning実践入門

音声認識の分野では

10 年間の停滞していたが、DL登場により劇的に精度が向上した

Page 15: 「機械学習とは?」から始める Deep learning実践入門

ニューラルネットワークが利用されたタスクデータ 画像タスク カテゴリ

分類顔検出 生成 ゲーム AI シーン認識

動画 画像 +自然言語

音声 + 動画カテゴリ分類

動作認識 キャプション生成

表現学習 音声認識

自然言語 音声 化合物表現学習 翻訳 質問応答 会話検出 QSAR

( 活性予測 )

応用分野音声検索画像キュレーションeコマース自動運転ロボティックス医療画像マーケティング

Page 16: 「機械学習とは?」から始める Deep learning実践入門

Deep Learningの導入

Page 17: 「機械学習とは?」から始める Deep learning実践入門

x1

xN

・・・・・・

h1

hH

・・・・

ニューラルネットワーク(多層パーセプトロン)

kM

k1

yM

y1

ForwardBackward

・・ ・・

入力層 隠れ層 出力層文書

画像

センサー

チューリップ

異常確率 50%

カテゴリ:政治

Page 18: 「機械学習とは?」から始める Deep learning実践入門

Forward Propagation(順伝播)• 入力層(黄色)に値を与え、順方向に計算を進める

• Forward 計算の過程で損失 (Loss)とエラーを計算する• 通常エラーは計算グラフの最後のユ

ニット(緑)での値を指す• 計算グラフの途中の値をエラーに加え

ても良い• Loss は各ユニットの値や各レイヤー

のパラメータの関数になっている

Forward

Page 19: 「機械学習とは?」から始める Deep learning実践入門

Backward Propagation(誤差逆伝播)• 計算グラフの末端のユニット

(緑)にエラーを与え、逆方向に計算を進める• Backward の過程で各パラ

メータについてのエラーを計算する

Backward

Page 20: 「機械学習とは?」から始める Deep learning実践入門

x1

xN

・・・・・・

h1

hH

・・・・

ニューラルネットワーク(多層パーセプトロン)

kM

k1

yM

y1

ForwardBackward

・・ ・・

入力層 隠れ層 出力層文書

画像

センサー

チューリップ

異常確率 50%

カテゴリ:政治

Page 21: 「機械学習とは?」から始める Deep learning実践入門

代表的なニューラルネットワーク (1)Convolutional Neural Network

• 畳み込み層とプーリング層を交互に重ねた構造をしたニューラルネットワーク

• 主に画像解析で利用されている

• 畳み込み層• 前層の近傍のユニットのみと結合してい

る• ユニット間で重みを共有

• プーリング層• ユニットの活性をまとめる• 最大値をとる (Max Pooling) か平均値を

とる (Average Pooling) のが一般的

畳み込み層プーリング層

同じ色の結合は重みが等しい

Page 22: 「機械学習とは?」から始める Deep learning実践入門

代表的なニューラルネットワーク (2)Recurrent Neural Network

• 中間層の活性が、前層と前時刻の自分自身の活性により決定される

• 音声・動画・自然言語などの可変長データの解析に利用されている

• 中間層のループ部分を時間方向に展開すると通常のフィードフォワードニューラルネットとみなせる

Page 23: 「機械学習とは?」から始める Deep learning実践入門

ディープラーニングの応用例Deep Q Network*(深層学習で強化学習)

* Mnih, Volodymyr, et al. "Human-level control through deep reinforcement learning." Nature 518.7540 (2015): 529-533.** Caffe で Deep Q-Network を実装して深層強化学習してみた http://d.hatena.ne.jp/muupan/20141021/1413850461*** PFI インターン 2014 最終発表 http://www.ustream.tv/recorded/53153399 23

Page 24: 「機械学習とは?」から始める Deep learning実践入門

ディープラーニングの応用例画像生成• 文字を”描く“ニューラルネット

• 入力と同じ「雰囲気」の数字が出力されている。同じ数字でも、最左画像と生成画像は異なる事に注意

入力 生成結果

Kingma, Diederik P., et al. "Semi-supervised learning with deep generative models." Advances in Neural Information Processing Systems. 2014. の実験を弊社で再現

•絵を”描く“ニューラルネットhttp://soumith.ch/eyescream/

Page 25: 「機械学習とは?」から始める Deep learning実践入門

典型的なニューラルネットワーク(多層パーセプトロン)

x1

xN

・・・・・・

h1

hH

・・・・

kM

k1

yM

y1

f1f2 f3

W2/b2W1/b1

tM

t1

損失関数で評価正解ラベル入力

ForwardBackward

出力

・・ ・・ ・・ 学習すべきパラメータ• W1:1層目のパラメータ行列• b1:1層目のバイアス項 • W2:2層目のパラメータ行列• b2:2層目のバイアス項

Forward更新式• h = f1(x) = Sigmoid(W1x+b1)• k = f2(h) = Sigmoid(W2h+b2)• y = f3(k) = SoftMax(k) f3i(k) = exp(ki)/Σ_{j} exp(kj)

Page 26: 「機械学習とは?」から始める Deep learning実践入門

DeepLearningフレームワークの構成要素

変数( n次元配列)層計算グラフ最適化アルゴリズム

順伝播逆伝播

ニューラルネット変数 層

正解データも入力の一部とみなすと見通しが良い

途中で分岐してもよい( 一般にはDAG)

Page 27: 「機械学習とは?」から始める Deep learning実践入門

minibatch j

訓練の流れ

Epoch 1

Epoch N

Epoch 2

Epoch i

Epoch i

全訓練データをシャッフルminibatch 1

Forward

minibatch 2

パラメータ更新

時刻• Epoch (Iteration) :全訓練データを 1巡する事→ 各訓練データは Net に N回与える• Solver : Net を訓練するモジュール• minibatch :少数の訓練データをまとめたもの

27

パラメータ更新

minibatch jBackward

Page 28: 「機械学習とは?」から始める Deep learning実践入門

ディープラーニングフレームワークChainerの紹介

Page 29: 「機械学習とは?」から始める Deep learning実践入門

Chainer概要• 製作者:得居誠也、開発: Preferred Networks http://chainer.org/• バージョン: 1.0.0 ( 2015 年 6 月 9日)

       1.20.1 ( 2017 年 2 月 4日現在)• ライセンス: MIT• 言語: Python ( pip install chainerでインストール可)

• 依存モジュール: Python2.7+/3.4+/ 3.5.+、 Numpy1.9+/1.10/1.11、 Six1.9+

• CUDA依存モジュール: CUDA6.5+

• 特徴• Powerful: CUDA・マルチ GPU対応

• Flexible:ほぼ任意のアーキテクチャーを実現可能

• Intuitive:計算グラフを通常の Pythonコードで記述可能

Page 30: 「機械学習とは?」から始める Deep learning実践入門

計算グラフ構築のパラダイム:Define-and-Run

• 計算グラフを構築した後に、データを計算グラフに順伝播する• 計算グラフ構築方法はフレームワークにより異なる• prototxt, yaml ファイル , Lua スクリプト etc.

• 多くの深層学習フレームワークが採用• Caffe/Torch/Theano ベースのフレームワーク

• 長所• メモリ管理の必要がほとんどない• 計算グラフの最適化を暗黙的に行える

• 短所• 1訓練ループの中では計算グラフを変更できない

f g

x f g

計算グラフ構築

データフィード

Page 31: 「機械学習とは?」から始める Deep learning実践入門

計算グラフ構築のパラダイム:Define-by-Run

• データの順伝播とそのデータに対する計算グラフの構築を同時に行う

• 長所• 順伝播を通常のプログラムで記述できる

• コントロールフロー(条件分岐、 for ループ)を計算グラフ構築に利用可能

• 設定ファイル用のミニ言語を作る必要がない• 訓練データごとに異なる計算グラフを変更可能

• 短所• 訓練データ全体に渡る最適化は自明ではない• 計算グラフを動的に構築するので、メモリ管理が必要

x yf

x = chainer.Variable(...)y = f(x)z = g(x)

zg

データフィード= 計算グラフ構築

Chainer はこのパラダイムを採用

Page 32: 「機械学習とは?」から始める Deep learning実践入門

LSTMを Chainerをつかって実装する(1 )

入力層 LSTM 出力層• LSTM(Long short-term memory) は、RNN(Recurrent Neural Network) の拡張として 1995 年に登場した、時系列データ (sequential data) に対するモデル、あるいは構造(architecture) の1種です

Microsoft Office ユーザー
図が通常のRNNの説明になっているので、LSTMの図を加えると良いと思います。例えばこの記事のhttp://qiita.com/t_Signull/items/21b82be280b46f467d1b、https://qiita-image-store.s3.amazonaws.com/0/60969/ad3d229e-3dda-e8ad-eeff-4a8b447e22d3.pngなど
Page 33: 「機械学習とは?」から始める Deep learning実践入門

LSTMを Chainerをつかって実装する(2 )

class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer )

def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y

rnn = RNN()model = L.Classifier(rnn)optimizer = optimizers.SGD()optimizer.setup(model)

Page 34: 「機械学習とは?」から始める Deep learning実践入門

LSTMを Chainerをつかって実装する(3 )

class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer )

def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y

入力層 LSTM 出力層

DL の層を定義する(今回だと右のような 3層)

Page 35: 「機械学習とは?」から始める Deep learning実践入門

LSTMを Chainerをつかって実装する(4 )

class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer )

def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y

入力層 LSTM 出力層

各層に値をセットする

Page 36: 「機械学習とは?」から始める Deep learning実践入門

LSTMを Chainerをつかって実装する(5 )

class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer )

def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y

rnn = RNN()model = L.Classifier(rnn)optimizer = optimizers.SGD()optimizer.setup(model)

使用するネットワークを定義する

Page 37: 「機械学習とは?」から始める Deep learning実践入門

LSTMを Chainerをつかって実装する(6 )

class RNN(Chain): def __init__(self): super(RNN, self).__init__( embed=L.EmbedID(1000, 100), # word embedding mid=L.LSTM(100, 50), # the first LSTM layer out=L.Linear(50, 1000), # the feed-forward output layer )

def reset_state(self): self.mid.reset_state() def __call__(self, cur_word): # Given the current word ID, predict the next word. x = self.embed(cur_word) h = self.mid(x) y = self.out(h) return y

rnn = RNN()model = L.Classifier(rnn)optimizer = optimizers.SGD()optimizer.setup(model)

上記で設定したモデルをSGD というアルゴリズムを使って最適化する

Page 38: 「機械学習とは?」から始める Deep learning実践入門

jupyter notebookをセットアップしよう!

Page 39: 「機械学習とは?」から始める Deep learning実践入門

jupyter notebook• jupyter notebook• ノートブックと呼ばれる形式で作成したプログラムを実行し、実行結果を

記録しながら、データの分析作業を進めるためのツール• Chainer• jupyter notebook をセットアップしよう!• https://github.com/hidetomasuoka/chainer-handson

Page 40: 「機械学習とは?」から始める Deep learning実践入門

chainerで線画自動着色してみよう!

Page 41: 「機械学習とは?」から始める Deep learning実践入門

PaintChainer• 線画着色 web サービス PaintsChainer を公開してみた• http://qiita.com/taizan/items/7119e16064cc11500f32

•初心者が chainer で線画着色してみた。わりとできた。• http://qiita.com/taizan/items/cf77fd37ec3a0bef5d9d

© 2017 Retrieva, Inc. 41

Page 42: 「機械学習とは?」から始める Deep learning実践入門

Paint Chainerの作成の過程(近くでみてて)1. Chainer で色を塗らせたいという強い欲望(問題設定)2. いいアルゴリズムがないか調べる(アルゴリズムの選定)3. カラー画像と線画データを作成して、教師データを作成する

(教師データの作成)4. うまくいくか試してみる(試行錯誤)5. うまくいったので、サービス化

© 2017 Retrieva, Inc. 42

Page 43: 「機械学習とは?」から始める Deep learning実践入門

画像提供

• https://whomor.com/

• 成果をつぶやくのは OK ですが、作成者の佐藤弘康様(株式会社フーモア所属)の名前をつけてくださ!

© 2017 Retrieva, Inc. 43

Page 44: 「機械学習とは?」から始める Deep learning実践入門

Dockerを使用して線画アプリを実行する

• 出典 :https://docs.com/asashiho/4719/web-docker

© 2017 Retrieva, Inc. 44

Page 45: 「機械学習とは?」から始める Deep learning実践入門

Dockerfileをみてみる

© 2017 Retrieva, Inc. 45

Page 46: 「機械学習とは?」から始める Deep learning実践入門

Dockerファイル• https://github.com/liamjones/PaintsChainer-Docker/

blob/master/Dockerfile

© 2017 Retrieva, Inc. 46

Page 47: 「機械学習とは?」から始める Deep learning実践入門

すいません!!!• Windows の方は、 Docker が使えないため、今回ローカルで

設定することができません。。。。。。。• https://github.com/pfnet/PaintsChainer/wiki/Installation-Guide

© 2017 Retrieva, Inc. 47

Page 48: 「機械学習とは?」から始める Deep learning実践入門