超參數自動調整

keras tuner

深度學習整個架構, 最令人覺得繁瑣的莫過於超參數的設定, 我們很難以數學分析來找到最佳的超參數, 通常是靠實驗手段來逐步確認, 深度學習的實驗無非就是硬 Train 一發, 相當費時與計算資源. 針對 CNN 我們知道有 NAS 幫助找到較優的超參數.

如果是我們自己設計的深度學習模型, keras tuner 可以幫助我們, 假設已經有 Tensorflow 2, 必須額外安裝keras-tuner:

pip install -U keras-tuner

不同於 meta learning 要在許多的任務中學習到如何學習, 然後應用到待測試的任務中, 推理出一個較優的模型組態; keras tuner 是在同一個任務中, 幫忙我們找到較優的超參數設定, 而不是靠人力嘗試錯誤. 其工作原理為在定義超參數搜尋的空間裡 (例如: 某層的神經元數量範圍), 經過訓練評估 (依照自行定義的指標函數應用於驗證數據集上) 後, 提出較佳的超參數組態. 其流程如下:

在不用 keras tuner時, 我們模型定義都會寫死哪一層的神經元要多少個, 用什麼激活函數. 現在這些必須改為由tuner 幫忙搜尋, 所以我們模型必須傳入由 tuner 幫忙指定的超參數組合. 程式碼範例:

模型定義需要傳入超參數 hp , HyperParameter 簡寫, 這個物件. 原來我們寫死的超參數竟改為 hp.Choice; hp.Int,

最後我們定義 tuner 採 RandomSearch 這樣的策略, 再由 tuner.search 以 objective 定義的指標來搜尋.

後續我們細部討論 keras tuner