8.5 Hyperparameter Tuning
Hyperparameter tuning 的重點不是把所有組合都暴力試完,而是用可重現的方式比較幾個重要設定,讓模型改善有根據。本篇不依賴 KerasTuner 等額外套件,而是用 Python 迴圈實作小型 grid search,比較 hidden units、dropout rate 與 learning rate。
1. 學習目標
模型表現不好時,很容易同時改很多地方:層數、神經元數、learning rate、batch size、dropout、epoch。這樣即使結果變好,也很難知道是哪個設定造成改善。
本篇建立一個簡單但實用的 tuning 流程:
- 固定資料切分與前處理。
- 建立可傳入超參數的
build_model()。 - 設計小範圍搜尋空間。
- 每次實驗都記錄 validation 指標、訓練時間與模型參數量。
- 用 validation set 選最佳設定,再用 test set 做最終評估。
2. 什麼是 Hyperparameter?
模型訓練後學到的權重稱為 parameters;訓練前由我們設定的值稱為 hyperparameters。
| 類型 | 例子 |
|---|---|
| 模型架構 | layer 數、hidden units、activation |
| 訓練設定 | learning rate、batch size、epoch |
| 正則化 | dropout rate、L2 regularization |
| 資料流程 | 資料增強強度、sequence length、image size |
Hyperparameter tuning 要做的是系統化比較這些設定,而不是每次憑直覺隨機修改。
3. 範例資料
Notebook 使用 make_classification 產生三類表格分類資料。這份資料可以快速訓練,也能觀察不同模型容量、dropout 與 learning rate 對 validation accuracy 的影響。
資料會切成 train、validation、test。調參只看 validation set,test set 保留到最後,避免在調參過程中把 test set 變成另一個 validation set。
4. 建立可調參的模型函式
關鍵是把會調整的設定寫成函式參數:
def build_model(units=64, dropout_rate=0.2, learning_rate=0.001):
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(x_train.shape[1],)),
tf.keras.layers.Dense(units, activation='relu'),
tf.keras.layers.Dropout(dropout_rate),
tf.keras.layers.Dense(units // 2, activation='relu'),
tf.keras.layers.Dense(3, activation='softmax')
])
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate),
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
return model
這樣每一組設定都能用同一個訓練流程比較。
5. 小型 Grid Search
本篇只搜尋少量組合,目的是建立流程,而不是耗費大量算力:
search_space = [
{'units': 32, 'dropout_rate': 0.1, 'learning_rate': 0.001},
{'units': 64, 'dropout_rate': 0.2, 'learning_rate': 0.001},
{'units': 128, 'dropout_rate': 0.3, 'learning_rate': 0.0005},
]
每次訓練後都把結果存進 results,最後轉成 DataFrame 排序。這種記錄習慣比單純看最後一個輸出更重要,因為它讓你能回頭比較每次實驗的設定與結果。
6. 如何套用到自己的資料?
實務上建議先調少數幾個最有影響的 hyperparameters:
- 先固定資料切分、前處理與評估指標。
- 第一輪優先調 learning rate 與模型容量。
- 第二輪再調 dropout、L2 或 batch size。
- 每次實驗都記錄設定、validation 指標、訓練時間與備註。
- 不要用 test set 反覆挑模型;test set 只做最後評估。
若專案變大,可以再導入 KerasTuner、Optuna 或 MLflow。但在入門階段,先把手動 grid search 寫清楚,會更容易理解自動調參工具背後在做什麼。
7. 小結
Hyperparameter tuning 是一種實驗管理流程。先固定資料與評估方式,再小範圍比較關鍵設定,最後用 validation set 選模型、test set 做最終確認。這樣調參結果才可重現,也能說明模型為什麼變好。