

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

# 模型训练最佳实践
<a name="machine-learning-improve-model-performance"></a>

您可以采取一些措施来提高 Neptune ML 模型的性能。

## 选择正确的节点属性
<a name="machine-learning-before-exporting-data-choose-property"></a>

并非图形中的所有属性都可能有意义或与您的机器学习任务相关。在数据导出过程中，应排除任何不相关的属性。

以下是一些最佳实践：
+ 借助领域专家来帮助评估特征的重要性以及使用它们进行预测的可行性。
+ 移除您确定为冗余或不相关的特征，以减少数据中的噪音和不重要的相关性。
+ 在构建模型时进行迭代。随心所欲地调整特征、特征组合和调整目标。

《Amazon 机器学习开发人员指南》中的[特征处理](https://docs.amazonaws.cn/machine-learning/latest/dg/feature-processing.html)提供了与 Neptune ML 相关的其它特征处理指南。

## 处理异常值数据点
<a name="machine-learning-before-exporting-data-outliers"></a>

异常值是指与其余数据明显不同的数据点。数据异常值可能会破坏或误导训练过程，从而导致训练时间延长或模型精度降低。除非异常值确实很重要，否则应在导出数据之前消除异常值。

## 移除重复的节点和边缘
<a name="machine-learning-before-exporting-data-remove-duplicates"></a>

存储在 Neptune 中的图形可能有重复的节点或边缘。这些冗余元素将为 ML 模型训练引入噪声。在导出数据之前，请消除重复的节点或边缘。

## 调整图形结构
<a name="machine-learning-before-exporting-data-tune-graph"></a>

导出图形时，您可以更改处理特征的方式和构造图形的方式，以提高模型性能。

以下是一些最佳实践：
+ 当边缘属性具有边缘类别的含义时，在某些情况下值得将其转换为边缘类型。
+ 用于数值属性的默认规范化策略是 `min-max`，但在某些情况下，其它规范化策略效果更好。您可以预处理该属性并更改规范化策略，如[`model-HPO-configuration.json` 文件的元素](machine-learning-customizing-hyperparams.md#machine-learning-hyperparams-file-elements)中所述。
+ 导出过程会根据属性类型自动生成特征类型。例如，它将 `String` 属性视为类别特征，并将 `Float` 和 `Int` 属性视为数值特征。如果需要，可以在导出后修改特征类型（请参阅[`model-HPO-configuration.json` 文件的元素](machine-learning-customizing-hyperparams.md#machine-learning-hyperparams-file-elements)）。

## 调整超参数范围和默认值
<a name="machine-learning-before-exporting-data-change-hpo"></a>

数据处理操作从图形中推理超参数配置范围。如果生成的模型超参数范围和默认值不很适用于您的图形数据，则可以编辑 HPO 配置文件以创建自己的超参数调整策略。

以下是一些最佳实践：
+ 当图形变大时，默认的隐藏维度大小可能不足以包含所有信息。您可以更改 `num-hidden` 超参数来控制隐藏的维度大小。
+ 对于知识图谱嵌入 (KGE) 模型，您可能需要根据图形结构和预算更改正在使用的特定模型。

  `TrainsE` 模型难以处理一对多 (1-N)、多对一 (N-1) 和多对多 (N-N) 关系。`DistMult` 模型难以处理对称关系。`RotatE` 擅长对各种关系进行建模，但在训练期间比 `TrainsE` 和 `DistMult` 更昂贵。
+ 在某些情况下，当节点标识和节点特征信息都很重要时，您应该使用 ``concat-node-embed`` 告诉 Neptune ML 模型，通过将节点的特征与其初始嵌入项串联来获得节点的初始表示形式。
+ 当您在某些超参数上获得相当不错的性能时，您可以根据这些结果调整超参数搜索空间。

## 在 Neptune ML 中提前停止模型训练过程
<a name="machine-learning-model-training-early-stop"></a>

提前停止可以在不降低模型性能的情况下，显著减少模型训练的运行时间和关联成本。它还可以防止模型对训练数据进行过度拟合。

提前停止取决于对验证集性能的定期测量。最初，性能会随着训练进行而提高，但是当模型开始过度拟合时，它再次开始下降。提前停止特征可识别模型开始过度拟合的点并在该点停止模型训练。

Neptune ML 监控验证指标调用，并将最新的验证指标与上次 **`n`** 评估中验证指标的平均值进行比较，其中 **`n`** 是使用 `window-for-early-stop` 参数设置的数字。一旦验证指标比该平均值差，Neptune ML 就会停止模型训练并保存迄今为止最好的模型。

您可以使用以下参数控制提前停止：
+ **`window-for-early-stop`** – 此参数的值是一个整数，用于指定在决定提前停止时要求取平均值的最近验证分数的数量。默认值为 `3`。
+ **`enable-early-stop`** – 使用此布尔参数可关闭提前停止特征。默认情况下，其值为 `true`。

## 在 Neptune ML 中提前停止 HPO 过程
<a name="machine-learning-HPO-early-stop"></a>

Neptune ML 中的提前停止特征还可以使用 SageMaker AI HPO 热启动特征停止与其它训练作业相比性能不佳的训练。这也可以降低成本并提高 HPO 的质量。

有关其工作原理的描述，请参阅[运行热启动超参数调整任务](https://docs.amazonaws.cn/sagemaker/latest/dg/automatic-model-tuning-warm-start.html)。

热启动提供了将从以前的训练工作中学习到的信息传递给后续训练任务的能力，并具有两个明显的好处：
+ 首先，使用先前训练任务的结果来选择超参数的良好组合，以在新的调整任务中进行搜索。
+ 其次，它允许提前停止以访问更多的模型运行，从而缩短调整时间。

此特征在 Neptune ML 中自动启用，允许您在模型训练时间和性能之间取得平衡。如果您对当前模型的性能感到满意，则可以使用该模型。否则，您会运行更多的 HPO，这些 HPO 使用先前运行的结果进行热启动，以便发现更好的模型。

## 获取专业支持服务
<a name="machine-learning-before-exporting-data-get-support"></a>

Amazon 提供专业支持服务，以帮助您解决在 Neptune 项目上进行机器学习时遇到的问题。如果您遇到困难，请联系 [Amazon Support](https://www.amazonaws.cn/premiumsupport/)。