Amazon Web Services ブログ
Amazon SageMakerですぐに利用可能: Deep Graph Library
本日、グラフニューラルネットワークを簡単に実装できるオープンソースのライブラリ Deep Graph Library が Amazon SageMaker で使用できる機能が発表されました。
近年では、手書き文字・画像・動画などの複雑なデータから、精巧なパターンを抽出できる優れた能力によって、深層学習が世の中を席巻しています。しかしながら、このようなカテゴリーに分類されないデータは多く存在しており、こうしたデータはグラフを使うことでより適切に表現可能な場合があります。直感的にも、畳み込みニューラルネットワークや回帰型ニューラルネットワークのような従来のニューラルネットワークは、このようなデータに対して適切ではないことがわかりますし、新たなアプローチが必要と言えます。
グラフニューラルネットワークとは
グラフニューラルネットワーク(GNN)は最近開発された機械学習に関連した技術の中で最もわくわくするものの一つで、これらの参考文献を読むことで、まずは概要を理解できます。
GNNは次のようなデータセットに対する予測モデルを作成するために使用されます。
- ソーシャルネットワーク: 人同士の関係性を示すグラフ
- 推薦システム: カスタマーと商品の関係性を示すグラフ
- 化学構造解析: 化合物が原子やそれらの結合としてモデル化されているグラフ
- サイバーセキュリティ: ソースとデスティネーション IP アドレスの関係性を示すグラフ
多くの場合、これらのデータセットは非常に大きく、その一部にしかレベル付けがなされていません。例えば、詐欺行為の検出を目的として、特定の人物が詐欺を働く確率を予測するために、詐欺を過去に働いたことがある既知の人物との関係性を解析するシナリオを考えます。これは、グラフの一部のみが詐欺師または善良な人物としてラベルづけされている半教師あり学習のタスクになります。そして、人手でラベル付けした大規模なデータセットを用意して、データを「linearize」し、従来の機械学習アルゴリズムを適用するよりも良いソリューションであると言えます。
このような問題へ取り組むにあたって、それぞれの業界知識 (小売、金融、化学など) 、コンピュータサイエンスの知識 (Python, 深層学習, オープンソースのツール) 、IT インフラの知識 (モデルのトレーニング、デプロイ、スケールリングの方法) が必要になります。全てのスキルを習得できる方はごく少数でしかないため、Deep Graph LibraryやAmazon SageMakerのようなツールが必要とされています。
Deep Graph Libraryの紹介
Github上で2018年 12月にリリースされたDeep Graph Library (DGL) とは、研究者や科学者が自分たちのデータセットを対象に、GNNのすばやい開発・学習・評価を補助してくれるPythonのオープンソースライブラリです。
DGLは PyTorch や Apache MXNet のようなポピュラーなディープラーニングフレームワークの上で動作するようになっています。これらのフレームワークに関する知識がある場合は、初心者でも安心な実装例を通して簡単に使い始めることができます。GTC 2019 で開催されたワークショップの資料も非常に参考になります。実装例を試したあと、DGL で実装された最先端のモデルをここから試すことも可能です。例えば、Graph Convolution Network (GCN) と CORA のデータセットを用いることで、文書分類の機械学習モデルを作成することができます。方法は次のコマンドを実行するだけです。
$ python3 train.py --dataset cora --gpu 0 --self-loop
モデルに関するコードは全て公開されているので、検証や改変も行えます。これらの実装は論文で主張されているパフォーマンスが出るか、結果が再現可能かをAWS のチームが入念に確認しています。
DGL にはグラフのデータセットも含まれており、これを簡単にダウンロードして様々な試行が行えるようになっています。DGL をローカルの環境へインストールして実行することももちろん可能ですが、不要な心配をしなくていいように、PyTorch および Apache MXNet 用のAWS 深層学習コンテナへライブラリを追加しました。これによって DGL を Amazon SageMaker から簡単にご利用いただけるようになり、一台もサーバの運用をしていただく必要なく、あらゆるスケールで機械学習モデルの学習とデプロイを実行できます。実際にどうやるかをこれからお見せします。
DGL を Amazon SageMaker で利用する方法
実装サンプルを SageMaker の Github のリポジトリに追加してあります。そのうちの一つは Tox21 のデータセットを使用して GNN をトレーニングし、化合物の構造式から有毒性の予測を行うものです。
今回解こうとしている問題は、細胞中の受容体等の 12 個のターゲットに対して、新たな化合物が有毒かどうかを推測するといったものです。ご想像の通り、このような解析は新薬を開発する際に重要であり、試験管内で実験を行わずとも素早く結果が予測できることにより、研究者は有望な薬の候補に労力を割くことができます。
このデータセットには 8000 個以上の化合物が含まれています。そして、化合物はグラフとしてモデル化されており(原子が頂点、結合が辺)、それぞれ12個のラベルがついています。GNN を使い、化合物の有毒性を予測可能なマルチラベルの二値分類モデルを作成します。
トレーニング用のスクリプトより、DGL のコレクションから簡単にデータをダウンロードできます。
from dgl.data.chem import Tox21
dataset = Tox21()
同様に、GNN の分類器を DGL の model zoo を利用して作成できます。
from dgl import model_zoo
model = model_zoo.chem.GCNClassifier(
in_feats=args['n_input'],
gcn_hidden_feats=[args['n_hidden'] for _ in range(args['n_layers'])],
n_tasks=dataset.n_tasks,
classifier_hidden_feats=args['n_hidden']).to(args['device'])
他のコードはほとんど素のPyTorchです。もしPyTorchに慣れていれば、すぐに内容がわかると思います。
このコードを Amazon SageMaker 上で実行させる場合は、SageMaker の Estimator
を使用して、DGL のコンテナ名とトレーニング用スクリプトをハイパーパラメータとして引数にいれる必要があります。
estimator = sagemaker.estimator.Estimator(container,
role,
train_instance_count=1,
train_instance_type='ml.p3.2xlarge',
hyperparameters={'entrypoint': 'main.py'},
sagemaker_session=sess)
code_location = sess.upload_data(CODE_PATH,
bucket=bucket,
key_prefix=custom_code_upload_location)
estimator.fit({'training-code': code_location})
<output removed>
epoch 23/100, batch 48/49, loss 0.4684
epoch 23/100, batch 49/49, loss 0.5389
epoch 23/100, training roc-auc 0.9451
EarlyStopping counter: 10 out of 10
epoch 23/100, validation roc-auc 0.8375, best validation roc-auc 0.8495
Best validation score 0.8495
Test score 0.8273
2019-11-21 14:11:03 Uploading - Uploading generated training model
2019-11-21 14:11:03 Completed - Training job completed
Training seconds: 209
Billable seconds: 209
これより、学習済みのモデルを S3 から取得すれば、実際に実験を行わずに大量の化合物の有毒性を予測することができます。素晴らしいですね!
今すぐご利用いただけます!
本日からすぐに DGL を Amazon SageMaker から利用いただけます。始めるには、DGL の Get Started ページか、DGL SageMaker のドキュメントをご覧ください。
実際に試していただき、DGL のフォーラム、Amazon SageMaker の AWS フォーラム、または通常の AWS サポートの連絡先からフィードバックをお寄せください。
– Julien
翻訳はSAの奥野が担当しました。原文はこちら。