訓練工作負載分為兩種:
- 取決於運算能力
- 並非受運算限制
受運算限制的訓練取決於訓練時間,而非訓練資料量或其他因素。換句話說,「最佳」訓練時間一律是「盡可能長的時間」。如果訓練時間較長或效率較高,訓練損失應該會減少。(經過適當調整後,驗證損失也應會下降)。
加快運算量大的訓練作業,等同於提升訓練成效。不過,即使工作負載受運算資源限制,也不代表只有延長或加快訓練時間,才能提升結果。
如果訓練不受運算資源限制,您可以盡情訓練。不過,延長模型訓練時間可能不會有太大幫助,甚至可能導致過度配適。訓練並非受運算資源限制時:
- 您可以訓練到訓練損失非常低,額外訓練可能會稍微降低訓練損失,但不會顯著降低驗證損失。
- 您可以更輕鬆地調整,尤其是調整學習率衰減時間表時,因為這類時間表與訓練預算有特別強烈的互動。相較之下,在受運算限制的訓練中取得低訓練損失,可能需要經過完美調整的學習率衰減時間表。
無論特定工作負載是否受運算限制,增加梯度變異數 (跨批次) 的方法通常會減緩訓練進度,因此可能會增加達到特定驗證損失所需的訓練步驟數。下列任一情況都可能導致梯度差異過大:
- 使用較小的批次大小。
- 新增資料擴增。
- 新增某些類型的正規化 (例如 Dropout 正規化)。
決定訓練時間長度 (訓練並非受運算限制)
目標:訓練時間要夠長,讓模型達到最佳結果,但不要浪費訓練步驟。
主要目標是確保訓練時間足夠,讓模型達到最佳結果,同時避免浪費不必要的訓練步驟。如有疑問,請盡量延長訓練時間。假設您正確使用回溯檢查點選取功能,並經常檢查點,那麼訓練時間越長,評估指標 (例如精確度、召回率、AUC 或 F1) 就越不會降低。
請勿在研究中調整 max_train_steps
數字。請改為選取一個值,並將該值用於所有試驗。從這些試驗中,繪製回溯檢查點選取項目找到的訓練步驟,藉此修正 max_train_steps
的選擇。
舉例來說,如果最佳步數一律出現在訓練的前 10%,則最大步數過高。或者,如果最佳步驟持續出現在訓練的最後 25%,您或許可以延長訓練時間,並重新調整衰減時間表。架構或資料變更時 (例如新增資料擴增),理想的訓練步驟數可能會隨之變更。下一節將說明如何根據「完美符合」訓練集所需的步驟數,為 max_train_steps
挑選初始候選值,並使用恆定學習率。
如果訓練程序有所改善 (例如使用經過微調的最佳化工具或學習速率時間表),max_train_steps
可能會降低。
使用學習率掃描,為 max_train_steps 挑選初始候選項的演算法
您可以透過學習率掃描演算法,為 max_train_steps
挑選初始候選項目。下列演算法假設不僅可以「完美」擬合訓練集,還能使用常數學習率排程執行此操作。
- 如果可以完美配合整個訓練集,則必須存在一個完美配合訓練集的設定 (具有某個
max_train_steps
值)。找出這類設定,並使用max_train_steps
的值做為起點N
。 - 執行恆定學習率掃描 (也就是對學習率進行格狀搜尋),且不使用資料擴增和正規化,其中每次試驗的訓練步數為
N
。在學習率掃描中,達到完美訓練效能所需的最快試驗步驟數,應是max_train_steps
的初始猜測值。
注意:不當的搜尋空間可能會導致自我欺騙。舉例來說,如果研究中的所有學習率都太小,您可能會誤以為 max_train_steps
的值必須非常大。至少要確認研究中的最佳學習率並非位於搜尋空間的邊界。
在訓練受運算資源限制時,決定訓練時間長度
在某些情況下,訓練損失會持續改善,因此耐心和運算資源會成為限制因素。但訓練時間越長越好嗎?不一定。請把握以下幾項重點:
- 您可以執行更多較短的實驗,並保留最長的「正式版長度」執行時間,供您希望推出的模型使用,藉此更有效地調整模型。
- 隨著試用版訓練時間接近耐心極限,調整實驗對潛在發布候選版本就越重要,但您能完成的實驗數量會減少。
- 您可能只需要訓練約 10% 的製作長度,就能回答許多問題。不過,此時的結論可能不適用於 20% 的製作長度實驗,更別說是 100% 的實驗。
在多個回合中進行微調,並逐步增加每次試驗的訓練步驟限制,是明智的做法。您可以視需要執行多輪,但通常 1 到 3 輪最實用。基本上,請盡可能透過快速完成的試驗,深入瞭解問題,並在下列項目之間取捨:
- 調整周詳程度。
- 與最終最長跑步訓練的關聯性。
一旦達到試用時間上限,且已產生實用洞察資料,請增加訓練時間並繼續調整,視需要仔細檢查較短時間的訓練結果。建議您先進行兩輪調整:
- 第 1 輪:執行時間較短,找出合適的模型和最佳化工具超參數。
- 第 2 輪:在良好的超參數點上執行極少數的長時間執行,以取得最終模型。
從第 1 輪到第 2 輪,最大的問題是:
如何調整學習率衰減時間表。
在回合之間調整學習率時間表時,常見的陷阱是使用所有額外的訓練步驟,但學習率過小。
第 1 輪:多次短程訓練
很遺憾,我們無法保證在短時間內找到的合適超參數,在訓練時間大幅增加後仍適用。不過,對於某些超參數,好的選擇通常足夠相關,因此第 1 輪很有用。在較短的執行時間內找到的超參數值,是否能成功轉移至較長的訓練執行時間?我們不知道,需要更多研究。 但根據我們目前所知,以下是我們懷疑的轉移方式,機率由高到低排列:
- 極有可能轉移。在第一輪微調中,使用較少的訓練步驟,即可解決早期訓練不穩定的問題。最有可能轉移的超參數如下:
- 暖身時間長度
- 初始化
- 可能會轉移。模型架構的重大突破通常會轉移,但很可能出現許多反例。
- 可能會轉移。下列超參數可能會轉移:
- 最佳化演算法和超參數會「鬆散」轉移。
- 資料擴增。
- 正則化。如果無法完美符合訓練集,模型可能處於正規化不太有幫助的狀態。
- 不太可能轉移。學習率排程不太可能完美轉移。訓練運算最佳化大型語言模型一文指出,即使是衰減時間表轉移,我們也不認為一般情況下會發生這種情形。舉例來說,如果對少量訓練批次調整 sqrt 衰減,然後擴展到大量批次,就會導致大部分訓練發生在過小的批次。在極端訓練預算限制下,您可能可以使用大多數排程「勉強」完成工作,但如果經過調整,成效可能會顯著提升。瞭解隨機元最佳化中的短期偏誤一文,說明嘗試近視地挑選學習率的危險性。
第 2 輪:減少跑步次數,但每次跑步時間較長
執行第 1 輪的最佳超參數設定。
推測:🤖 使用額外步驟,以高學習率延長訓練期。舉例來說,如果您使用線性時間表,請從第 1 輪開始固定衰減長度,並延長一開始的常數 lr
期間。如果是餘弦衰減,請保留第 1 輪的基礎 lr
,並按照「訓練運算最佳化大型語言模型」一文所述,擴展 max_train_steps
。
如果團隊符合下列所有條件,可能適合進行額外訓練:
- 非常成熟的建模
- 調整管道
- 耗時且昂貴的生產訓練執行
不過,額外的訓練執行作業通常不會有成效。
我們已說明如何從第 1 輪轉移至第 2 輪。 如果您不在意分析時間,且最重視有效運用運算資源,建議您在多輪調整中,以指數方式增加訓練執行時間 (因此,完成研究的端對端時間也會增加):
- 在每一輪中,有系統地確保您的選擇持續提供良好結果。
- 將新構想放入管道,透過越來越長時間的實驗,逐步降低風險 (從步驟 i 到步驟 i+1)。