Random Search 簡介

Python 超參數調校

Alex Scriven

Data Scientist

你已經知道的事

 

與 grid search 非常相似:

  • 定義估計器、要調的超參數,以及各超參數的取值範圍。
  • 仍需設定交叉驗證方案與評分函式。

 

但我們改為隨機挑選格子。

Python 超參數調校

為什麼可行?

Bengio & Bergstra(2012):

本文以實證與理論顯示,隨機挑選的嘗試用於超參數最佳化,比規則格點更有效率。

兩個主因:

  1. 並非每個超參數都同等重要。
  2. 一個小小的機率技巧。
Python 超參數調校

機率小技巧

Grid search:

10x10 of different models

要有 95% 的機率挑到綠色區塊之一,得跑多少模型?

我們的最佳模型:

10x10 of different models

Python 超參數調校

機率小技巧

 

若我們以均勻隨機方式選超參數組合,先算「全部錯過」的機率,來看它有多不可能發生:

  • 第 1 次試驗:成功機率 0.05,錯過機率為 (1 - 0.05)。

    • 第 2 次試驗:錯過機率為 (1-0.05) x (1-0.05)。
      • 第 3 次試驗:再次錯過機率為 (1-0.05) x (1-0.05) x (1-0.05)。
  • 事實上,做 n 次試驗時,「每次都錯過」的機率為 (1-0.05)^n。

Python 超參數調校

機率小技巧

 

那要做多少次試驗,才能有高機率(95%)落在該區域內?

  • 我們有 (1-0.05)^n 的機率完全錯過。
  • 因此「進入該區域」的機率為 1 - 錯過全部,也就是 (1-(1-0.05)^n)。
  • 解 1-(1-0.05)^n >= 0.95,得到 n >= 59
Python 超參數調校

機率小技巧

 

這代表什麼?

  • 隨機挑新點時,你很難長時間一直錯過「好區域」。
  • Grid search 因為要全面覆蓋,可能在「差區域」耗掉大量時間。
Python 超參數調校

幾點重要提醒

 

請記住:

  1. 最佳結果仍受你設定的格點所限。

  2. 與 grid search 公平比較時,需使用相同的建模「預算」。

Python 超參數調校

建立超參數的隨機樣本

我們可以自己建立隨機抽樣的超參數組合:

# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in 
                    product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
                            range(0,len(combinations_list)), 100, 
                            replace=False)
combinations_random_chosen = [combinations_list[x] for x in 
                            random_combinations_index]
Python 超參數調校

視覺化 Random Search

我們也能把超參數選擇畫在 X、Y 軸上,視覺化 random search 的覆蓋範圍。

random search coverage graph

注意:散佈範圍很廣,但深度覆蓋不多。

Python 超參數調校

一起來練習吧!

Python 超參數調校

Preparing Video For Download...