Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

6,553 views

Published on

本講演では、まず深層学習フレームワーク Chainer の特長およびその基本的な使い方を解説します。次に Azure を含む Microsoft のプラットフォーム上等の様々な環境で Chainer を動かす方法、またそれによって広がる応用と、今後の展望について述べます。

受講対象: Deep Learning の基礎を理解し、最新状況を理解したい方。あるいは既に Chainer をご利用の方は是非ご参加ください。

製品/テクノロジ: AI (人工知能)/Deep Learning (深層学習)/Machine Learning (機械学習)

齋藤 俊太
株式会社Preferred Networks
リサーチャー

Published in: Technology
  • Be the first to comment

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

  1. 1. 齋藤 俊太 経歴: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”
  2. 2. Founded : March. 2014 Office : Tokyo, San Mateo Employees : ~80(8割以上が研究者又はエンジニア) Investors : FANUC, Toyota, NTT
  3. 3. AutomotiveHumanoid Robot Consumer Industrial Cloud Device Photo Game Text Speech Infrastructure Factory Robot Automotive Healthcare Smart City Industry4.0 Industrial IoT
  4. 4. 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
  5. 5. 目的関数を設計 • 何を学習させる のか、を考える • ロス関数などの 形で定義する 勾配の計算 • ネットワークの パラメータにつ いての目的関数 の勾配を求める 最適化 • 計算した勾配を 用いてネット ワークのパラ メータを最適化 問題に合わせて 自分で設計
  6. 6. x y _ ** 2 2 * _ _ * _ _ + _ z _ + _
  7. 7. 計算グラフの定義と、 定義に従って計算を実 際に行うコードが別に 存在 静的 実際に計算を行うコー ド自体が計算グラフの 定義として扱われる 動的
  8. 8. by  Define-and-Run(静的グラフ) まず計算グラフを構築し、構築した計算グラフにデータを流すという、2ステッ プから成る(Caffe, theano, TensorFlowなど)  Define-by-Run(動的グラフ) 通常の行列演算をする感覚で順伝播処理をすると同時に、逆伝播用の計算グラ フが構築される(Chainer, DyNet, PyTorchなど)
  9. 9. # 構築 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
  10. 10. Convolutional Networkを書く方法1 import chainer import chainer.links as L import 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対応コードへ変更したため発表 時の資料とは若干異なります
  11. 11. Convolutional Networkを書く方法2 class 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対応コードへ変更したため発表 時の資料とは若干異なります
  12. 12. モデルの学習 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=-1 trainer = training.Trainer(updater, stop_trigger=(100, 'epoch')) trainer.run() https://github.com/pfnet/chainer/tree/master/examples
  13. 13. 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
  14. 14. CPU CuPy NVIDIA GPU CUDA cuDNN BLAS NumPy Chainer MKL-DNN Intel Xeon/Xeon Phi MKL
  15. 15. Intel Chainer Chainer with NumPy (MKL-Build) Alexnet Forward 429.16 ms 5041.91 ms Alexnet Backward 841.73 ms 5569.49 ms Alexnet Total 1270.89 ms 10611.40 ms およそ8.35倍の高速化!
  16. 16. https://github.com/intel/chainer
  17. 17. CUDA for Python
  18. 18. ChainerにおけるGPU計算を全て担当するライブラリが独立 NumPy互換APIで低コストにCPUコードをGPUへ移行 特異値分解などの線形代数アルゴリズムをGPU実行 KMeans, Gaussian Mixture ModelなどのExampleの充実 https://github.com/cupy/cupy
  19. 19. Chainer on Multi Nodes
  20. 20. Chainerの使いやすさはそのままに,複数GPU,複数ノード環境で高速 に学習することができる(現在はデータパラレルのみに対応) GPU GPU InfiniBand GPU GPU InfiniBand
  21. 21. ノード内通信(NVIDIA NCCLライブラリ)と ノード間通信(CDUA-aware MPI)を活用し全体を最適化 InfiniBand MPI ChainerMN pyMPI NCCL NVIDIA GPU ノード内 ノード間 CuPy
  22. 22. 使用するGPU数に対してほぼ線形な速度向上
  23. 23. 既存のコードを多少書き換えるだけで利用できる(!) optimizer = chainer.optimizers.MomentumSGD() optimizer = chainermn.DistributedOptimizer( chainer.optimizers.MomentumSGD())
  24. 24. • 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
  25. 25. Chainer + Reinforcement Learning
  26. 26. エージェントが環境とのインタラクションを通じて報酬を最大 化する行動を学習する
  27. 27. • 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.
  28. 28. https://github.com/pfnet/chainerrl/blob/master/examples/quickstart/quickstart.ipynb
  29. 29. Chainer + Computer Vision
  30. 30. 新しい/自前 のモデルを既 存手法と比較 したい https://github.com/pfnet/chainercv Datasets Pascal VOC, Caltech- UCSD Birds-200- 2011, Stanford Online Products, CamVid, etc. Models Faster R-CNN, SSD, SegNet (will add more models!) 新しい(自前 の)データセッ トで既存モデル を学習させたい
  31. 31. https://github.com/pfnet/chainercv
  32. 32. https://github.com/pfnet/chainercv
  33. 33. https://github.com/pfnet/chainercv
  34. 34.  世界コンピュータ将棋選手権に出場、2位  Ponanza(世界コンピュータ将棋選手権2連覇(2015, 2016))ベース  Ponanzaが探索を行う指し手のオーダリングにDeep Learningを応用し た技術を使用し、対Ponanzaで8割以上の勝率 Team PFN Issei Yamamoto Akira Shimoyama Team Ponanza
  35. 35.  線画の自動着色を行うWeb サービス  線画とその着色済み画像の ペアを大量に用意  線画+ヒントを入力にして、 着色後画像を出力する畳み 込みネットワークを訓練  ただそれだけでは塗りにバ リエーションが出ない…  Adversarial lossを加えるこ とでより自然で多様な塗り を実現 https://paintschainer.preferred.tech
  36. 36. 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
  37. 37. https://github.com/pfnet/chainer
  38. 38. クラウドコンピューティング エッジヘビーコンピューティング クラウドコンピューティングから、新しいコンピューティングへ
  39. 39. https://github.com/pfnet/chainer
  40. 40. セッションアンケートにご協力ください  専用アプリからご回答いただけます。 decode 2017  スケジュールビルダーで受講セッションを 登録後、アンケート画面からご回答ください。  アンケートの回答時間はたったの 15 秒です!
  41. 41. Ask the Speaker のご案内 本セッションの詳細は『Ask the Speaker Room』各コーナーカウンタにて ご説明させていただきます。是非、お立ち寄りください。

×