Introduction à la recherche aléatoire

Optimisation des hyperparamètres en Python

Alex Scriven

Data Scientist

Ce que vous savez déjà

 

Très proche de la recherche en grille :

  • Définir un estimateur, les hyperparamètres à régler et l'intervalle de valeurs pour chacun.
  • Définir aussi un schéma de validation croisée et une fonction de scoring.

 

MAIS nous sélectionnons des cases de la grille au hasard.

Optimisation des hyperparamètres en Python

Pourquoi cela fonctionne-t-il ?

Bengio & Bergstra (2012) :

Cet article montre empiriquement et théoriquement que des essais choisis aléatoirement sont plus efficaces pour l'optimisation d'hyperparamètres que des essais sur grille.

Deux raisons principales :

  1. Tous les hyperparamètres n'ont pas la même importance
  2. Un petit tour de probabilité
Optimisation des hyperparamètres en Python

Un petit tour de probabilité

Une recherche en grille :

10x10 of different models

Combien de modèles faut-il exécuter pour avoir 95 % de chances d'obtenir une des cases vertes ?

Nos meilleurs modèles :

10x10 of different models

Optimisation des hyperparamètres en Python

Un petit tour de probabilité

 

Si nous sélectionnons uniformément des combinaisons d'hyperparamètres au hasard, considérons la probabilité de RATER chaque essai, pour montrer à quel point c'est improbable

  • Essai 1 = 0,05 de réussite et (1 − 0,05) de l'échouer

    • Essai 2 = (1−0,05) × (1−0,05) de rater la zone
      • Essai 3 = (1−0,05) × (1−0,05) × (1−0,05) de rater encore
  • En fait, avec n essais, on a (1−0,05)^n de chances que chaque essai manque la zone visée.

Optimisation des hyperparamètres en Python

Un petit tour de probabilité

 

Combien d'essais pour avoir une forte probabilité (95 %) d'atteindre cette région ?

  • On a (1−0,05)^n de chances de tout rater.
  • Donc la probabilité d'y entrer est (1 − tout rater), soit (1−(1−0,05)^n)
  • Résoudre 1−(1−0,05)^n ≥ 0,95 donne n ≥ 59
Optimisation des hyperparamètres en Python

Un petit tour de probabilité

 

Qu'est-ce que cela signifie ?

  • Il est peu probable de rater complètement la « bonne zone » pendant longtemps en choisissant des points au hasard
  • Une recherche en grille peut passer beaucoup de temps dans une « mauvaise zone » en la couvrant de façon exhaustive.
Optimisation des hyperparamètres en Python

Points importants

 

À retenir :

  1. Le maximum reste limité par la grille que vous définissez !

  2. Pour comparer équitablement à la recherche en grille, gardez le même « budget » de modélisation.

Optimisation des hyperparamètres en Python

Créer un échantillon aléatoire d'hyperparamètres

Nous pouvons créer notre propre échantillon aléatoire de combinaisons d'hyperparamètres :

# 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]
Optimisation des hyperparamètres en Python

Visualiser une recherche aléatoire

On peut aussi visualiser la couverture d'une recherche aléatoire en traçant les choix d'hyperparamètres sur les axes X et Y.

random search coverage graph

Remarquez : large dispersion, mais faible couverture en profondeur.

Optimisation des hyperparamètres en Python

Passons à la pratique !

Optimisation des hyperparamètres en Python

Preparing Video For Download...