深層学習フレームワークChainerの導 入 と化合物活性予測への応 用

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.