Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
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)
Prochain SlideShare
Chargement dans…5
×

Introduction to Chainer (LL Ring Recursive)

7 991 vues

Publié le

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

Publié dans : Technologie
  • Soyez le premier à commenter

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

×