Introduction à la recherche aléatoire

Ajustement des hyperparamètres en Python

Alex Scriven

Data Scientist

Ce que vous savez déjà

 

Très proche de la recherche par 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 pointage.

 

MAIS on choisit plutôt des cases de la grille au hasard.

Ajustement des hyperparamètres en Python

Pourquoi ça fonctionne ?

Bengio et Bergstra (2012) :

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

Deux raisons principales :

  1. Tous les hyperparamètres n'ont pas la même importance
  2. Une petite astuce de probabilité
Ajustement des hyperparamètres en Python

Une astuce de probabilité

Une recherche par grille :

10x10 de modèles différents

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

Nos meilleurs modèles :

10x10 de modèles différents

Ajustement des hyperparamètres en Python

Une astuce de probabilité

 

Si nous choisissons uniformément des combinaisons d'hyperparamètres au hasard, évaluons la probabilité de MANQUER chaque essai, pour montrer à quel point c'est improbable

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

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

Ajustement des hyperparamètres en Python

Une astuce de probabilité

 

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

  • Nous avons (1−0,05)^n de chance de tout manquer.
  • Donc, la chance d'y entrer est (1 − tout manquer), soit (1−(1−0,05)^n)
  • Résoudre 1−(1−0,05)^n ≥ 0,95 donne n ≥ 59
Ajustement des hyperparamètres en Python

Une astuce de probabilité

 

Qu'est-ce que ça implique ?

  • Vous avez peu de chances de manquer complètement la « bonne zone » longtemps en choisissant des points au hasard
  • Une recherche par grille peut passer beaucoup de temps dans une « mauvaise zone » en couvrant tout exhaustivement.
Ajustement des hyperparamètres en Python

Points importants

 

Rappel :

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

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

Ajustement des hyperparamètres en Python

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

On peut 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]
Ajustement 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.

graphique de couverture de recherche aléatoire

Voyez la grande dispersion, mais une couverture peu profonde ?

Ajustement des hyperparamètres en Python

Passons à la pratique !

Ajustement des hyperparamètres en Python

Preparing Video For Download...