新專案入門指南

本節說明如何在初始階段選擇以下項目 機器學習專案:

  • 模型架構
  • 最佳化工具
  • 批量
  • 初始設定
,瞭解如何調查及移除這項存取權。

假設

本節中的建議假設如下:

  • 您已經設計出問題。 和準備訓練資料
  • 您已設定訓練和測試管道。
  • 您已選取並導入代表性指標 。

假設您已符合所有必要條件,就可以開始 投入時間處理模型架構和訓練設定

選擇模型架構

讓我們先瞭解下列定義:

  • 模型架構是用來產生預測的系統。 模型架構包含轉換輸入資料的架構 但不會包含 parameter 值。例如: 一個包含 10 個節點、5 個節點和 3 個節點的三個隱藏層 是一種模型架構
  • 「模型」是模型架構,加上所有模型的特定值 參數。例如,模型包含 模型架構的定義,再加上 每個節點的權重和偏誤
  • 模型系列是建構模型架構的範本 一組超參數

選擇模型架構其實意味著選擇模型架構 模型 (模型超參數的各項設定各有一個)。

如果可以,請盡量找出已記錄下來的程式碼集 盡可能解決目前的問題然後根據模型 視為起點

選擇最佳化工具

沒有最佳化工具是他們的最佳選擇各種機器學習問題的類型 以及模型架構即使是比較最佳化工具的成效 難以執行的程序🤖?建議你使用信譽良好的熱門最佳化器 特別是在展開新專案時更是如此

對於這類問題,建議您選擇最常用的最佳化工具 找出專案所需的部分建議您使用下列功能完善的最佳化工具:

留意所選最佳化工具的所有引數。 使用超參數的最佳化器通常需要更多調整成本。 這在專案初期階段特別痛苦 想要找出其他超參數的最佳值 並同時將最佳化工具引數 製造麻煩。因此,建議您採取下列做法:

  1. 在專案開始時,挑選一個沒有可調整的最佳化工具 超參數我們來看看下面兩個範例:
    • 具有固定動量的新加坡幣。
    • Adam 搭配修正的 Epsilon、Beta1 和 Beta2。
  2. 在專案的後續階段中,您可以改用更通用的最佳化工具 此設定將調整更多超參數,而非將其修正為預設值。

選擇批量

摘要:批次大小決定訓練速度。請勿使用批次大小 直接調整驗證集的效能

批次大小會決定訓練時間和運算資源 提高用量上限增加批量通常會縮短訓練時間。 也就是:

  • 可在固定時間內更完善地調整超參數 可能會產生更好的最終模型
  • 縮短開發週期的延遲時間,實現新想法 提高測試頻率

增加批量可以減少或增加資源用量。 或是讓資源用量維持不變

請勿將批次大小視為驗證作業的驗證超參數 設定效能。如果所有 符合下列條件時,模型成效不應仰賴 批量:

  • 所有最佳化工具超參數都妥善調整。
  • 正規化功能已足夠且經過妥善調整。
  • 訓練步數足夠。

使用任何批量時,應可達到相同的最終效能 (請參閱 Shallue 等人,2018 年為什麼不應該直接微調批次大小 驗證集效能?)

判斷可行的批量及預估訓練處理量

對於指定的型號和最佳化工具,可用的硬體通常支援 提供多種批次大小限制因子通常是 加速器記憶體不過,我們很難計算出 批量值適用於沒有執行或至少編譯 完整的訓練計畫最簡單的解決方案通常是執行訓練工作 不同批量 (例如,提高 2 的次方) 所需步驟數量,直到其中一個工作超過可用記憶體為止。適用對象 因此訓練時間夠長 訓練處理量

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

或者,相當於每個步驟的時間

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

在加速器還沒有飽和時,如果批量加倍 訓練處理量也應為雙倍 (或至少將近兩倍)。 相同地,每個步驟的時間必須一致 (或至少將近 常數)。如果沒有, 訓練管道存在瓶頸,例如 I/O 或同步處理 運算節點之間建議你診斷並修正瓶頸 再繼續操作。

如果訓練處理量只會增加至某種最大批量 只要批次大小不超過該批量 硬體支援更大的批量 使用較大的批量的好處是假設訓練處理量 增加。如果未達到,請修正瓶頸,或使用較小的批量。

梯度累計功能會模擬比硬體能模擬到更大的批量 支援,因此不提供任何處理量優勢。請 一般而言,可避免應用工作中的梯度累計。

每次變更模式或 最佳化器舉例來說,其他的模型架構 才能配合記憶體

選擇批量,盡可能縮短訓練時間

以下是訓練時間的定義:

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

您通常可將每一步的時間視為約略值 適用於所有可行的批量適用情況如下:

  • 平行運算不會負擔任何負擔。
  • 所有訓練瓶頸都已診斷並修正完畢。 (請參閱上一節,瞭解如何找出 訓練的瓶頸實務上,通常至少 會減少批次大小的工作負擔

隨著批量增加, 固定成效目標通常會降低,直到您重新調整所有設定為止 並變更批次大小(詳情請參閱 Shallue 等人,2018 年)。 舉例來說,如果批次大小增加一倍, 所需步驟這就是所謂的「完美資源調度」關係, 至於必須處理的各個批量,則不超過重要批量。

除了重要的批量之外,增加批次大小會產生 進而減少報酬率也就是最終增加批量 因此訓練步數不會增加,但永遠不會增加。 因此,能縮短訓練時間的批次大小通常是 最大批量,但仍能減少訓練步數 這通常代表交易 不會十分要求關聯語意這個批量取決於資料集、模型 不過,除瞭如何計算指標外 而能找出每個新問題。🤖

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

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

以訓練週期預算比較批量,並找出最佳成效 向上擴充機制 可以減少必要的訓練步數,提升執行效率。 通常是可用硬體支援的最大批量 小於重要批量所以 原則上,只要不執行任何實驗 如果 Pod 大小結束時 就不會採用較大的批量 進而增加訓練時間

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

與增加批量有關的資源成本有兩種類型:

  • 預付費用。例如購買新硬體或重寫 導入多 GPU / 多 TPU 訓練
  • 使用費用。例如依據團隊資源預算計費 帳單、電力 / 維護成本。

如果增加批次大小的前期成本相當高 最好在專案前 且較容易評估成本效益。 實施多主機平行訓練計畫可能會帶來 錯誤輕微問題 所以最好先從 以獲得最佳成效另一方面,訓練時間越長 所以如果經過大量微調

我們會涵蓋總使用費 (其中可能包括 成本),計算方式如下:

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

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

  • 增加批次大小可能會減少資源用量。 舉例來說,如果批量較大的每個步驟都能執行 在與小型批量相同的硬體上 ( 增加的時間),則該資源會隨資源增加 每個步驟的使用量 可能大於 步數
  • 增加批量可能不會改變資源用量。 舉例來說,如果將批量計算成一倍 且所用 GPU 數量和總使用量 例如 GPU 時數。
  • 增加批量可能會增加資源用量。 舉例來說,如果增加批量需要升級硬體 每個步驟的使用量增加 可能大於 步數

如要變更批量,必須重新調整大部分的超參數

大部分超參數的最佳值對批次大小十分敏感。 因此,變更批次大小通常需要開始調整 因此應用程式會再次進行處理最能互動的超參數 因此最重要的是個別調整 如下所示:

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

請注意,在專案開始時選擇批量時,請特別留意。 如果您之後需要改用其他批量, 需要耗費大量時間且成本 成本高昂來重新調整其他超參數 新的批次大小

批次常態與批次大小的互動方式

批次常態相當複雜,一般來說應使用不同的批次 計算統計值。詳情請見 批次正規化實作 詳細資料

選擇初始設定

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

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

您必須手動決定這項初始設定, 執行訓練和試驗

我們的指導原則如下:

尋找簡單、相對快速、資源消耗量較低的項目 以取得合理的效能設定。

其中:

  • 簡單意味著避免使用不必要的管道功能,例如特殊的 經常性或架構技巧舉例來說 丟棄 正則化 (或停用捨棄正規化功能) 比 丟去正則化
  • 是否可達到成效取決於問題,但至少要 合理訓練模型的執行成效遠優於隨機機率 驗證集

選擇快速且耗用最少的初始設定 讓超參數調整作業更有效率 比方說,先從較小的模型開始。

選擇訓練步數時,必須平衡下列張力:

  • 訓練次數越多,越能提升效能並簡化超參數 調整模型(詳情請參閱 Shallue 等人,2018 年)。
  • 相反地,訓練的步數較少則代表每次訓練的執行作業 並減少資源用量,藉由減少 方便您同時進行更多實驗。 此外,如果您在一開始時選擇了不必要的步數預算 之後可能難以在專案中進行變更例如 選擇好學習率時間表後