超參數調優(hyperparameter tuning)
/ HY-per-puh-RAM-uh-ter TOON-ing /
超參數,是你在訓練開始之前就要選定的設置——學習率、批量大小、多少層、權重衰減多強——它們與權重相對,而權重是模型自己學出來的。超參數調優,就是去搜尋這些設置的一個好組合。想像烤麵包:菜譜裡的爐溫和烤製時間是你必須撥準的超參數,而麵團最終的口感,則是在這些定下之後才自己「學」出來的。
因為你通常算不出最佳設置,你就得做實驗。網格搜索(grid search)在一張預先定好的數值網格上試遍每一種組合——周到,卻昂貴,因為每多加一個旋鈕,組合數就爆炸式增長。隨機搜索(random search)則隨機抽取組合,而且——也許出人意料——往往比網格更快找到好設置,因為它不會把力氣浪費在窮舉那些其實無關緊要的旋鈕上。更高級的方法(如貝葉斯優化)會用早先的結果來決定下一步試什麼。
每個候選都在驗證集上評判,絕不用測試集——測試集要留作最後那個誠實的估計。現實的圖景是調優代價高昂:每一次試驗都是一整次(或部分)訓練,所以人們倚重好的預設值,只調那幾個最要緊的超參數(先調學習率),並為搜索定好預算。一個微妙的陷阱,是針對驗證集調得太狠,以至於對它過擬合了,這正是為什麼必須另留一份從不碰的測試集,沒有商量餘地。
調兩個旋鈕——學習率(試0.1、0.01、0.001)和批量大小(試32、128)。網格搜索把全部 3×2 = 6 種組合都跑一遍。隨機搜索則可能從連續區間裡隨機抽6組(學習率,批量)的搭配,往往落得離真正的最佳更近,因為它探索了更多互不相同的學習率取值——而學習率正是這裡最要緊的旋鈕。
按每一塊錢的算力來算,隨機搜索往往勝過網格搜索。
永遠在驗證集上挑超參數,並在留出的測試集上報告最終數字。針對測試集來調,會悄悄洩露資訊、虛高你的結果——這是一種常見而代價高昂的自欺。