由於能從各種複雜數據(例如自由文本、圖像、視頻)中提取複雜模式,深度學習技術已經實現了很是普遍的應用。然而實踐中會發現,不少數據集用圖形(Graph)的方式更容易表達,例如社交網絡上人們之間的相互關係等。html
對於這類數據,深度學習技術中所使用的卷積神經網絡、遞歸神經網絡等傳統神經網絡架構就有些難以應對了,也許是時候引入一種新的方法。python
圖神經網絡(GNN)是當今機器學習領域最蓬勃發展的方向之一,這種技術一般可用於在圖形類型的數據集上訓練預測模型,例如:git
大部分狀況下,這些數據集很是龐大,而且只有部分標記。以一個典型的欺詐檢測場景爲例,在該場景中,咱們將嘗試經過分析某人與已知欺詐者的聯繫,來預測其爲欺詐行爲者的可能性。這個問題能夠定義爲半監督學習任務,其中只有一小部分圖節點將被標記(「欺詐者」或「合法者」)。與嘗試構建一個大型的手工標記數據集,並對其進行「線性化」以應用傳統的機器學習算法相比,這應該是一個更好的解決方案。github
有關 GNN 的進一步介紹,不妨參考這些參考文獻。算法
在 GNN 的實踐應用中,一般須要咱們具有特定領域(零售、金融、化學等)的知識、計算機科學知識(Python、深度學習、開源工具)以及基礎設施相關知識(培訓、部署和擴展模型)。要求比較多且複雜,不多人可以掌握全部這些技能。
而 Amazon SageMaker 經過對 Deep Graph Library 的支持解決了這些問題。
Deep Graph Library(DGL)於2018年12月首次在 Github 上發佈,是一個 Python 開源庫,可幫助研究人員和科學家利用其數據集快速構建、訓練和評估 GNN。apache
DGL 創建在流行的深度學習框架之上,例如 PyTorch 和 Apache MXNet。若是熟悉其中之一,就會發現它使用起來駕輕就熟。不管使用哪一種框架,咱們均可以經過這些對初學者友好的示例輕鬆入門。此外,GTC 2019研討會的提供的幻燈片和代碼也能幫助咱們快速上手。
一旦完成了玩具示例,就能夠開始探索 DGL 中已實現的各類前沿模型了。例如,咱們能夠經過運行如下命令,使用圖卷積網絡(GCN)和 CORA 數據集來訓練文檔分類模型:api
`$ python3 train.py --dataset cora --gpu 0 --self-loop`
全部模型的代碼都可供查看和調整。這些實現已通過 AWS 團隊仔細驗證,他們驗證了性能聲明並確保能夠重現結果。安全
DGL 還包含圖形數據集的集合,咱們能夠輕鬆下載並用於試驗。
固然,咱們也能夠在本地安裝和運行 DGL,可是爲了更方便,AWS 已經將其添加到了 PyTorch 和 Apache MXNet 的深度學習容器中。這樣就能夠輕鬆地在 Amazon SageMaker上使用 DGL,以在任意規模上訓練和部署模型,而沒必要管理服務器。服務器
AWS 在 Github 存儲庫中爲 SageMaker 添加了完整示例:在其中一個示例中,咱們使用 Tox21 數據集訓練了一個用於分子毒性預測的簡單 GNN。網絡
咱們嘗試解決的問題是:計算出新化合物對12種不一樣靶標(生物細胞內的受體等)的潛在毒性。能夠想象,這種分析在設計新葯時相當重要,並且無需進行體外實驗就能快速預測結果,這有助於研究人員將精力集中在最有但願的候選藥物上。
數據集包含8,000多種化合物:每種化合物均建模爲圖形(原子是頂點,原子鍵是邊),並標記12次(每一個目標一個標記)。咱們將使用 GNN 創建一個多標籤的二元分類模型,使咱們可以預測所考察分子的潛在毒性。
在訓練腳本中,咱們能夠輕鬆地從 DGL 集合中下載所需數據集。
from dgl.data.chem import Tox21 dataset = Tox21()
相似的,咱們也可使用 DGL Model zoo 輕鬆構建一個 GNN 分類器:
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,若是您熟悉此庫,則使用起來就應該可以得心應手。
要在 Amazon SageMaker 上運行此代碼,咱們要作的就是使用 SageMaker 模擬器,傳遞 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 中通過訓練的模型,並將其用於預測大量化合物的毒性,而無需進行實際實驗。
你們如今已經能夠 Amazon SageMaker 上使用 DGL。
自行體驗的同時,不妨經過 DGL 論壇、Amazon SageMaker 的 AWS 平臺或您經常使用的 AWS Support 聯繫方式向咱們發送反饋。