CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6...

1

Transcript of CNTKdeepdive - eventmarketing.blob.core.windows.net · cntkでの分散学習–1/6...

CNTK deep dive- DeepLearning関連PJの進め方から本番展開まで

AI07

Agenda

Profile

岩崎 喬一(Kyoichi Iwasaki)

Today’s data

データサイエンティスト、やっぱり要る?

データサイエンティストのスキルセット

ビジネス力

データエンジ

ニアリング力

データサイエ

ンス力

Ref. データサイエンティスト協会:http://www.datascientist.or.jp/news/2014/pdf/1210.pdf

課題背景を理解→ビジネス課題を整理解決

データサイエンスを意味ある形に使えるようにし、実装、運用

情報処理、人工知能、統計学などの知恵を理解し、適用

データ分析プロジェクトの進め方

ビジネス

要件定義

データ収

集・確認

データ分

析評価

展開

ビジネス力

データエンジ

ニアリング力

データサイエ

ンス力

機械学習と深層学習

深層学習?

深層学習による主な画像解析(as of May2018)

深層学習による主な画像解析

画像分類

物体検知

セグメンテーション

What?

What? Where?

What? Where? Shape?

What are specified? Algorithms

CNN

Fast(er)

R-CNN

Mask

R-CNN

MSでの実装

Custom Vision, CNTK

Custom Vision, CNTK

..(In near future?)複雑

単純

深層学習による主な画像解析(as of May2018)

2015

• Fast R-CNN

2015-16

• Faster R-CNN

2015-16

• YOLO

2015-16

• SSD

2017

• Mask R-CNN

物体検知 セグメンテーション

深層学習の「学習」?

深層学習(機械学習の観点から)

CNTKとは?

CNTKとは?

▪ GPU / マルチGPU(1-bit SGD)

https://www.microsoft.com/en-us/cognitive-toolkit/

CNTKの実行速度

https://arxiv.org/pdf/1608.07249.pdf

DL F/W FCN-S AlexNet ResNet-50 LSTM-64

CNTK 0.017 0.031 0.168 0.017

Caffe 0.017 0.027 0.254 --

TensorFlow 0.020 0.317 0.227 0.065

Torch 0.016 0.043 0.144 0.324

小さいほど高速

Codes in CNTK

https://github.com/Microsoft/CNTK

CNTKで2値分類をやってみる

赤 青

CNTKで2値分類をやってみる

パラメータw、b

w、b

年齢

腫瘍

bias

z1

z2

疾患あり

疾患なし

𝑤11

𝑤21

𝑤12

𝑤22

𝑏1

𝑏2

CNTKの処理フロー

入力・出力変数の定義

モデル評価

入力・出力変数の定義

ネットワークの定義

損失関数、最適化方法の定義

モデル学習

モデル評価

CNTKの処理フロー – 1/5

入力・出力変数の定義

import cntk as C

## 入力変数(年齢, 腫瘍の大きさ)の2種類ありinput_dim = 2

## 分類数(疾患の有無なので2値)num_output_classes = 2

## 入力変数feature = C.input_variable(input_dim, np.float32)

## 出力変数label = C.input_variable(num_output_classes, np.float32)

CNTKの処理フロー – 2/5

ネットワークの定義

def linear_layer(input_var, output_dim):input_dim = input_var.shape[0]## Define weight Wweight_param = C.parameter(shape=(input_dim,

output_dim))## Define bias bbias_param = C.parameter(shape=(output_dim))

## Wx + b. Pay attention to the order of variables!!return bias_param + C.times(input_var, weight_param)

z = linear_layer(input, num_outputs)

CNTKの処理フロー – 3/5

損失関数、最適化方法の定義

## 損失関数loss = C.cross_entropy_with_softmax(z, label)## 分類エラー("分類として"当たっているか否か)eval_error = C.classification_error(z, label)

## 最適化learner = C.sgd(z.parameters, lr_schedule)trainer = C.Trainer(z, (loss, eval_error), [learner])

CNTKの処理フロー – 4/5

モデル学習

for i in range(0, num_minibatches_to_train): ## Extract training datafeatures, labels =

generate_random_data_sample(minibatch_size, input_dim, num_output_classes)

## Traintrainer.train_minibatch({feature : features, label :

labels})

CNTKの処理フロー – 5/5

モデル評価

out = C.softmax(z)result = out.eval({feature : features})

Demo: CNTK basic process

Tips :: Jupyter Notebookの起動

> activate py35(py35) > jupyter notebook

https://notebooks.azure.com/

Demo :: training - evaluate

https://youtu.be.com/70FMOdVUNPI

Tips 混同行列(Confusion Matrix)

疾患[実際] 非疾患[実際]

疾患[予測] 14 0

非疾患[予測] 2 9

非疾患と予測(緑線の下)実際は疾患 (緑線の下の赤2つ)▶モデルの見逃し

物体検知からの分散学習

物体検知って?(recap)

深層学習による主な画像解析

画像分類

物体検知

セグメンテーション

What?

What? Where?

What? Where? Shape?

What are specified? Algorithms

CNN

Fast(er)

R-CNN

Mask

R-CNN

MSでの実装

Custom Vision, CNTK

Custom Vision, CNTK

..(In near future?)複雑

単純

VoTT

https://github.com/Microsoft/VoTT

静止画 動画

物体検知における“座標”

xmin xmax

ymin

ymax

x., y.ともに、左上の●から計った両端点●

Quick demo on VoTT(静止画)

Quick demo for VoTT

https://youtu.be/j7OjxFY2Go8

Quick demo on VoTT(動画)

https://youtu.be/RCuGLRtggrI

Quick demo for VoTT

Karugamo detection!

Movie inferred with Faster R-CNN

https://youtu.be/ziuEXyJ9SNs

CNTKでの分散学習 – 1/6

深層学習での分散学習とは?→主に学習時間短縮のためにマルチGPUを利用すること

分散学習実行準備マルチGPU搭載 マルチホスト

1bit-SGD

CNTKでの分散学習 – 2/6

入力・出力変数の定義

ネットワークの定義

損失関数、最適化方法の定義

モデル学習

モデル評価

CNTKでの分散学習 – 3/6

from cntk import distributed...

learner = cntk.learner.momentum_sgd(...) # create local learner

distributed_after = epoch_size # number of samples to warm start with

distributed_learner = distributed.data_parallel_distributed_learner(learner = learner,num_quantization_bits = 32, # non-quantized gradient accumulationdistributed_after = 0) # no warm start

損失関数の定義

CNTKでの分散学習 – 4/6

minibatch_source = MinibatchSource(...) ...trainer = Trainer(z, ce, pe, distributed_learner)...session = training_session(trainer=trainer, mb_source=minibatch_source, ...)session.train()...distributed.Communicator.finalize() # must be called to finalize MPI in case of successful distributed training

最適化方法の定義

https://docs.microsoft.com/en-us/cognitive-toolkit/multiple-gpus-and-machines#2-configuring-parallel-training-in-cntk-in-python

CNTKでの分散学習 – 5/6

# GPUを2つ利用し、学習用スクリプトがtraining.py> mpiexec –n 2 python training.py

分散学習の実行方法

CNTKでの分散学習 – 6/6

import cntk

## CPU利用時cntk.device.try_set_default_device(cntk.device.cpu())

## GPU利用時cntk.device.try_set_default_device(cntk.device.gpu())

CPU/GPU利用設定

Some preparation for Deep Learning!

CNTKから2つのGPUが見えている

GPU利用可能か確認

https://github.com/kyoro1/decode2018/blob/master/2.%20distributed%20learning%2

0with%20Faster%20R-CNN.ipynb

Faster R-CNN with single GPU

モデルパラメータ数は5700万超!

Single GPU vs Multi GPU

2つのGPU利用

Single GPU vs Multi GPU

GPU 学習時間 精度(mAP)

1 GPU (NC6) 7分22秒 0.9479

2 GPU (NC12) 3分43秒 0.9479

本番稼働に向けて

Confusion Matrix for karugamo

karugamoが写っているのに、モデルは推定できなかった▶モデルの見逃し

あり[実際] なし[実際]

あり[予測] XX XX

なし[予測] XX XX

Confusion Matrix for karugamo

あり[実際] なし[実際]

あり[予測] XX XX

なし[予測] XX XX

karugamoでないものに、karugamoと推定▶モデルの過検知?

Original movie vs inferred movie

https://youtu.be/SYTw5OLBnzc

データサイエンス活用推進体制(案)

【実際に手を動かして

データ分析をする人材】

【事業活動に結びつけるための

戦略づくり・設計を行う人材】

【分析結果を活用し、ビジネス企

画や改善を活かす人材】

ビジネス力

データエンジ

ニアリング力

データサイエ

ンス力

http://www.kantei.go.jp/jp/singi/keizaisaisei/miraitoshikaigi/jinzaiikusei_dai3/siryou4.pdf

#AI02

本番展開あるある (技術寄り編)

本番展開あるある (システム運用編)

Key takeaway

• 機械学習 ほぼ同等

本来の意味

ビジネスサイドとの協業

• どんなKPI

Key takeaway

平易にスクリプトが書け scrap & build

• 出来ること 出来ないこと

たち

Appendix

Referencehttps://github.com/Microsoft/CNTK

https://docs.microsoft.com/en-us/cognitive-toolkit/setup-cntk-on-your-machine

https://github.com/Microsoft/VoTT

https://github.com/onnx/onnx

https://www.edx.org/course/deep-learning-explained

https://www.edx.org/course/computer-vision-and-image-analysis

Referencehttps://github.com/kyoro1/decode2018

https://youtu.be/s5W4c9q_SAw

https://youtu.be/ziuEXyJ9SNs

https://youtu.be/SYTw5OLBnzc

https://youtu.be.com/70FMOdVUNPI

https://youtu.be/j7OjxFY2Go8

https://youtu.be/RCuGLRtggrI

© 2018 Microsoft Corporation. All rights reserved.

本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。