iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
AI & Data

從 AI 落地談 MLOps系列 第 18

Day 18 : 深度學習(神經網絡)自動調參術 - KerasTuner

  • 接續將關注焦點來到 Model 的主題,在您閱讀本系列文章之前,您或許已有建模經驗,在用於生產的機械學習情境,手動調參優化模型與資料是耗費人時的吃重工作,自動化訓練、調參機制成為無可避免的選擇,讓您將時間投入在更需要在意的問題之中。
  • 在本系列 Model 的主題,將介紹如何自動化選擇與訓練模型,以及優化模型的有趣技巧。這篇說明的是自動化調整超參數的 KerasTuner。
  • Colab 實作範例

Hyperparameter turning 超參數調參

  • 在您的 ML 系統中,輸入可歸納為「資料」、「超參數」及「模型」,在機械學習領域中,能否選擇良好的超參數,通常是決定機器學習專案成敗的關鍵,對於更複雜的模型,超參數的數量會急劇增加,手動調整它們可能非常具有挑戰性。有沒有可能用自動化的方式搜尋最佳參數?
  • 超參數類型有兩種:
    • Model hyperparameters:
      • 影響模型選擇的模型超參數,例如隱藏層的數量和寬度。
    • Algorithm hyperparameters:
      • 影響學習的演算法,例如 SGD 的學習率和 KNN 的 K 值。

KerasTurner

  • Keras Tuner是 Keras 團隊的一個模組,可自動執行神經網絡的超參數調整
  • 為了進行比較,首先使用預先選擇的超參數訓練 Baseline 模型,然後使用調整後的超參數重做該過程。
  • 範例改寫自Tensorflow 提供的官方教學,採用採用 Fashion MNIST dataset 資料集。提供您 Colab 實作範例

建立基準模型

  • 先定義基本模型作為優化基準。
  • 為了方便顯示結果,範例有定義一個輔助函數。

定義模型

  • 當您構建調整超參數的模型時,除了模型架構之外,您還定義了超參數搜索空間。為了調整超參數的模型稱為 Hyper Model。

  • 您可以通過兩種方法定義 Hyper Model:

    • 通過使用模型構建器功能(本範例採用)。
    • 通過HyperModel繼承 Keras Tuner類別。
  • 另外兩個預定義的HyperModel類別 HyperXceptionHyperResNet可用於計算機視覺應用程序。

  • 以下模型函數中,

    • Int()用來定義密集單元的搜索空間的最小值和最大值。
    • Choice()用於設定學習率。
    def model_builder(hp):
    
      model = keras.Sequential()
      model.add(keras.layers.Flatten(input_shape=(28, 28)))
    
      # 設定搜索值範圍
      hp_units = hp.Int('units', min_value=32, max_value=512, step=32) 
    
      model.add(
          keras.layers.Dense(
              units=hp_units, 
              activation='relu', 
              name='dense_1'
              )
          )
    
      model.add(keras.layers.Dropout(0.2))
      model.add(keras.layers.Dense(10, activation='softmax'))
    
      # 設定學習率範圍 0.01, 0.001, or 0.0001
      hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
    
      model.compile(
          optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
          loss=keras.losses.SparseCategoricalCrossentropy(),
          metrics=['accuracy']
          )
      return model
    

實例化 Tuner 並執行超調

  • 在此設定 Tuner 如下,細節調整您可以參考官方文件

    # Instantiate the tuner
    tuner = kt.Hyperband(
        model_builder,
        objective='val_accuracy',
        max_epochs=10,
        factor=3,
        directory='kt_dir',
        project_name='kt_hyperband'
        )
    
  • 另外為了節省不必要的訓練時間,定義了一個 EarlyStopping,當驗證的 loss 在 5 個 epoch 沒改善時停止訓練,以下為持續搜尋的過程。

  • 最後將產生一組最佳超參數搜尋結果。

以最佳超參數訓練模型並比對基準

  • 範例搜尋到最佳的超參數為隱藏層設定 480 個神經元,學習率為 0.001。
  • 經比對有自動搜尋出神經元略低、準確度略高、loss略低的超參數調整結果,雖然不明顯。

小結

  • 在本篇您使用 Keras Tuner 方便地調整超參數。您定義了要調整的參數、搜索空間和搜索策略,以達到最佳超參數集。雖然要搜尋最佳參數過程消耗運算資源,但可讓您騰出時間做更重要的事。
  • 用於生產的機械學習情境,您會有因為時間推移產生的資料偏移、概念篇移、模型效果衰退問題,觸發自動化持續訓練機制,您可以建構較可靠的機械學習服務。

參考


上一篇
Day 17 : 用於生產的機械學習 - 特徵選擇 Feature Selection
下一篇
Day 19 : 深度學習(神經網絡)自動建模術 - AutoMLs
系列文
從 AI 落地談 MLOps30

尚未有邦友留言

立即登入留言