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

Post on 12-Apr-2017

188 Views

Category:

Data & Analytics

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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

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

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

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

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

• community イベントのリード

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

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

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

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

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

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

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

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

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

7

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

学習データ

分類モデル

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

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…

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

機械学習

文書

画像 センサー

行動履歴

様々な様式の生データ

特徴抽出

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

9

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

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

機械学習アルゴリズム

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

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

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

機械学習アルゴリズム

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

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

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

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

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

12

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

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

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

音声認識の分野では

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

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

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

動画 画像 +自然言語

音声 + 動画カテゴリ分類

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

表現学習 音声認識

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

( 活性予測 )

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

Deep Learningの導入

x1

xN

・・・・・・

h1

hH

・・・・

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

kM

k1

yM

y1

ForwardBackward

・・ ・・

入力層 隠れ層 出力層文書

画像

センサー

チューリップ

異常確率 50%

カテゴリ:政治

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

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

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

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

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

Forward

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

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

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

Backward

x1

xN

・・・・・・

h1

hH

・・・・

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

kM

k1

yM

y1

ForwardBackward

・・ ・・

入力層 隠れ層 出力層文書

画像

センサー

チューリップ

異常確率 50%

カテゴリ:政治

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

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

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

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

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

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

とる (Average Pooling) のが一般的

畳み込み層プーリング層

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

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

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

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

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

ディープラーニングの応用例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

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

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

入力 生成結果

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

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

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

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)

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

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

順伝播逆伝播

ニューラルネット変数 層

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

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

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

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

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コードで記述可能

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

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

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

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

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

f g

x f g

計算グラフ構築

データフィード

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

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

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

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

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

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

x yf

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

zg

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

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

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など

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)

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層)

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 出力層

各層に値をセットする

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)

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

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 というアルゴリズムを使って最適化する

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

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

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

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

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

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

© 2017 Retrieva, Inc. 41

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

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

© 2017 Retrieva, Inc. 42

画像提供

• https://whomor.com/

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

© 2017 Retrieva, Inc. 43

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

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

© 2017 Retrieva, Inc. 44

Dockerfileをみてみる

© 2017 Retrieva, Inc. 45

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

blob/master/Dockerfile

© 2017 Retrieva, Inc. 46

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

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

© 2017 Retrieva, Inc. 47

top related