因为能从各类复杂数据(例如自由文本、图像、视频)中提取复杂模式,深度学习技术已经实现了非常广泛的应用。然而实践中会发现,很多数据集用图形(Graph)的方式更容易表达,例如社交网络上人们之间的相互关系等。
对于这类数据,深度学习技术中所使用的卷积神经网络、递归神经网络等传统神经网络架构就有些难以应对了,也许是时候引入一种新的方法。
图形神经网络(GNN)请了解一下
图神经网络(GNN)是当今机器学习领域最蓬勃发展的方向之一,这种技术通常可用于在图形类型的数据集上训练预测模型,例如:
- 社交网络数据集,其中用图形显示熟人之间的联系;
- 推荐系统数据集,其中用图形显示顾客与物品之间的互动;
- 化学分析数据集,其中化合物被建模为由原子和化学键组成的图形;
- 网络安全数据集,其中用图形描述了源 IP 地址和目标 IP 地址之间的连接……
大部分情况下,这些数据集非常庞大,并且只有部分标记。以一个典型的欺诈检测场景为例,在该场景中,我们将尝试通过分析某人与已知欺诈者的联系,来预测其为欺诈行为者的可能性。这个问题可以定义为半监督学习任务,其中只有一小部分图节点将被标记(“欺诈者”或“合法者”)。与尝试构建一个大型的手工标记数据集,并对其进行“线性化”以应用传统的机器学习算法相比,这应该是一个更好的解决方案。
有关 GNN 的进一步介绍,不妨参考这些参考文献。
Amazon SageMaker 现已支持开源的 Deep Graph Library
在 GNN 的实践应用中,通常需要我们具备特定领域(零售、金融、化学等)的知识、计算机科学知识(Python、深度学习、开源工具)以及基础设施相关知识(培训、部署和扩展模型)。要求比较多且复杂,很少人能够掌握所有这些技能。
而 Amazon SageMaker 通过对 Deep Graph Library 的支持解决了这些问题。
Deep Graph Library(DGL)于2018年12月首次在 Github 上发布,是一个 Python 开源库,可帮助研究人员和科学家利用其数据集快速构建、训练和评估 GNN。
DGL 建立在流行的深度学习框架之上,例如 PyTorch 和 Apache MXNet。如果熟悉其中之一,就会发现它使用起来得心应手。无论使用哪种框架,我们都可以通过这些对初学者友好的示例轻松入门。此外,GTC 2019研讨会的提供的幻灯片和代码也能帮助我们快速上手。
一旦完成了玩具示例,就可以开始探索 DGL 中已实现的各种前沿模型了。例如,我们可以通过运行以下命令,使用图卷积网络(GCN)和 CORA 数据集来训练文档分类模型:
`$ python3 train.py --dataset cora --gpu 0 --self-loop`
所有模型的代码均可供查看和调整。这些实现已经过 AWS 团队仔细验证,他们验证了性能声明并确保可以重现结果。
DGL 还包含图形数据集的集合,我们可以轻松下载并用于试验。
当然,我们也可以在本地安装和运行 DGL,但是为了更方便,亚马逊云科技已经将其添加到了 PyTorch 和 Apache MXNet 的深度学习容器中。这样就可以轻松地在 Amazon SageMaker上使用 DGL,以在任意规模上训练和部署模型,而不必管理服务器。
在 Amazon SageMaker 上使用 DGL
亚马逊云科技在 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 的 亚马逊云科技平台或您常用的 Amazon Support 联系方式向我们发送反馈。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。