ランダムサーチの導入

Pythonでのハイパーパラメータチューニング

Alex Scriven

Data Scientist

既知の内容の復習

 

グリッドサーチとよく似ています:

  • 推定器、調整するハイパーパラメータ、その探索範囲を定義。
  • 交差検証法と評価指標も設定。

 

ただし ランダムに グリッドのマスを選びます。

Pythonでのハイパーパラメータチューニング

なぜ有効か?

Bengio & Bergstra (2012):

本論文は、理論と実証の両面から、ハイパーパラメータ最適化ではランダム試行がグリッドより効率的であることを示す。

主な理由は2つ:

  1. すべてのハイパーパラメータが同等に重要ではない。
  2. 確率の小ワザ。
Pythonでのハイパーパラメータチューニング

確率の小ワザ

グリッドサーチ:

さまざまなモデルの10x10

緑のマスに当たる確率を95%にするには、何モデル試す必要がある?

ベストなモデル:

さまざまなモデルの10x10

Pythonでのハイパーパラメータチューニング

確率の小ワザ

 

ハイパーパラメータを一様にランダム抽出するとき、すべての試行で外す確率を考えて、その起こりにくさを示します。

  • 試行1 = 成功0.05、外すのは (1 - 0.05)。

    • 試行2 = (1-0.05) × (1-0.05) で範囲を外す。
      • 試行3 = (1-0.05) × (1-0.05) × (1-0.05) で再び外す。
  • 一般に、n 回の試行で望む点をすべて外す確率は (1-0.05)^n。

Pythonでのハイパーパラメータチューニング

確率の小ワザ

 

その領域に入る確率を高く(95%)するには試行回数はいくつ必要?

  • すべて外す確率は (1-0.05)^n。
  • したがって入る確率は 1 − (1-0.05)^n。
  • 1 − (1-0.05)^n >= 0.95 を解くと、n >= 59。
Pythonでのハイパーパラメータチューニング

確率の小ワザ

 

どういう意味か?

  • ランダムに点を選べば、「良い領域」を長く連続で外し続けるのは起こりにくい。
  • グリッドサーチは網羅するため「悪い領域」に多く時間を使うことがある。
Pythonでのハイパーパラメータチューニング

重要な注意点

 

注意:

  1. 最大値は設定したグリッドの質に依存します。

  2. グリッドサーチと公平に比較するには、同じモデリング「予算」を使うこと。

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でのハイパーパラメータチューニング

ランダムサーチの可視化

X・Y軸にハイパーパラメータを取り、ランダムサーチの被覆も可視化できます。

ランダムサーチの被覆グラフ

散布は広いが、密な被覆はない点に注目。

Pythonでのハイパーパラメータチューニング

Let's practice!

Pythonでのハイパーパラメータチューニング

Preparing Video For Download...