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.
Introduction to Chainer
株式会社Preferred Networks
⼤大野健太 oono@preferred.jp
2015/9/5 LL Ring Recursive
@新⽊木場 1stRing
⾃自⼰己紹介
• ⼤大野健太(@delta2323_)
• 経歴:数理理科学研究科・修⼠士課程(共形幾何)
• → 2012.3 PFI → 2014.10 PFN
• 所属:研究班(理理論論解析・ライフサイエンス・Chainer開発メンバー)...
今⽇日⼀一番⾔言いたいこと
git clone https://github.com/pfnet/chainer.git
Chainer概要
http://chainer.org
• 製作者:得居誠也、開発:PFN、PFI
• 公開:2015年年6⽉月9⽇日
• 隔週⽔水曜⽇日リリース
• 最新バージョン:1.3.0(2015年年9⽉月2⽇日)
• 予定:1.3....
x1
xN
・・・・・・
h1
hH
・・・・
ニューラルネットワーク(多層パーセプトロン)
k
M
k1
y
M
y1
Forward
Backward
・・
・・
5
⼊入⼒力力層 隠れ層 出⼒力力層
⽂文書
画像
センサー
チューリップ
...
ニューラルネットワークが利利⽤用されたタスク
データ 画像
タスク カテゴリ
分類
顔検出 ⽣生成 ゲームAI シーン認識識
動画 画像+
⾃自然⾔言語
⾳音声+動画
カテゴリ
分類
動作認識識 キャプ
ション⽣生成
表現学習 ⾳音声認識識
⾃...
ディープラーニングの応⽤用例例
Deep Q Network*(深層学習で強化学習)
* Mnih, Volodymyr, et al. "Human-level control through deep reinforcement learn...
ディープラーニングの応⽤用例例
画像⽣生成
• ⽂文字を”描く“ニューラルネット
⼊入⼒力力 ⽣生成結果
Kingma, Diederik P., et al. "Semi-supervised learning with deep
gener...
試⾏行行錯誤をする機械
9
https://research.preferred.jp/2015/06/distributed-deep-
reinforcement-learning/
http://rll.berkeley.edu/deep...
分散深層学習による候補化合物選定
10
PubChem
データベース
5万化合物
5バイオアッセイ
学習結果交換
(MPI通信)
学習結果交換
(MPI通信)
• 東京⼯工業⼤大学TSUBAMEを利利⽤用
• 8ノード・24GPU(K40)
•...
典型的なNeural Network(多層パーセプトロン)
x1
xN
・・・・・・
h1
hH
・・・・
k
M
k1
y
M
y1
f1
f2
f3
W2/b2
W1/b1
tM
t1
損失関数で評価
正解ラベル⼊入⼒力力
Forward
...
DeepLearningフレームワークの構成要素
Caffe Chainer
変数
(n次元配列列)
Blob Variable
層 Layer Function
計算グラフ Net (FunctionSet)
最適化
アルゴリズム
Solve...
順伝播(Forward Propagation)
• 計算グラフの先頭のユニット(緑)に値を与え、
順⽅方向に計算を進める
• Forward計算の過程で損失(Loss)とエラーを計
算する
• 通常エラーは計算グラフの最後のユニット
(紫)で...
連鎖律律(Chain Rule)
• Forward Propagationがy = f(x; θ)の場合を考える
• θ : Layerのパラメータ(例例:全結合層の重み)
• 損失をLとすると、連鎖律律より
• (エラー), (勾配)と書く...
逆伝播(Backward Propagation・誤差逆伝播)
• 計算グラフの末端のユニット(紫)にエラーを
与え、逆⽅方向に計算を進める
• Backwardの過程で各パラメータについてのエ
ラーを計算する
Backward
パラメータの更更新
• Backwardにより得られた各パラメータについ
ての勾配δθを⽤用いてパラメータθを更更新
• 最も単純なのは確率率率的勾配法
• (η : 学習率率率)
• 更更新式には様々なバリエーションがある
• 例例:学習率率...
環境構築
• OS:Linux(Ubuntu 14.04推奨)
• MacOS、Windowsで試している⽅方もいる
• ⾔言語:Python(Cpython)
• 2.7+/3.4+推奨
• 依存モジュール: Numpy1.9+、Six1.9...
フレームワークごとのGithub Starsの⽐比較(2015年年5⽉月)
紫下線はTheanoをベース
としたフレームワーク
PyLearn2
https://twitter.com/fchollet/status/63589
1305084...
フレームワークごとのGithub Starsの⽐比較(2015年年8⽉月)
https://twitter.com/fchollet/status/63589
1305084796929を元に作成
PyLearn2
紫下線はTheanoをベース...
技術スタック
• 2つのモジュールからなる
• Chainer:ディープラーニングフレームワーク
• 計算グラフ構築・最適化アルゴリズムを
Pythonプログラムとして記述
• CuPy:GPU版NumPy
• NumPyの配列列操作のサブセッ...
深層学習フレームワークの現状
アーキテクチャの複雑化
• 深層学習で扱われるアーキテクチャーの複雑化
• GoogLeNet, NTM, Recursive Net, LSTM …
• 既存フレームワークではネットワーク記述が困難
Chaine...
計算グラフ構築のパラダイム:Define-and-Run
• 計算グラフを構築した後に、データを計算グラフに順伝播する
• 計算グラフ構築⽅方法はフレームワークにより異異なる
• prototxt, yamlファイル, Luaスクリプト etc...
計算グラフ構築のパラダイム:Define-by-Run
• データの順伝播とそのデータに対する計算グラフの
構築を同時に⾏行行う
• ⻑⾧長所
• 順伝播を通常のプログラムで記述できる
• コントロールフロー(条件分岐、forループ)
を計算グ...
Forwardと同時に計算グラフを構築
x = chainer.Variable(np.array(1))
y = chainer.Variable(np.array(1))
z = x**2 + 2*x*y + y
z.backward()
...
Forwardと同時に計算グラフを構築
実際には Splitノードが⾃自動的に挿⼊入される
x
y
_ ** 2
2 * _ _ * _
_ + _ z
_ + _
x = chainer.Variable(np.array(1))
y = c...
MNISTによる多層パーセプトロンの訓練
# (1) Model definition
model = FunctionSet(
l1=F.Linear(784, 100),
l2=F.Linear(100, 100),
l3=F.Linear...
FunctionSetでモデル定義
# Model definition
model = FunctionSet(
l1=F.Linear(784, 100),
l2=F.Linear(100, 100),
l3=F.Linear(100, 1...
Optimizerのセットアップ
# Model definition
model = FunctionSet(
l1=F.Linear(784, 100),
l2=F.Linear(100, 100),
l3=F.Linear(100, 10...
順伝播を定義
# Model definition
model = FunctionSet(
l1=F.Linear(784, 100),
l2=F.Linear(100, 100),
l3=F.Linear(100, 10)).to_gpu(...
パラメータのアップデート
# Model definition
model = FunctionSet(
l1=F.Linear(784, 100),
l2=F.Linear(100, 100),
l3=F.Linear(100, 10)).t...
柔軟なグラフ操作:制御構⽂文を⽤用いた計算グラフ構築
• ネットワーク構築時に、通常の
Pythonの制御構⽂文を利利⽤用でき
る (if / for / while etc…)
• 応⽤用
• 訓練・テストで層を取り替
える
• For⽂文を...
柔軟なグラフ操作:グラフの切切り落落とし
• 変数yより前のグラフを切切り落落とす
• yより前にはエラーが伝搬しない
• truncated BPTTを実装するのに便便利利
x f y g z
y g z
y.unchain_backward...
Caffe Reference Modelサポート
• Caffe Model Zooで提供されている
BVLC Reference ModelをChainerの
functionとして利利⽤用可能
func =
CaffeFunction('...
CuPy:GPU版NumPy
• cupy.ndarray
• numpy.ndarray上の操作の
サブセットをサポート
• スライス・配列列作成・線形
代数 etc…
• Elementwiseカーネル、
Reduction カーネルを⽤用...
まとめ
• ChainerはDefine-by-Runのコンセプトに基づ
いたPythonベースのディープラーニングフ
レームワークです
• 動的な計算グラフ構築を⾏行行うことで、柔軟な計
算グラフ構築をPythonプログラムとして記述
可能で...
補⾜足資料料
Mocha:Juliaベースのディープラーニングフレームワーク
• 開発者:Chiyuan Zhang (MIT)
• 交換プログラムで京⼤大にも在籍していた
• バージョン:v0.0.9(2015年年7⽉月21⽇日)
• ライセンス:MIT ...
Introduction to Chainer (LL Ring Recursive)
Introduction to Chainer (LL Ring Recursive)
Upcoming SlideShare
Loading in …5
×

Introduction to Chainer (LL Ring Recursive)

7,926 views

Published on

Presentation at LL Ring Recursive (2015/9/5)

Published in: Technology
  • Be the first to comment

Introduction to Chainer (LL Ring Recursive)

  1. 1. Introduction to Chainer 株式会社Preferred Networks ⼤大野健太 oono@preferred.jp 2015/9/5 LL Ring Recursive @新⽊木場 1stRing
  2. 2. ⾃自⼰己紹介 • ⼤大野健太(@delta2323_) • 経歴:数理理科学研究科・修⼠士課程(共形幾何) • → 2012.3 PFI → 2014.10 PFN • 所属:研究班(理理論論解析・ライフサイエンス・Chainer開発メンバー) • ブログ:http://delta2323.github.io • 最近の活動 • NIPS2014勉強会・ICML2015勉強会主催 • ⽇日経ビッグデータ短期連載「ディープラーニングのビジネス活⽤用を探る」 • 「この1冊でまるごとわかる! ⼈人⼯工知能ビジネス」寄稿 2
  3. 3. 今⽇日⼀一番⾔言いたいこと git clone https://github.com/pfnet/chainer.git
  4. 4. Chainer概要 http://chainer.org • 製作者:得居誠也、開発:PFN、PFI • 公開:2015年年6⽉月9⽇日 • 隔週⽔水曜⽇日リリース • 最新バージョン:1.3.0(2015年年9⽉月2⽇日) • 予定:1.3.1 (9/16) → 1.4.0 (9/30) • ライセンス:MIT (Expat) リソース • 公式HP:http://chainer.org • レポジトリ: https://github.com/pfnet/chainer • Twitter:@ChainerOfficial • Google Group:Chainer Uesr Group • Contribution Guide: http://docs.chainer.org/en/stable/contribution. html特徴 • Powerful:CUDA・マルチGPU対応 • Flexible:様々なネットワークやデータごとに異異なるネットワークを構築可能 • Intuitive:ネットワーク構築は通常のPythonコードで記述可能
  5. 5. x1 xN ・・・・・・ h1 hH ・・・・ ニューラルネットワーク(多層パーセプトロン) k M k1 y M y1 Forward Backward ・・ ・・ 5 ⼊入⼒力力層 隠れ層 出⼒力力層 ⽂文書 画像 センサー チューリップ 異異常確率率率50% カテゴリ:政治
  6. 6. ニューラルネットワークが利利⽤用されたタスク データ 画像 タスク カテゴリ 分類 顔検出 ⽣生成 ゲームAI シーン認識識 動画 画像+ ⾃自然⾔言語 ⾳音声+動画 カテゴリ 分類 動作認識識 キャプ ション⽣生成 表現学習 ⾳音声認識識 ⾃自然⾔言語 ⾳音声 化合物 表現学習 翻訳 質問応答 会話検出 QSAR (活性予測) 応⽤用分野 ⾳音声検索索 画像キュレーション eコマース ⾃自動運転 ロボティックス 医療療画像 マーケティング
  7. 7. ディープラーニングの応⽤用例例 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 7
  8. 8. ディープラーニングの応⽤用例例 画像⽣生成 • ⽂文字を”描く“ニューラルネット ⼊入⼒力力 ⽣生成結果 Kingma, Diederik P., et al. "Semi-supervised learning with deep generative models." Advances in Neural Information Processing Systems. 2014. の実験を弊社で再現→ • 絵を”描く“ニューラルネット http://soumith.ch/eyescream/ Eye Scream Project ↓ http://soumith.ch/eyescream/ ←A Neural Algorithm of Artistic Style [Gatys+'15]
  9. 9. 試⾏行行錯誤をする機械 9 https://research.preferred.jp/2015/06/distributed-deep- reinforcement-learning/ http://rll.berkeley.edu/deeplearningrobotics/
  10. 10. 分散深層学習による候補化合物選定 10 PubChem データベース 5万化合物 5バイオアッセイ 学習結果交換 (MPI通信) 学習結果交換 (MPI通信) • 東京⼯工業⼤大学TSUBAMEを利利⽤用 • 8ノード・24GPU(K40) • ノード間通信はMPI
  11. 11. 典型的なNeural Network(多層パーセプトロン) x1 xN ・・・・・・ h1 hH ・・・・ k M k1 y M y1 f1 f2 f3 W2/b2 W1/b1 tM t1 損失関数で評価 正解ラベル⼊入⼒力力 Forward Backward 出⼒力力 ・・ ・・ ・・ 学習すべきパラメータ • W1:1層⽬目のパラメータ⾏行行列列 • b1:1層⽬目のバイアス項 • W2:2層⽬目のパラメータ⾏行行列列 • b2:2層⽬目のバイアス項 11 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)
  12. 12. DeepLearningフレームワークの構成要素 Caffe Chainer 変数 (n次元配列列) Blob Variable 層 Layer Function 計算グラフ Net (FunctionSet) 最適化 アルゴリズム Solver Optimizer 順伝播 逆伝播 ニューラルネット変数 層 12 正解データも⼊入⼒力力 の⼀一部とみなすと ⾒見見通しが良良い 途中で分岐して もよい (⼀一般にはDAG)
  13. 13. 順伝播(Forward Propagation) • 計算グラフの先頭のユニット(緑)に値を与え、 順⽅方向に計算を進める • Forward計算の過程で損失(Loss)とエラーを計 算する • 通常エラーは計算グラフの最後のユニット (紫)での値を指す • 計算グラフの途中の値をエラーに加えても 良良い • Lossは各ユニットの値や各レイヤーのパラメー タの関数になっている Forward
  14. 14. 連鎖律律(Chain Rule) • Forward Propagationがy = f(x; θ)の場合を考える • θ : Layerのパラメータ(例例:全結合層の重み) • 損失をLとすると、連鎖律律より • (エラー), (勾配)と書くと → エラーは活性と逆向きに伝播する x y 活性の 伝播⽅方向 エラーの 伝播⽅方向 θ
  15. 15. 逆伝播(Backward Propagation・誤差逆伝播) • 計算グラフの末端のユニット(紫)にエラーを 与え、逆⽅方向に計算を進める • Backwardの過程で各パラメータについてのエ ラーを計算する Backward
  16. 16. パラメータの更更新 • Backwardにより得られた各パラメータについ ての勾配δθを⽤用いてパラメータθを更更新 • 最も単純なのは確率率率的勾配法 • (η : 学習率率率) • 更更新式には様々なバリエーションがある • 例例:学習率率率が更更新ごとに変化する • 例例:過去の勾配も利利⽤用する • SGD / Momentum / AdaGrad / ADADELTA / RMSprop / Adam etc… http://imgur.com/a/Hqolp
  17. 17. 環境構築 • OS:Linux(Ubuntu 14.04推奨) • MacOS、Windowsで試している⽅方もいる • ⾔言語:Python(Cpython) • 2.7+/3.4+推奨 • 依存モジュール: Numpy1.9+、Six1.9+ • CUDA依存モジュール:CUDA6.5+ • インストール • pip install chainer
  18. 18. フレームワークごとのGithub Starsの⽐比較(2015年年5⽉月) 紫下線はTheanoをベース としたフレームワーク PyLearn2 https://twitter.com/fchollet/status/63589 1305084796929を元に作成
  19. 19. フレームワークごとのGithub Starsの⽐比較(2015年年8⽉月) https://twitter.com/fchollet/status/63589 1305084796929を元に作成 PyLearn2 紫下線はTheanoをベース としたフレームワーク
  20. 20. 技術スタック • 2つのモジュールからなる • Chainer:ディープラーニングフレームワーク • 計算グラフ構築・最適化アルゴリズムを Pythonプログラムとして記述 • CuPy:GPU版NumPy • NumPyの配列列操作のサブセットと互換 CPU GPU BLAS CUDA Toolkit cuDNN NumPy CuPy Chainer Python NumPy:Pythonの数値計算ライブラリ。多 次元配列列の操作や数学関数が充実しており、 多くのPythonデータ解析ツールがNumPyを ベースに制作されている
  21. 21. 深層学習フレームワークの現状 アーキテクチャの複雑化 • 深層学習で扱われるアーキテクチャーの複雑化 • GoogLeNet, NTM, Recursive Net, LSTM … • 既存フレームワークではネットワーク記述が困難 Chainer Caffe 167⾏行行 2058⾏行行 GoogleNetのアーキテクチャ定義の必要⾏行行数 (2012)AlexNet*, 7層 ↑ (2014) GoogLeNet**, 22層→ 22 * ImageNet Classification with Deep Convolutional Neural Networks http://www.image-net.org/challenges/LSVRC/2012/supervision.pdf ** Szegedy, Christian, et al. "Going deeper with convolutions." arXiv preprint arXiv:1409.4842 (2014). Chainerは、Define-by-Runのコンセプトに よりこれらの問題の解決を⽬目指す
  22. 22. 計算グラフ構築のパラダイム:Define-and-Run • 計算グラフを構築した後に、データを計算グラフに順伝播する • 計算グラフ構築⽅方法はフレームワークにより異異なる • prototxt, yamlファイル, Luaスクリプト etc. • 多くの深層学習フレームワークが採⽤用 • Caffe/Torch/Theanoベースのフレームワーク • ⻑⾧長所 • メモリ管理理の必要がほとんどない • 計算グラフの最適化を暗黙的に⾏行行える • 短所 • 1訓練ループの中では計算グラフを変更更できない f g x f g 計算グラフ構築 データフィード
  23. 23. 計算グラフ構築のパラダイム:Define-by-Run • データの順伝播とそのデータに対する計算グラフの 構築を同時に⾏行行う • ⻑⾧長所 • 順伝播を通常のプログラムで記述できる • コントロールフロー(条件分岐、forループ) を計算グラフ構築に利利⽤用可能 • 設定ファイル⽤用のミニ⾔言語を作る必要がない • 訓練データごとに異異なる計算グラフを変更更可能 • 短所 • 訓練データ全体に渡る最適化は⾃自明ではない • 計算グラフを動的に構築するので、メモリ管理理が 必要 x yf x = chainer.Variable(...) y = f(x) z = g(x) zg データフィード = 計算グラフ構築 Chainerはこの パラダイムを採⽤用
  24. 24. Forwardと同時に計算グラフを構築 x = chainer.Variable(np.array(1)) y = chainer.Variable(np.array(1)) z = x**2 + 2*x*y + y z.backward() 実際には Splitノードが⾃自動的に挿⼊入される x y _ ** 2 2 * _ _ * _ _ + _ z _ + _ chainer.Variable chainer.Function
  25. 25. Forwardと同時に計算グラフを構築 実際には Splitノードが⾃自動的に挿⼊入される x y _ ** 2 2 * _ _ * _ _ + _ z _ + _ x = chainer.Variable(np.array(1)) y = chainer.Variable(np.array(1)) z = x**2 + 2*x*y + y z.backward()
  26. 26. MNISTによる多層パーセプトロンの訓練 # (1) Model definition model = FunctionSet( l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10)).to_gpu() opt = optimizers.SGD() opt.setup(model) # (2) Forward computation def forward(x, t): h1 = F.relu(model.l1(x)) h2 = F.relu(model.l2(h1)) y = model.l3(h2) return F.softmax_cross_entropy(y, t) # (3) Training loop for epoch in xrange(n_epoch): for i in xrange(0, N, batchsize): x = Variable(to_gpu(...)) t = Variable(to_gpu(...)) opt.zero_grads() loss = forward(x, t) loss.backward() opt.update() 784 100 100 10 0:2% 1:5% 2:90% ・ ・ 9:1%
  27. 27. FunctionSetでモデル定義 # Model definition model = FunctionSet( l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10)).to_gpu() opt = optimizers.SGD() opt.setup(model) # Forward computation def forward(x, t): h1 = F.relu(model.l1(x)) h2 = F.relu(model.l2(h1)) y = model.l3(h2) return F.softmax_cross_entropy(y, t) # Training loop for epoch in xrange(n_epoch): for i in xrange(0, N, batchsize): x = Variable(to_gpu(...)) t = Variable(to_gpu(...)) opt.zero_grads() loss = forward(x, t) loss.backward() opt.update() パラメータ付き Functionは FunctionSetで まとめる 784 100 100 10 0:2% 1:5% 2:90% ・ ・ 9:1%
  28. 28. Optimizerのセットアップ # Model definition model = FunctionSet( l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10)).to_gpu() opt = optimizers.SGD() opt.setup(model) # Forward computation def forward(x, t): h1 = F.relu(model.l1(x)) h2 = F.relu(model.l2(h1)) y = model.l3(h2) return F.softmax_cross_entropy(y, t) # Training loop for epoch in xrange(n_epoch): for i in xrange(0, N, batchsize): x = Variable(to_gpu(...)) t = Variable(to_gpu(...)) opt.zero_grads() loss = forward(x, t) loss.backward() opt.update() Optimizerに パラメータ・勾配を セット 784 100 100 10 0:2% 1:5% 2:90% ・ ・ 9:1%
  29. 29. 順伝播を定義 # Model definition model = FunctionSet( l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10)).to_gpu() opt = optimizers.SGD() opt.setup(model) # Forward computation def forward(x, t): h1 = F.relu(model.l1(x)) h2 = F.relu(model.l2(h1)) y = model.l3(h2) return F.softmax_cross_entropy(y, t) # Training loop for epoch in xrange(n_epoch): for i in xrange(0, N, batchsize): x = Variable(to_gpu(...)) t = Variable(to_gpu(...)) opt.zero_grads() loss = forward(x, t) loss.backward() opt.update() 順伝播を定義 順伝播時に計算グ ラフを動的構築 784 100 100 10 0:2% 1:5% 2:90% ・ ・ 9:1%
  30. 30. パラメータのアップデート # Model definition model = FunctionSet( l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10)).to_gpu() opt = optimizers.SGD() opt.setup(model) # Forward computation def forward(x, t): h1 = F.relu(model.l1(x)) h2 = F.relu(model.l2(h1)) y = model.l3(h2) return F.softmax_cross_entropy(y, t) # Training loop for epoch in xrange(n_epoch): for i in xrange(0, N, batchsize): x = Variable(to_gpu(...)) t = Variable(to_gpu(...)) opt.zero_grads() loss = forward(x, t) loss.backward() opt.update() 計算グラフ上 で逆伝播 パラメータの アップデート 784 100 100 10 0:2% 1:5% 2:90% ・ ・ 9:1%
  31. 31. 柔軟なグラフ操作:制御構⽂文を⽤用いた計算グラフ構築 • ネットワーク構築時に、通常の Pythonの制御構⽂文を利利⽤用でき る (if / for / while etc…) • 応⽤用 • 訓練・テストで層を取り替 える • For⽂文を⽤用いてRNNを構築 • 訓練データごとに異異なる計 算グラフ def forward(x, t, train=True): h = F.relu(model.l1(x)) y = model.l2(h) if train: loss = F.softmax_cross_entropy(y, t) return loss else: prob = F.softmax(y) acc = F.accuracy(y, t) return acc …… y sce lo ss …… y sm pr ob acc ac c 訓練 テスト …… ……
  32. 32. 柔軟なグラフ操作:グラフの切切り落落とし • 変数yより前のグラフを切切り落落とす • yより前にはエラーが伝搬しない • truncated BPTTを実装するのに便便利利 x f y g z y g z y.unchain_backward() x = Variable(…) y = f(x) z = g(y) y.unchain_backward() BPTT:Back Propagation Through Time RNNを時間⽅方向に展開したネットワーク上で逆伝播 をする操作(通常最初の時刻まで逆伝播する) truncated BPTT BPTTで逆伝播時に遡る時刻を途中で打ち切切る⼿手法
  33. 33. Caffe Reference Modelサポート • Caffe Model Zooで提供されている BVLC Reference ModelをChainerの functionとして利利⽤用可能 func = CaffeFunction('path/to/bvlc_ref erence_caffenet.caffemodel') x = Variable(…) y, = func(inputs={'data': x}, outputs=['fc8']) Caffe:最も使われているディープラーニングフレー ムワークの⼀一つ、C++で書かれ画像認識識に強い Model Zoo:Caffeの学習済モデルを公開したWiki
  34. 34. CuPy:GPU版NumPy • cupy.ndarray • numpy.ndarray上の操作の サブセットをサポート • スライス・配列列作成・線形 代数 etc… • Elementwiseカーネル、 Reduction カーネルを⽤用いて、 独⾃自のカーネルの記述も可能 • CPUコードとGPUコードの統⼀一 的な記述をサポート def softmax(x) xp = get_array_module(x) y = x – x.max(axis=1, keepdims=True) y = xp.exp(y) return y / y.sum(axis=1, keepdims=True) xp = numpy/cupy いずれでもOK ⼊入⼒力力に応じて numpy/cupyを選択
  35. 35. まとめ • ChainerはDefine-by-Runのコンセプトに基づ いたPythonベースのディープラーニングフ レームワークです • 動的な計算グラフ構築を⾏行行うことで、柔軟な計 算グラフ構築をPythonプログラムとして記述 可能です • CuPyを利利⽤用することでCPUとGPUの統⼀一的な コード記述をサポートします • 公式HP:http://chainer.org • レポジトリ: https://github.com/pfnet/chainer • Twitter:@ChainerOfficial • Google Group:Chainer Uesr Group • Contribution Guide: http://docs.chainer.org/en/stable/contribution.html git clone https://github.com/pfnet/chainer.git Your Contribution is Welcomed!!
  36. 36. 補⾜足資料料
  37. 37. Mocha:Juliaベースのディープラーニングフレームワーク • 開発者:Chiyuan Zhang (MIT) • 交換プログラムで京⼤大にも在籍していた • バージョン:v0.0.9(2015年年7⽉月21⽇日) • ライセンス:MIT Expat License • train LeNet with MNIST • https://github.com/pluskid/Mocha.jl#hell o-world • 特徴 • Caffeを意識識した設計 • 多くのモジュールの名称がCaffeと⼀一致 • Caffeの学習済モデルをインポートする ツールを⽤用意 • 透過的なバックエンド切切り替え • Pure Julia / C++実装 / GPU

×