

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Neptune ML 中的模型和模型训练
<a name="machine-learning-models-and-training"></a>

Neptune ML 使用图形神经网络 (GNN) 为各种机器学习任务创建模型。事实证明，图形神经网络可以为图形机器学习任务获得最先进的结果，并且非常擅长从图形结构化数据中提取信息模式。

## Neptune ML 中的图形神经网络 (GNN)
<a name="machine-learning-gnns"></a>

图形神经网络 (GNN) 属于一个神经网络系列，它们可通过考虑附近节点的结构和特征来计算节点表示形式。GNN 是对其它不太适合图形数据的传统机器学习和神经网络方法的补充。

GNN 用于解决机器学习任务，例如节点分类和回归（预测节点的属性）、边缘分类和回归（预测边缘的属性）或链接预测（预测图形中的两个节点是否应连接）。

通常，使用 GNN 执行机器学习任务涉及两个阶段：
+ 编码阶段，其中 GNN 计算图形中每个节点的 D 维向量。这些向量也称为*表示形式*或*嵌入*。
+ 解码阶段，它根据编码后的表示形式进行预测。

对于节点分类和回归，节点表示形式直接用于分类和回归任务。对于边缘分类和回归，边缘上事件节点的节点表示形式用作分类或回归的输入。对于链接预测，边缘似然性分数是通过使用一对节点表示形式和一种节点类型表示形式来计算的。

[深度图表库 (DGL)](https://www.dgl.ai/) 有助于为这些任务高效定义和训练 GNN。

不同的 GNN 模型在消息传递的公式下是统一的。在此视图中，图形中节点的表示形式是使用该节点的邻居表示形式（消息）以及该节点的初始表示形式来计算的。在 Neptune ML 中，节点的初始表示形式来自从其节点属性中提取的特征，或者是可学习的并取决于节点的身份。

Neptune ML 还提供了连接节点特征和可学习节点表示形式以用作原始节点表示形式的选项。

对于 Neptune ML 中涉及具有节点属性的图形的各种任务，我们使用[关系图表卷积网络](https://arxiv.org/abs/1703.06103) (R-GCN) 来执行编码阶段。R-GCN 是一种 GNN 架构，非常适合具有多个节点和边缘类型的图形（这些图形称为异构图形）。

R-GCN 网络由固定数量的层组成，一层接一层地堆叠。R-GCN 的每一层都使用其可学习的模型参数来聚合来自节点的直接 1 跳邻域的信息。由于后续层使用前一层的输出表示形式作为输入，因此，影响节点最终嵌入的图形邻域的半径取决于 R-GCN 网络的层数 (`num-layer`)。

例如，这意味着 2 层网络使用来自 2 跳之外的节点的信息。

要了解有关 GNN 的更多信息，请参阅[图形神经网络综合调查](https://arxiv.org/abs/1901.00596)。有关深度图表库 (DGL) 的更多信息，请访问 DGL [网页](https://www.dgl.ai/)。有关在 GNN 中使用 DGL 的实操教程，请参阅[使用深度图表库学习图形神经网络](https://www.amazon.science/videos-webinars/learning-graph-neural-networks-with-deep-graph-library)。

## 训练图形神经网络
<a name="machine-learning-gnn-training"></a>

在机器学习中，让模型学习如何对任务做出正确预测的过程称为模型训练。这通常是通过指定要优化的特定目标以及用于执行此优化的算法来实现的。

此过程用于训练 GNN，以学习下游任务的良好表示形式。我们为该任务创建了一个目标函数，该函数在模型训练期间最小化。例如，对于节点分类，我们使用 [CrossEntropyLoss](https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html) 作为目标，这会惩罚错误的分类；对于节点回归，我们最小化 [MeanSquareError](https://pytorch.org/docs/stable/generated/torch.nn.MSELoss.html)。

目标通常是一个损失函数，它获取特定数据点的模型预测，并将其与该数据点的真实情况值进行比较。它返回损失值，该值显示模型的预测接近真实情况的程度。训练过程的目标是最大限度地减少损失，并确保模型预测接近真实情况。

深度学习中用于训练过程的优化算法通常是梯度下降的一种变体。在 Neptune ML 中，我们使用 [Adam](https://arxiv.org/pdf/1412.6980.pdf)，这是一种基于低阶矩的自适应估计值对随机目标函数进行基于一阶梯度的优化的算法。

虽然模型训练过程试图确保学习到的模型参数接近目标函数的最小值，但模型的整体性能还取决于模型的*超参数*，这些超参数是训练算法无法学习的模型设置。例如，学习到的节点表示形式的维度 `num-hidden` 是一个影响模型性能的超参数。因此，在机器学习中，通常会执行超参数优化 (HPO) 来选择合适的超参数。

Neptune ML 使用 SageMaker AI 超参数调整作业来启动多个具有不同超参数配置的模型训练实例，以尝试为一系列超参数设置找到最佳模型。请参阅[在 Neptune ML 中自定义模型超参数配置](machine-learning-customizing-hyperparams.md)。

## Neptune ML 中的知识图谱嵌入模型
<a name="machine-learning-kg-embedding"></a>

知识图谱 (KG) 是对有关不同实体（节点）及其关系（边缘）的信息进行编码的图形。在 Neptune ML 中，当图形不包含节点属性，而仅包含与其它节点的关系时，默认应用知识图谱嵌入模型来执行链接预测。尽管通过将模型类型指定为 `"rgcn"`，也可以将具有可学习的嵌入内容的 R-GCN 模型用于这些图形，但知识图谱嵌入模型更简单，旨在有效地学习大规模知识图谱的表示形式。

知识图谱嵌入模型用于链接预测任务中，以预测完成三元组 `(h, r, t)` 的节点或关系，其中 `h` 是源节点，`r` 是关系类型，`t` 是目标节点。

在 Neptune ML 中实现的知识图谱嵌入模型是 `distmult`、`transE` 和 `rotatE`。要了解有关知识图谱嵌入模型的更多信息，请参阅 [DGL-KE](https://github.com/awslabs/dgl-ke)。

## 在 Neptune ML 中训练自定义模型
<a name="machine-learning-training-custom-models"></a>

Neptune ML 可让您针对特定场景定义和实现自己的自定义模型。有关如何实现自定义模型以及如何使用 Neptune ML 基础设施对其进行训练的信息，请参阅[Neptune ML 中的自定义模型](machine-learning-custom-models.md)。