

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

# 了解 Amazon SageMaker AI 中可用的超參數調校策略
<a name="automatic-model-tuning-how-it-works"></a>

當您建構複雜的機器學習系統 (如深度學習神經網路) 時，想要探索所有可能的組合是不切實際的。超參數調校可以透過嘗試模型的多種變化來加速生產力。此功能會將重點擺在指定範圍內最出色的超參數值組合，以自動尋找最佳模型。若要取得良好的結果，必須選擇正確的範圍來探索。此頁面簡短說明您可以與 Amazon SageMaker AI 搭配使用的不同超參數調校策略。

使用 [API 參考指南](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html?icmpid=docs_sagemaker_lp)了解如何與超參數調校互動。您可以將此頁面上所述的調校策略搭配 [HyperParameterTuningJobConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperParameterTuningJobConfig.html) 和 [HyperbandStrategyConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HyperbandStrategyConfig.html) API 使用。

**注意**  
由於演算法本身是隨機的，因此超參數調校模型仍無法匯集最佳的答案。即使在您選擇的範圍內或許是最佳的值組合，也可能發生這種情況。

## 網格搜尋
<a name="automatic-tuning-grid-search"></a>

 使用網格搜尋時，超參數調校會從建立任務時指定的分類值範圍中選擇值的組合。使用網格搜尋策略時，系統僅支援分類參數。您不需要指定 `MaxNumberOfTrainingJobs`。調校任務所建立的訓練任務數會自動計算為可能的不同類別組合之總數。如果指定，`MaxNumberOfTrainingJobs` 的值應等於可能的不同分類組合的總數。

## 隨機搜尋
<a name="automatic-tuning-random-search"></a>

使用隨機搜尋時，超參數調校會在您為每個其啟動之訓練任務指定的範圍中，選擇超參數值的隨機組合。超參數值的選擇不取決於先前訓練任務的結果。因此，您可以執行最大數量的並行訓練任務，而無需變更調校的效能。

如需使用隨機搜尋的範例筆記本，請參閱 [SageMaker XGBoost 和自動模型調整筆記本的隨機搜尋與超參數擴展](https://github.com/aws/amazon-sagemaker-examples-community/blob/215215eb25b40eadaf126d055dbb718a245d7603/training/sagemaker-automatic-model-tuning/hpo_xgboost_random_log.ipynb)。

## 貝葉斯最佳化
<a name="automatic-tuning-bayesian-optimization"></a>

貝葉斯最佳化會將超參數調校視為*[迴歸](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#[regression])*問題。只要提供一組輸入功能 (超參數)，超參數調校即可針對您選擇的指標來最佳化模型。為了解決迴歸問題，超參數調校會猜測哪些超參數組合可能獲得最佳結果。然後，它會執行訓練任務來測試這些值。在測試一組超參數值之後，超參數調校會使用迴歸來選擇要測試的下一組超參數值。

超參數調校會使用貝葉斯最佳化的 Amazon SageMaker AI 實作。

在選擇下一個訓練任務的最佳超參數時，超參數調校會將目前針對這個問題所知的一切納入考慮。有時候選擇與先前最佳訓練任務組合相近的超參數值組合，來逐漸改善效能。這可讓超參數調校使用最佳的已知結果。有時候，它也會選擇一組已嘗試過但早已移除的超參數值。這可讓超參數調校探索超參數值的範圍，嘗試找到尚未充分了解的新區域。探索/開採取捨在許多機器學習問題中相當常見。

如需貝葉斯最佳化的詳細資訊，請參閱以下項目：

**有關貝葉斯最佳化的基本主題**
+ [A Tutorial on Bayesian Optimization of Expensive Cost Functions, with Application to Active User Modeling and Hierarchical Reinforcement Learning](https://arxiv.org/abs/1012.2599)
+ [Practical Bayesian Optimization of Machine Learning Algorithms](https://arxiv.org/abs/1206.2944)
+ [Taking the Human Out of the Loop: A Review of Bayesian Optimization](https://ieeexplore.ieee.org/document/7352306?reload=true)

**加快貝葉斯最佳化的速度**
+ [Google Vizier：黑箱最佳化的服務](https://dl.acm.org/doi/10.1145/3097983.3098043)
+ [使用貝葉斯神經網路來進行學習曲線預測](https://openreview.net/forum?id=S11KBYclx)
+ [透過推斷學習曲線來加快深度神經網路的超參數自動最佳化速度](https://dl.acm.org/doi/10.5555/2832581.2832731)

**進階模型建立和轉移學習**
+ [可擴展的超參數轉移學習](https://papers.nips.cc/paper_files/paper/2018/hash/14c879f3f5d8ed93a09f6090d77c2cc3-Abstract.html)
+ [使用樹狀結構相依性進行貝葉斯最佳化](http://proceedings.mlr.press/v70/jenatton17a.html)
+ [使用強大的貝葉斯神經網路來進行貝葉斯最佳化](https://papers.nips.cc/paper_files/paper/2016/hash/291597a100aadd814d197af4f4bab3a7-Abstract.html)
+ [使用深度神經網路進行可擴展的貝葉斯最佳化](http://proceedings.mlr.press/v37/snoek15.pdf)
+ [為非平穩函式的貝葉斯最佳化輸入扭曲](https://arxiv.org/abs/1402.0929)

## Hyperband
<a name="automatic-tuning-hyperband"></a>

Hyperband 是一種以多擬真度為基礎的調校策略，可動態地重新配置資源。Hyperband 會同時使用訓練任務的中間和最終結果，將 epoch 重新分配給充分利用的超參數組態，並自動停止執行不佳的設定。它還可以無縫擴展到使用許多平行訓練任務。這些功能可顯著加快隨機搜尋和貝葉斯最佳化策略的超參數調校。

Hyperband 只能用來調校在不同資源層級發布結果的反覆式演算法。例如，Hyperband 可用於調校圖像分類的神經網路，該類神經網路會在每個 epoch 之後發布準確度指標。

如需 Hyperband 最佳實務的詳細資訊，請參閱下列連結：
+ [Hyperband：創新的老虎機型方法來進行超參數最佳化](http://arxiv.org/pdf/1603.06560)
+ [大規模平行超參數調校](https://liamcli.com/assets/pdf/asha_arxiv.pdf)
+ [BOHB：強大且高效的大規模超參數最佳化](http://proceedings.mlr.press/v80/falkner18a/falkner18a.pdf)
+ [基於模型的非同步超參數和神經架構搜尋](https://openreview.net/pdf?id=a2rFihIU7i)

### 提早停止的 Hyperband
<a name="automatic-tuning-hyperband-early-stopping"></a>

當訓練任務不太可能改善超參數調校任務的最佳目標指標時，提早停止可停止訓練任務。這有助於減少運算時間並避免模型過度擬合。Hyperband 會使用先進的內部機制來套用提早停止。在使用 Hyperband 內部提早停止功能時，必須將 `HyperParameterTuningJobConfig` API 中的 `TrainingJobEarlyStoppingType` 設為 `OFF`。

**注意**  
超參數調校可能不會改善模型。它是建置機器解決方案的進階版工具。因此，這應視為科學發展過程的一部分。