Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
1 de 71

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

6

Compartir

Descargar para leer sin conexión

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

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

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

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

Libros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo

Audiolibros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo

[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』各コーナーカウンタにて ご説明させていただきます。是非、お立ち寄りください。

×