[ai08] 深層学習フレームワーク chainer × microsoft で広がる応用

71

Upload: decode-2017

Post on 21-Jan-2018

2.963 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 2: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 3: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

齋藤俊太

経歴:Keio Univ. (Bachelor, Master, D進)→UC Berkeley (Visiting Student Researcher)→Keio Univ. (Ph. D. in Engineering 取得)→Facebook, Inc. (Contractor)→Preferred Networks, Inc. (Researcher)

専門:Computer Vision仕事:Chainerの開発、CV系応用研究

Researcher at Preferred Networks, Inc.

博論:“Semantic Segmentation for Aerial Imagery with Convolutional Neural Network”

Page 4: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Founded : March. 2014Office : Tokyo, San Mateo Employees : ~80(8割以上が研究者又はエンジニア)Investors : FANUC, Toyota, NTT

Page 5: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

AutomotiveHumanoid Robot

Consumer Industrial

Cloud

Device

PhotoGameText

Speech

Infrastructure

FactoryRobot

Automotive

Healthcare

Smart City

Industry4.0

Industrial IoT

Page 6: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 7: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 8: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Powerful

☑ CUDA

☑ cuDNN

☑ NCCL

Flexible

☑ Convolutional Network

☑ Recurrent Network

☑ Many Other Components

☑ Various Optimizers

Intuitive

☑ Define-by-Run

☑ High debuggability

CUDAを用いたGPU計算のサポート

cuDNNによる高速な学習/推論

NCCLを用いた高速なマルチGPU学習をサポート

N次元の入力に対応したConvolution, Deconvolution, Pooling, BN, 等

LSTM, Bi-directional LSTM, GRU, Bi-directional GRU, 等のRNNコンポーネント

ニューラルネットワークで使われる多くのレイヤ定義、各種ロス関数

SGD, MomentumSGD, AdaGrad, RMSProp, Adam, 等の最適化手法が選択可能

複雑なネットワークの記述が容易

Pythonライブラリであるためエラー箇所の特定が容易:デバッグしやすい

様々なNNの学習で共通する部分を抽象化、一連の学習フローを簡易に記述可☑ Simple APIs

Page 9: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 10: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 11: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

目的関数を設計

• 何を学習させるのか、を考える

• ロス関数などの形で定義する

勾配の計算

• ネットワークのパラメータについての目的関数の勾配を求める

最適化

• 計算した勾配を用いてネットワークのパラメータを最適化

問題に合わせて自分で設計

Page 12: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

x

y

_ ** 2

2 * _ _ * _ _ + _ z

_ + _

Page 13: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 14: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 15: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

計算グラフの定義と、定義に従って計算を実際に行うコードが別に存在

静的実際に計算を行うコード自体が計算グラフの定義として扱われる

動的

Page 16: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

by

Define-and-Run(静的グラフ)まず計算グラフを構築し、構築した計算グラフにデータを流すという、2ステップから成る(Caffe, theano, TensorFlowなど)

Define-by-Run(動的グラフ)通常の行列演算をする感覚で順伝播処理をすると同時に、逆伝播用の計算グラフが構築される(Chainer, DyNet, PyTorchなど)

Page 17: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

# 構築x = Variable(‘x’)y = Variable(‘y’)z = x + 2 * y

# 評価for xi, yi in data:eval(z, (xi, yi))

# 構築と評価が同時for xi, yi in data:x = Variable(xi)y = Variable(yi)z = x + 2 * y

データを見ながら違う処理をしてもよい

Define-and-Run Define-by-Run

Page 18: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Convolutional Networkを書く方法1import chainerimport chainer.links as Limport chainer.functions as F

class LeNet5(chainer.Chain):def __init__(self): super(LeNet5, self).__init__()with self.init_scope():

self.conv1 = L.Convolution2D(1, 6, 5, 1)self.conv2 = L.Convolution2D(6, 16, 5, 1)self.conv3 = L.Convolution2D(16, 120, 4, 1)self.fc4 = L.Linear(None, 84)self.fc5 = L.Linear(84, 10)

S

※V2対応コードへ変更したため発表時の資料とは若干異なります

Page 19: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Convolutional Networkを書く方法2class LeNet5(chainer.Chain):def __init__(self):super(LeNet5, self).__init__()net = [('conv1', L.Convolution2D(1, 6, 5, 1))]net += [('_sigm1', F.Sigmoid())]net += [('_mpool1', F.MaxPooling2D(2, 2))]net += [('conv2', L.Convolution2D(6, 16, 5, 1))]net += [('_sigm2', F.Sigmoid())]net += [('_mpool2', F.MaxPooling2D(2, 2))]net += [('conv3', L.Convolution2D(16, 120, 4, 1))]net += [('_sigm3', F.Sigmoid())]net += [('_mpool3', F.MaxPooling2D(2, 2))]net += [('fc4', L.Linear(None, 84))]net += [('_sigm4', F.Sigmoid())]net += [('fc5', L.Linear(84, 10))]net += [('_sigm5', F.Sigmoid())]for name, layer in net:

if not name.startswith('_'):with self.init_scope():setattr(self, name, layer)

self.forward = net

def __call__(self, x):for n, f in self.forward:if not n.startswith('_'):

x = getattr(self, n)(x)else:x = f(x)

return x

※V2対応コードへ変更したため発表時の資料とは若干異なります

Page 20: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

モデルの学習model = LeNet5()model = L.Classifier(model)

# データセットはリスト([]でアクセスでき、__len__を持てば良い)dataset = [(x1, t1), (x2, t2), ...]

# データセットから batchsize 個のデータを束ねて返してくれるイテレータit = iterators.SerialIterator(dataset, batchsize=32)

# 最適化手法 (SGDをMomentumSGD, Adam, RMSplop, AdaGradなどに変えれば、容易に色々な# 最適化手法を試すことが可opt = optimizers.SGD(lr=0.01)opt.setup(model)

updater = training.StandardUpdater(it, opt, device=0) # CPUで計算する場合はdevice=-1trainer = training.Trainer(updater, stop_trigger=(100, 'epoch'))trainer.run()

https://github.com/pfnet/chainer/tree/master/examples

Page 21: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 22: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 23: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

CuPy: ChainerのGPUバックエンド(NumPy互換GPU Arrayライブラリ)NumPyを使って書かれたコードをGPUで実行

ChainerMN: 分散深層学習用追加パッケージ高いスケーラビリティ(128GPUで100倍の高速化)

ChainerRL: 深層強化学習ライブラリDQN, DDPG, A3C, ACER, NSQ, PCL, etc. OpenAI Gym サポート

ChainerCV: 画像認識アルゴリズム・データセットラッパーパッケージFaster R-CNN, Single Shot Multibox Detector (SSD), SegNet, etc.

【バックエンド/追加パッケージ】

MN

RL

CV

https://github.com/intel/chainer

Page 24: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 25: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

CPU

CuPy

NVIDIA GPU

CUDA

cuDNN

BLAS

NumPy

Chainer

MKL-DNN

Intel Xeon/Xeon Phi

MKL

Page 26: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 27: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Intel Chainer Chainer with NumPy (MKL-Build)

Alexnet Forward 429.16 ms 5041.91 msAlexnet Backward 841.73 ms 5569.49 msAlexnet Total 1270.89 ms 10611.40 ms

およそ8.35倍の高速化!

Page 28: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/intel/chainer

Page 29: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

CUDA for Python

Page 30: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

ChainerにおけるGPU計算を全て担当するライブラリが独立

NumPy互換APIで低コストにCPUコードをGPUへ移行

特異値分解などの線形代数アルゴリズムをGPU実行

KMeans, Gaussian Mixture ModelなどのExampleの充実https://github.com/cupy/cupy

Page 31: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Chainer on Multi Nodes

Page 32: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Chainerの使いやすさはそのままに,複数GPU,複数ノード環境で高速に学習することができる(現在はデータパラレルのみに対応)

GPU

GPU

InfiniBand

GPU

GPU

InfiniBand

Page 33: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

ノード内通信(NVIDIA NCCLライブラリ)とノード間通信(CDUA-aware MPI)を活用し全体を最適化

InfiniBand

MPI

ChainerMN

pyMPI

NCCL

NVIDIA GPU

ノード内 ノード間

CuPy

Page 34: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

使用するGPU数に対してほぼ線形な速度向上

Page 35: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 36: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 37: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 38: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 39: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 40: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

既存のコードを多少書き換えるだけで利用できる(!)

optimizer = chainer.optimizers.MomentumSGD()

optimizer = chainermn.DistributedOptimizer(chainer.optimizers.MomentumSGD())

Page 41: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

• GPUサーバクラスタを用意• 可能ならInfiniBandで接続されたクラスタがベター(その場合ドライバのインストールなどInfiniBandのセットアップを行う)

• 公式ドキュメントhttps://chainermn.readthedocs.io/en/latest/installation/guide.htmlにしたがって、必要ライブラリを全ノードにインストール⁃ CUDA-aware MPI (OpenMPI or MVAPICH)⁃ NVIDIA NCCL⁃ MPI4py

https://github.com/pfnet/chainermn

Page 42: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 43: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Chainer + Reinforcement Learning

Page 44: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

エージェントが環境とのインタラクションを通じて報酬を最大化する行動を学習する

Page 45: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 46: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 47: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 48: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 49: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 50: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

• Deep Q-Network (Mnih et al., 2015)• Double DQN (Hasselt et al., 2016)• Normalized Advantage Function (Gu et al., 2016)• (Persistent) Advantage Learning (Bellemare et al., 2016)• Deep Deterministic Policy Gradient (Lillicrap et al., 2016)• SVG(0) (Heese et al., 2015)• Asynchronous Advantage Actor-Critic (Mnih et al., 2016)• Asynchronous N-step Q-learning (Mnih et al., 2016)• Actor-Critic with Experience Replay (Wang et al., 2017) <- NEW!• Path Consistency Learning (Nachum et al., 2017) <- NEW!• etc.

Page 51: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/pfnet/chainerrl/blob/master/examples/quickstart/quickstart.ipynb

Page 52: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Chainer + Computer Vision

Page 53: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

新しい/自前のモデルを既存手法と比較したい

https://github.com/pfnet/chainercv

DatasetsPascal VOC, Caltech-

UCSD Birds-200-2011, Stanford

Online Products, CamVid, etc.

Models

Faster R-CNN, SSD, SegNet (will add more models!)

新しい(自前の)データセットで既存モデルを学習させたい

Page 54: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/pfnet/chainercv

Page 55: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/pfnet/chainercv

Page 56: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/pfnet/chainercv

Page 57: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 58: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 59: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

世界コンピュータ将棋選手権に出場、2位 Ponanza(世界コンピュータ将棋選手権2連覇(2015, 2016))ベース Ponanzaが探索を行う指し手のオーダリングにDeep Learningを応用した技術を使用し、対Ponanzaで8割以上の勝率

Team PFN

Issei Yamamoto Akira Shimoyama

Team Ponanza

Page 60: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

線画の自動着色を行うWebサービス

線画とその着色済み画像のペアを大量に用意

線画+ヒントを入力にして、着色後画像を出力する畳み込みネットワークを訓練

ただそれだけでは塗りにバリエーションが出ない…

Adversarial lossを加えることでより自然で多様な塗りを実現

https://paintschainer.preferred.tech

Page 61: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 62: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

http://landinghub.visualstudio.com/visual-cpp-build-tools

https://developer.nvidia.com/cuda-downloads

https://developer.nvidia.com/rdp/cudnn-download

https://www.continuum.io/downloads

Page 63: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 64: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/pfnet/chainer

Page 65: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

クラウドコンピューティング エッジヘビーコンピューティング

クラウドコンピューティングから、新しいコンピューティングへ

Page 66: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 67: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 68: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
Page 69: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

https://github.com/pfnet/chainer

Page 70: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

セッションアンケートにご協力ください

専用アプリからご回答いただけます。

decode 2017

スケジュールビルダーで受講セッションを登録後、アンケート画面からご回答ください。

アンケートの回答時間はたったの 15 秒です!

Page 71: [AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用

Ask the Speaker のご案内本セッションの詳細は『Ask the Speaker Room』各コーナーカウンタにてご説明させていただきます。是非、お立ち寄りください。