深層学習フレームワークChainerの導⼊入
と化合物活性予測への応⽤用
株式会社 Preferred Networks
⼤大野健太 oono@preferred.jp
2015/9/18 GTC Japan
@⻁虎ノ⾨門ヒルズフォーラム
⾃自⼰己紹介
• ⼤大野健太(@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⽇日
• 隔週⽔水曜⽇日リリース
• 最新バージョン: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・cuDNN対応
• Flexible:様々なネットワークやデータごとに異異なるネットワークを構築可能
• Intuitive:ネットワーク構築は通常のPythonコードで記述可能4
Chainer技術スタック:Chainer本体 + CuPy
• Chainer:ディープラーニングフレームワーク
• 計算グラフ構築・最適化アルゴリズムをPython
プログラムとして記述
• CuPy:GPU版NumPy*
• NumPyの配列列操作のサブセットと互換
CPU GPU
BLAS
CUDA
Toolkit
cuDNN
NumPy CuPy
Chainer
Python
* NumPy:Pythonの数値計算ライブラリ。
多次元配列列の操作や数学関数が充実しており、
多くのPythonデータ解析ツールがNumPyを
ベースに制作されている 5
環境構築
• 動作確認済みOS:Linux
• Ubuntu 14.04推奨
• ⾔言語:Python(Cpython)
• 2.7+/3.4+推奨
• 依存モジュール: Numpy1.9+、Six1.9+
• CUDA依存モジュール:CUDA6.5+
• インストール
• pip install chainer
6
pip* : Pythonのパッケージ管理理ツール、
多くのPythonのライブラリがこのコマン
ドでインストールできる
フレームワークごとのGithub Starsの⽐比較(2015年年5⽉月)
PyLearn2
https://twitter.com/fchollet/status/635
891305084796929を元に作成
7
フレームワークごとのGithub Starsの⽐比較(2015年年8⽉月)
PyLearn2
8
https://twitter.com/fchollet/status/635
891305084796929を元に作成
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利利⽤用例例
試⾏行行錯誤をする機械・深層強化学習による⾃自動運転
10
https://research.preferred.jp/2015/06/distributed-deep-
reinforcement-learning/
273 600 400 200 100 50 5
273 600 400 200 100 50 5
273 600 400 200 100 50 5
重みを共有
重みを共有
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フレームワークの構成要素
Caffe Chainer
変数
(n次元配列列)
Blob Variable
層 Layer Function
計算グラフ Net (FunctionSet)
最適化
アルゴリズム
Solver Optimizer
順伝播
逆伝播
計算グラフ変数 層
12
正解データも⼊入⼒力力
の⼀一部とみなすと
⾒見見通しが良良い
途中で分岐して
もよい
(⼀一般にはDAG)
深層学習フレームワークの現状
アーキテクチャの複雑化
• 深層学習で扱われるアーキテクチャーの複雑化
• GoogLeNet, NTM, Recursive Net, LSTM …
• 既存フレームワークではネットワーク記述が困難
Chainer Caffe
167⾏行行 2058⾏行行
GoogleNetのアーキテクチャ定義
(2012)AlexNet*, 7層 ↑
(2014) GoogLeNet**, 22層→
13
* 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のコンセプトに
よりこれらの問題の解決を⽬目指す
計算グラフ構築のパラダイム:Define-and-Run vs. Define-by-Run
14
f g
x f g
計算グラフ構築
データフィード
x yf
x = chainer.Variable(...)
y = f(x)
z = g(x)
zg
データフィード
= 計算グラフ構築
Define-and-Run Define-by-Run
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
15
Variable.backward()で逆伝播
実際には 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()
16
柔軟なグラフ操作:制御構⽂文を⽤用いた計算グラフ構築
• ネットワーク構築時に、通常の
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(prob, t)
return acc
…… y sce
lo
ss
…… y sm
pr
ob
acc
ac
c
訓練
テスト
……
……
17
MNISTによる多層パーセプトロンの訓練
# (1) Model definition
model = FunctionSet(
l1=F.Linear(784, 100),
l2=F.Linear(100, 100),
l3=F.Linear(100, 10)).to_gpu()
# (2) Optimizer Setup
opt = optimizers.SGD()
opt.setup(model)
# (3) 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)
# (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()
784 100 100 10
0:2%
1:5%
2:90%
・
・
9:1%18
(1) モデル定義
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)
パラメータ付き
Functionは
FunctionSetで
まとめる
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)
loss.backward()
opt.update()
順伝播を1回⾏行行う
→ 裏裏で計算グラフ
を⾃自動構築
21
(3) 順伝播を定義
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)
xは訓練データ
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
柔軟なグラフ操作:グラフの切切り落落とし
• 変数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で逆伝播時に遡る時刻を途中で打ち切切る⼿手法
24
ベンチマーク(Caffeとの⽐比較)
25
* Caffe:最も使われているディープラーニングフレームワークの⼀一つ、
C++で記述され画像認識識に強い
分散深層学習による化合物活性予測
* 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)
• ヒントングループがマルチタスク深層学習ベースの
⼿手法で勝利利 *
27
⾼高精度度なQSAR
↓
⾼高精度度なHTS
(化合物スクリーニング)
↓
薬効を持つ化合物
発⾒見見確率率率上昇
* Dahl, George E., Navdeep Jaitly, and Ruslan Salakhutdinov. "Multi-
task Neural Networks for QSAR Predictions." arXiv preprint
arXiv:1406.1231 (2014).
** http://blog.kaggle.com/2012/10/31/merck-competition-results-
deep-nn-and-gpus-come-out-to-play/
↑ コンペティション結果アナウンス記事**
マルチタスクによる活性予測の精度度向上 [Dahl+14]
28
• 全結合隠れ層2-3層
• 500-2500ユニット/層
• Dropout
• Minibatch SGD
10010011010100010
フィンガー
プリント
複数ターゲット
同時に活性予測
1
0
Active!!
1
0 Active!!
0
1 Inactive!!
化合物
データ
バイオアッセイ
データ
PubChem
データベース
• 19アッセイ
• 20万化合物
DNN
を共有
アッセイB
Community Learningによる候補化合物選定
『みんなのスパコン』TSUBAMEによる⽇日本再⽣生 H27採択利利⽤用課題
29
PubChem
データベース
2億化合物
100万アッセイ
SoftTarget
交換
SoftTarget
交換
• 訓練データを分割し各ノードで学習
(Data-Parallel)
• パラメータではなく予測結果
(SoftTarget)を交換
• ノード間通信はMPI
• 東京⼯工業⼤大学TSUBAMEを利利⽤用
• 3GPU(K40), メモリ4GB/ノード
クラスタ(>100ノード)
参考実験: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により精度度向上を達成
31
アッセイ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
NNはChainerではなく
mshadowを⽤用いて構築
まとめ
• ChainerはPythonベースのディープラーニング
フレームワークです
• Define-by-Runパラダイムを採⽤用することで柔
軟な計算グラフ構築をプログラムとして記述で
きます
• 化合物の活性予測など、ディープラーニングの
様々な応⽤用がChainerにより実現されています
• 公式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
Your Contribution is Welcome!!
32
And You are Welcome!!
We are hiring :)
Copyright  ©  2014-‐‑‒
Preferred  Networks  All  Right  Reserved.

2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用