新專案入門指南

本節說明如何在機器學習專案開始時選擇下列項目:

  • 編碼器-解碼器架構
  • 最佳化器
  • 批量
  • 初始設定

假設

本節的建議假設:

  • 您已擬定問題架構,並已大致準備訓練資料。
  • 您已設定訓練和測試管道。
  • 您已選取並實作最能代表已部署環境中要評估的指標。

假設您已達成上述所有先決條件,您現在可以決定投入模型架構和訓練設定的時間。

選取模型架構

讓我們從下列定義開始:

  • 模型架構是用來產生預測的「系統」。模型架構包含可將輸入資料轉換為預測的架構,但不含「參數」值。舉例來說,類神經網路分別有 10 個節點、5 個節點和 3 個節點的三個隱藏層,就是模型架構。
  • model是指模型架構,以及所有參數的特定值。例如,模型包含模型架構定義中說明的類神經網路,以及每個節點的特定權重和偏誤值。
  • 模型系列是一種範本,可用來根據一組超參數建構模型架構。

選擇模型架構實際上是指選擇一組不同的模型 (每個模型超參數設定各一個)。

如果可以的話,請試著找出記載的程式碼集,盡可能解決目前問題。再以這個模型做為起點

選擇最佳化器

在所有類型的機器學習問題和模型架構中,沒有任何最佳化器是「最佳」!即使只比較最佳化器的效能也很困難。🤖? 我們建議您使用公認廣受歡迎的最佳化器,特別是在建立新專案時。

建議您根據正在處理的問題類型選擇最常用的最佳化器。建議使用下列公認的最佳化器:

注意所選擇最佳化器的「所有」引數。使用超參數的最佳化器通常需要更多微調設定。當您嘗試在專案初期找出其他超參數 (例如學習率) 的最佳值,同時將最佳化器引數視為錯別字時,這點尤其重要。因此,建議您採取下列做法:

  1. 在專案開始時,選擇不含任何可調整超參數的最佳化器。以下提供兩個示例:
    • 固定動量的新加坡幣。
    • Adam 搭配固定的 Epsilon、Beta1 和 Beta2。
  2. 在專案的後續階段,請改用較通用的最佳化器,以便調整更多超參數,而非將參數修正為預設值。

選擇批量

摘要:批次大小會影響訓練速度;請勿使用批量來直接調整驗證集效能。

批次大小嚴重決定了訓練時間和運算資源消耗。增加批次大小通常會縮短訓練時間,進而達到以下效果:

  • 可讓您在固定時間間隔內更徹底地調整超參數,這有助於產生更佳的最終模型。
  • 縮短開發週期的延遲時間,更頻繁地測試新構想。

增加批次大小可能會減少或增加資源消耗,資源用量則維持不變。

請勿將批次大小視為驗證集效能的可調整超參數。如果符合下列所有條件,模型效能就不應取決於批次大小:

  • 所有的最佳化器超參數都已經過妥善調整。
  • 正規化必須已足夠且經過精心調整。
  • 訓練步數就已足夠。

使用任何批次大小,都應實現相同的最終效能 (請參閱 Shallue 等人 2018 年為何不應為了直接改善驗證集效能而調整批次大小?)。

判斷可用的批次大小並預估訓練處理量

在特定模型和最佳化器中,可用的硬體通常支援多種批次大小。限制因素通常是加速器記憶體不幸的是,如果不執行或至少編譯完整訓練程式,就無法計算記憶體大小。最簡單的解決方案通常是以不同的批次大小執行訓練工作 (例如增加 2 次的力量),直到其中一個工作超過可用記憶體為止。請對每個批次大小的訓練時間夠長,以獲得可靠的預估訓練處理量預估值:

訓練處理量 = 每秒處理的樣本數

或相等的「每個步驟時間」:

每個步驟的時間 = 批次大小 / 訓練處理量

如果加速器未達飽和,如果批量為兩倍,訓練處理量也應加倍 (或至少將近兩倍)。同樣地,每個步驟的時間應在批次大小增加時保持不變 (或至少幾乎不變)。如果情況不同,則訓練管道會出現瓶頸,例如 I/O 或運算節點之間的同步處理。建議您先診斷並修正瓶頸,再繼續操作。

如果訓練處理量只會增加到某個最大批次大小,則即使硬體支援較大的批量,也只考慮達到該最大批次大小的批次大小。使用較大批次大小的所有好處,都是訓練處理量增加。如未如此,請修正瓶頸或使用較小的批量。

梯度累積模擬功能模擬的批次大小超過硬體可支援,因此不會提供任何處理量優勢。一般而言,您應避免套用工作中的梯度累積功能。

每次變更模型或最佳化器時,您可能需要重複執行這些步驟。舉例來說,不同的模型架構可能會允許更大的批量,在記憶體中容納。

選擇批量大小,盡量縮短訓練時間

訓練時間的定義如下:

  • 訓練時間 = (每個步驟的時間) x (總步數)

您通常可以將每個步驟的時間視為所有可行批次大小的大約常數。下列情況發生時:

  • 平行運算不會產生任何負擔。
  • 所有訓練瓶頸均已經過診斷並修正。(請參閱上一節瞭解如何找出訓練瓶頸。)實際上,增加批次大小通常至少會產生一些負擔。

隨著批次大小增加,達成固定成效目標所需的步驟總數通常會減少,前提是您必須在變更批次大小時重新調整所有相關超參數。(請參閱 Shallue 等人,2018 年。)舉例來說,如果將批次大小增加一倍,所需的步驟總數可能會減半。這個關係稱為「完美資源調度」,且應保留到重要批次大小的所有批次大小。

除了關鍵批量之外,增加批次大小也會讓報酬率下降。換句話說,增加批次大小最終不再減少訓練步數,也不會增加訓練步數。因此,能縮短訓練時間的批次大小通常是「最大」批次,仍會減少所需的訓練步驟數量。這個批次大小取決於資料集、模型和最佳化器,因此在計算時,除了測試測試每個新問題之外,這是個開放式的問題。🤖

比較批次大小時,請注意下列事項:

  • 「範例預算」或「訓練週期預算」:執行所有實驗,同時修正訓練範例簡報的數量。
  • 步數預算:以固定的訓練步驟執行所有實驗。

以訓練週期預算比較批次大小時,系統只會偵測最佳資源調度製度,即使較大的批次大小仍能減少所需的訓練步數,也能提供良好的速度。通常可用硬體支援的最大批量小於關鍵批量。因此 (不執行任何實驗) 原則上,請盡可能使用最大批量。如果最終會增加訓練時間,並不會使用較大的批量。

選擇批次大小,盡量減少資源用量

與增加批次大小相關的資源費用有以下兩種:

  • 預繳費用。例如,購買新硬體或重新編寫訓練管線以實作多 GPU / 多 TPU 訓練。
  • 使用費用。例如,根據團隊的資源預算、雲端服務供應商計費、電力 / 維護費用等項目計費。

如果您必須預先支付大量費用來增加批次大小,最好延遲增加批次大小,直到專案成熟為止,也更容易評估成本效益的取捨。實作多主機平行訓練計畫可能會產生bugs細微問題,因此最好還是先使用較簡單的管道著手。另一方面,如果在程序初期需要進行大量調整實驗,則在訓練初期進行大幅加快的訓練時間可能會很有幫助。

資源用量的計算方式如下:總使用費 (可能包含多種不同費用),計算方式如下:

資源用量 = 每個步驟的資源用量 x 總步數

增加批次大小通常會減少步驟總數。資源用量的增加或減少取決於每個步驟的使用量變化,而每個步驟的使用量取決於批次大小,如下所示:

  • 而增加批次大小可能會減少資源用量。舉例來說,如果具有較大批次大小的每個步驟都能在與較小的批次大小相同的硬體上執行 (每個步驟的時間只有小幅),則每個步驟增加的資源耗用量都可能會比步數減少。
  • 因此增加批次大小可能「不會改變」資源用量。 舉例來說,如果批次大小增加了一倍,所需步驟數加倍,且使用的 GPU 數量加倍,總用量 (以 GPU 時數為單位) 不會改變。
  • 增加批次大小可能會增加資源消耗量。舉例來說,如果增加批次大小需要升級的硬體,則每個步驟的使用量增加可能會超過步數的減少。

變更批次大小需要重新調整大部分的超參數

最超參數的最佳值則取決於批次大小。因此,變更批次大小通常需要再次啟動調整程序。這些超參數與批次大小最密切互動,因此對於每個批次大小個別調整是最重要的超參數,如下所示:

  • 最佳化工具超參數 (例如學習率和動量)
  • 正則化超參數

在專案開始時選擇批量時,請特別留意這點。 如果您日後需要切換到其他批次大小,則要針對新批次大小重新調整其他超參數可能既困難、也耗費時間和金錢。

批次規範與批次大小的互動方式

批次常態很複雜,一般來說,批次大小應與梯度計算使用不同的批次大小來計算統計資料。詳情請參閱批次正規化實作詳細資料

選擇初始設定

超參數調整的第一個階段是決定以下項目的起點:

  • 模型設定 (例如層數)
  • 最佳化器超參數 (例如學習率)
  • 訓練步數

確定這項初始設定需要一些手動設定的訓練執行作業,並嘗試反覆嘗試。

我們的指導原則如下:

尋找簡單、相對快速、相對較低的資源耗用設定,以取得「合理」效能。

其中:

  • 簡單意味著避免不必要的管道功能,例如特殊規則或架構秘訣。舉例來說,未捨棄正則化 (或停用捨棄正則化) 的管道比有捨棄正規化的管道更為簡單。
  • 「合理的」效能取決於問題,但合理訓練集的最低效能表現遠優於驗證集的隨機機會。

選擇快速的初始設定且使用最少的資源,可讓您更有效率地調整超參數。舉例來說,您可以先從較小的模型著手,

選擇訓練步驟數時,必須考量以下張力:

  • 訓練更多步驟可改善效能並簡化超參數調整。(詳情請參閱 Shallue 等人 2018 年)。
  • 反之,使用較少步驟進行訓練表示每項訓練的執行速度較快,且會使用較少的資源,透過縮短週期之間的時間間隔,以便您同時執行更多實驗,進而提升調整效率。除此之外,如果您在專案一開始就選擇了不必要的大量步驟預算,日後可能很難在專案中變更預算;例如,在您調整了該步驟的學習率時間表後,