2015/9/18 GTC Japan @⻁虎ノ⾨門ヒルズフォーラム 深層学習フレームワークChainerの導⼊入 と化合物活性予測への応⽤用 株式会社 Preferred Networks ⼤大野健太 [email protected] ⾃自⼰己紹介 • ⼤大野健太(@delta2323_) • 経歴:数理理科学研究科・修⼠士課程(共形幾何) • • → 2012.3 PFI → 2014.10 PFN • 所属:研究班(理理論論解析・ライフサイエンス・Chainer開発メンバー) • ブログ:http://delta2323.github.io 最近の活動 • NIPS2014勉強会・ICML2015勉強会主催 • ⽇日経ビッグデータ短期連載「ディープラーニングのビジネス活⽤用を探る」 • 「この1冊でまるごとわかる! ⼈人⼯工知能ビジネス」寄稿 2 git clone https://github.com/pfnet/chainer.git Chainer概要 http://chainer.org リソース • 製作者:得居誠也、開発:PFN、PFI • 公開:2015年年6⽉月9⽇日 • 公式HP:http://chainer.org • 隔週⽔水曜⽇日リリース • レポジトリ: https://github.com/pfnet/chainer • • 最新バージョン:1.3.0(2015年年9⽉月2⽇日) • Twitter:@ChainerOfficial • 予定:1.3.1 (9/16) → 1.4.0 (9/30) • Google Group:Chainer Uesr Group • Contribution Guide: ライセンス:MIT (Expat) 特徴 http://docs.chainer.org/en/stable/contribution. html • Powerful:CUDA・マルチGPU・cuDNN対応 • Flexible:様々なネットワークやデータごとに異異なるネットワークを構築可能 • Intuitive:ネットワーク構築は通常のPythonコードで記述可能 4 Chainer技術スタック:Chainer本体 + CuPy • Chainer:ディープラーニングフレームワーク • 計算グラフ構築・最適化アルゴリズムをPython Python プログラムとして記述 • Chainer CuPy:GPU版NumPy* • NumPyの配列列操作のサブセットと互換 * NumPy:Pythonの数値計算ライブラリ。 多次元配列列の操作や数学関数が充実しており、 多くのPythonデータ解析ツールがNumPyを ベースに制作されている 5 NumPy CuPy BLAS CUDA cuDNN Toolkit CPU GPU 環境構築 • 動作確認済みOS:Linux • • • Ubuntu 14.04推奨 インストール • pip install chainer ⾔言語:Python(Cpython) • 2.7+/3.4+推奨 • 依存モジュール: Numpy1.9+、Six1.9+ • CUDA依存モジュール:CUDA6.5+ pip* : Pythonのパッケージ管理理ツール、 多くのPythonのライブラリがこのコマン ドでインストールできる 6 フレームワークごとのGithub Starsの⽐比較(2015年年5⽉月) PyLearn2 https://twitter.com/fchollet/status/635 891305084796929を元に作成 7 フレームワークごとのGithub Starsの⽐比較(2015年年8⽉月) PyLearn2 https://twitter.com/fchollet/status/635 891305084796929を元に作成 8 Chainer利利⽤用例例 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 9 Chainer利利⽤用例例 試⾏行行錯誤をする機械・深層強化学習による⾃自動運転 273 600 400 200 100 50 5 重みを共有 273 600 400 200 100 50 5 重みを共有 273 600 400 200 100 50 5 https://research.preferred.jp/2015/06/distributed-deepreinforcement-learning/ 10 Chainer利利⽤用例例 画像⽣生成 • ⼊入⼒力力 ⽂文字を”描く“ニューラルネット(Variational AE) Kingma, Diederik P., et al. "Semi-supervised learning with deep generative models." Advances in Neural Information Processing Systems. 2014. の実験を弊社で再現→ • 絵を”描く“ニューラルネット • CaffeのVGGモデルをインポート A Neural Algorithm of Artistic Style [Gatys+'15]を弊社で再現 (chainer-goch)→ 11 ⽣生成結果 Deep Learningフレームワークの構成要素 変数 層 計算グラフ 途中で分岐して もよい (⼀一般にはDAG) 順伝播 逆伝播 Caffe Chainer 変数 (n次元配列列) Blob Variable 層 Layer Function 計算グラフ Net (FunctionSet) 最適化 アルゴリズム Solver Optimizer 正解データも⼊入⼒力力 の⼀一部とみなすと ⾒見見通しが良良い 12 深層学習フレームワークの現状 アーキテクチャの複雑化 • 深層学習で扱われるアーキテクチャーの複雑化 • • GoogLeNet, NTM, Recursive Net, LSTM … 既存フレームワークではネットワーク記述が困難 GoogleNetのアーキテクチャ定義 Chainer 167⾏行行 Caffe 2058⾏行行 (2012)AlexNet*, 7層 ↑ Chainerは、Define-by-Runのコンセプトに よりこれらの問題の解決を⽬目指す (2014) GoogLeNet**, 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). 13 計算グラフ構築のパラダイム:Define-and-Run vs. Define-by-Run Define-and-Run Define-by-Run x = chainer.Variable(...) y = f(x) z = g(x) 計算グラフ構築 f データフィード = 計算グラフ構築 g x データフィード x f g 14 f y g z Forwardと同時に計算グラフを構築 x = chainer.Variable(np.array(1)) y = chainer.Variable(np.array(1)) z = x**2 + 2*x*y + y z.backward() chainer.Variable _ ** 2 _ + _ chainer.Function x 2 * _ y _ * _ 15 実際には Splitノードが⾃自動的に挿⼊入される _ + _ z Variable.backward()で逆伝播 x = chainer.Variable(np.array(1)) y = chainer.Variable(np.array(1)) z = x**2 + 2*x*y + y z.backward() _ ** 2 _ + _ x 2 * _ y _ * _ 16 実際には Splitノードが⾃自動的に挿⼊入される _ + _ z 柔軟なグラフ操作:制御構⽂文を⽤用いた計算グラフ構築 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(prob, t) return acc • Pythonの制御構⽂文を利利⽤用でき る (if / for / while etc…) • 応⽤用 • 訓練・テストで層を取り替 える • For⽂文を⽤用いてRNNを構築 • 訓練データごとに異異なる計 算グラフ 訓練 …… …… y sce lo ss テスト …… …… y sm pr ob 17 ネットワーク構築時に、通常の acc ac c MNISTによる多層パーセプトロンの訓練 # (4) Training loop for epoch in xrange(n_epoch): for i in xrange(0, N, batchsize): x = Variable(to_gpu(...)) t = Variable(to_gpu(...)) # (1) Model definition model = FunctionSet( l1=F.Linear(784, 100), l2=F.Linear(100, 100), l3=F.Linear(100, 10)).to_gpu() opt.zero_grads() loss = forward(x, t) loss.backward() opt.update() # (2) Optimizer Setup opt = optimizers.SGD() opt.setup(model) # (3) Forward computation 784 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) 18 100 100 10 0:2% 1:5% 2:90% ・ ・ 9:1% (1) モデル定義 パラメータ付き Functionは FunctionSetで まとめる 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) 19 (2) Optimizerのセットアップ 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) Optimizerに パラメータ・勾配 をセット 20 (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) 順伝播を1回⾏行行う loss.backward() → 裏裏で計算グラフ opt.update() を⾃自動構築 21 (3) 順伝播を定義 xは訓練データ tは正解ラベル 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) 22 (4) 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() パラメータの 23 アップデート 柔軟なグラフ操作:グラフの切切り落落とし • • • x = Variable(…) 変数yより前のグラフを切切り落落とす y = f(x) yより前にはエラーが伝搬しない z = g(y) truncated BPTT** を実装するのに便便利利 y.unchain_backward() x * BPTT:Back Propagation Through Time RNNを時間⽅方向に展開したネットワーク上で逆伝播 をする操作(通常最初の時刻まで逆伝播する) ** truncated BPTT BPTTで逆伝播時に遡る時刻を途中で打ち切切る⼿手法 f y g z y.unchain_backward() 24 y g z ベンチマーク(Caffeとの⽐比較) * Caffe:最も使われているディープラーニングフレームワークの⼀一つ、 C++で記述され画像認識識に強い 25 分散深層学習による化合物活性予測 * hERG potassium channels and cardiac arrhythmia, Michael C. Sanguinetti & Martin Tristani-Firouzi, Nature 440, 463-469(23 March 2006) (doi:10.1038/nature04710) Fig. 5 定量量的構造活性相関 (QSAR) この化合物は「薬」になるか? • Quantitative Structure-Activity Relationship • 化合物の構造と薬効・毒性の関係を解析 • 体内酵素に代謝されやすいか? • 受容体を阻害しやすいか? ↑ コンペティション結果アナウンス記事** • 製薬⼤大⼿手MerckがQSARのデータマイニングコンペ ティションを主催 (2012) • ヒントングループがマルチタスク深層学習ベースの ⼿手法で勝利利 * ⾼高精度度なQSAR ↓ ⾼高精度度なHTS (化合物スクリーニング) ↓ 薬効を持つ化合物 発⾒見見確率率率上昇 * Dahl, George E., Navdeep Jaitly, and Ruslan Salakhutdinov. "Multitask Neural Networks for QSAR Predictions." arXiv preprint arXiv:1406.1231 (2014). ** http://blog.kaggle.com/2012/10/31/merck-competition-resultsdeep-nn-and-gpus-come-out-to-play/ 27 マルチタスクによる活性予測の精度度向上 [Dahl+14] PubChem データベース DNN を共有 フィンガー プリント バイオアッセイ データ • 19アッセイ • 20万化合物 100100110101000 10 化合物 データ 複数ターゲット 同時に活性予測 アッセイB • • • • 全結合隠れ層2-3層 500-2500ユニット/層 Dropout Minibatch SGD 28 1 0 Active!! 1 0 Active!! 0 1 Inactive!! Community Learningによる候補化合物選定 『みんなのスパコン』TSUBAMEによる⽇日本再⽣生 H27採択利利⽤用課題 クラスタ(>100ノード) PubChem データベース SoftTarget 交換 • 訓練データを分割し各ノードで学習 (Data-Parallel) • パラメータではなく予測結果 (SoftTarget)を交換 SoftTarget 交換 2億化合物 100万アッセイ 29 • ノード間通信はMPI • 東京⼯工業⼤大学TSUBAMEを利利⽤用 • 3GPU(K40), メモリ4GB/ノード 参考実験:Community Learningのスケーラビリティ • Community Learningは8ノードまでのスケールすることを確認 ノード数 30 所要時間(秒) ノード間 通信 (秒) 速度度向上 1 10.5719 1 0.0318 2 5.2267 x 2.022 0.1377 3 3.9455 x 2.679 0.1284 4 2.5978 x 4.070 0.1367 8 1.5417 x 6.857 0.1281 NNはChainerではなく mshadowを⽤用いて構築 参考実験:Community Learningによる精度度向上 • 全5アッセイでCommunity Learningにより精度度向上を達成 アッセイID シングルタスク マルチタスク [Dahl+ '14] Community Learning 1851 (1a2) 0.926 0.938 0.9387 1851 (2c19) 0.897 0.903 0.9413 1851 (2c9) 0.889 0.907 0.9274 1851 (2d6) 0.863 0.861 0.8913 1851 (3a4) 0.895 0.897 0.9214 31 NNはChainerではなく mshadowを⽤用いて構築 まとめ • • • ChainerはPythonベースのディープラーニング • 公式HP:http://chainer.org フレームワークです • レポジトリ: https://github.com/pfnet/chainer Define-by-Runパラダイムを採⽤用することで柔 軟な計算グラフ構築をプログラムとして記述で • Twitter:@ChainerOfficial きます • Google Group:Chainer Uesr Group 化合物の活性予測など、ディープラーニングの • Contribution Guide: http://docs.chainer.org/en/stable/contribution.html 様々な応⽤用がChainerにより実現されています Your Contribution is Welcome!! And You are Welcome!! We are hiring :) 32 Copyright © 2014-‐‑‒ Preferred Networks All Right Reserved.
© Copyright 2025 ExpyDoc