

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 提前停止訓練任務
<a name="automatic-model-tuning-early-stopping"></a>

依據目標指標所測，當超參數調校任務啟動的訓練任務未有大幅改善時，即可提早停止該任務。提前停止訓練任務有助於降低運算時間，並可協助您避免過度擬合模型。若要設定超參數調校任務以提前停止訓練任務，請執行下列其中一項操作：
+ 如果您使用的是適用於 Python 的 AWS SDK (Boto3)，請將您用來設定調校任務的 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html) 物件`TrainingJobEarlyStoppingType`欄位設定為 `AUTO`。
+ 如果您使用的是 [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable)，請將 [HyperParameterTuner](https://sagemaker.readthedocs.io/en/stable/tuner.html) 物件的 `early_stopping_type` 參數設為 `Auto`。
+ 在 Amazon SageMaker AI 主控台的**建立超參數調校任務**工作流程中，於**提前停止**下，選擇**自動**。

如需示範如何使用提早停止的範例筆記本，請參閱 [https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter\$1tuning/image\$1classification\$1early\$1stopping/hpo\$1image\$1classification\$1early\$1stopping.ipynb](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_early_stopping/hpo_image_classification_early_stopping.ipynb) 或在筆記本執行個體中 **SageMaker AI 範例**的**超參數調校**區段中開啟 `hpo_image_classification_early_stopping.ipynb` 筆記本。

## 提早停止的運作方式
<a name="automatic-tuning-early-stop-how"></a>

當您為超參數調校任務啟用提早停止時，SageMaker AI 會評估超參數調校任務啟動的每個訓練任務，如下所示：
+ 在每個 epoch 的訓練之後，取得目標指標的值。
+ 計算所有先前訓練任務 (直到相同 epoch) 目標指標的執行中平均值，然後計算所有執行中平均值的中間值。
+ 相較於先前訓練任務 (直到相同 epoch) 目標指標之執行中平均值的中間值，如果目前訓練任務的目標指標值較差 (最小化目標指標時反而更高，或最大化目標指標時反而更低)，則 SageMaker AI 會停止目前的訓練任務。

## 支援提早停止的演算法
<a name="automatic-tuning-early-stopping-algos"></a>

為了支援提早停止，演算法必須為每個 epoch 發出目標指標。以下內建的 SageMaker AI 演算法支援提早停止：
+ [LightGBM](lightgbm.md)
+ [CatBoost](catboost.md)
+ [AutoGluon - 自列表格](autogluon-tabular.md)
+ [TabTransformer](tabtransformer.md)
+ [線性學習程式演算法](linear-learner.md) — 僅有當您使用 `objective_loss` 作為目標指標時支援。
+ [XGBoost 演算法搭配 Amazon SageMaker AI](xgboost.md)
+ [影像分類 - MXNet](image-classification.md)
+ [物件偵測 - MXNet](object-detection.md)
+ [序列對序列演算法](seq-2-seq.md)
+ [IP Insights](ip-insights.md)

**注意**  
這份目前支援提早停止的內建演算法清單是 2018 年 12 月 13 日的最新版本。其他內建的演算法將來可能會支援提早停止。如果演算法發出的指標可以做為超參數調校任務的目標指標 (最好是驗證指標)，則該演算法支援提早停止。

若要搭配使用您自己的演算法與提早停止，您必須撰寫演算法，讓它為每個 epoch 發出目標指標值。以下清單說明在不同的架構中您可如何執行上述作業：

TensorFlow  
使用 `tf.keras.callbacks.ProgbarLogger` 類別。如需相關資訊，請參閱 [tf.keras.callbacks.ProgbarLogger API](https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/ProgbarLogger)。

MXNet  
使用 `mxnet.callback.LogValidationMetricsCallback`。如需相關資訊，請參閱 [mxnet.callback API](https://mxnet.apache.org/versions/master/api/python/docs/api/legacy/callback/index.html)。

Chainer  
使用 `extensions.Evaluator` 類別擴充 chainer。如需相關資訊，請參閱 [chainer.training.extensions.Evaluator API](https://docs.chainer.org/en/v1.24.0/reference/extensions.html#evaluator)。

PyTorch 和 Spark  
不提供任何高階的支援。您必須明確撰寫您的訓練程式碼，以便在每個 epoch 之後，計算目標指標並將其寫入日誌。