Maison  >  Article  >  Périphériques technologiques  >  Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

WBOY
WBOYavant
2023-04-04 12:05:082000parcourir

Cet article détaillera les méthodes d'optimisation d'hyperparamètres les plus courantes utilisées pour améliorer les résultats de l'apprentissage automatique.

Traducteur | Zhu Xianzhong​

Réviseur | Sun Shujuan​

Introduction​

Habituellement, lorsqu'on essaie d'améliorer un modèle d'apprentissage automatique, la première solution à laquelle les gens pensent est d'ajouter plus de données de formation. Des données supplémentaires sont souvent utiles (sauf dans certaines circonstances), mais générer des données de haute qualité peut s’avérer très coûteux. L'optimisation des hyperparamètres nous fait gagner du temps et des ressources en utilisant les données existantes pour obtenir les meilleures performances du modèle.

Comme son nom l'indique, l'optimisation des hyperparamètres est le processus de détermination de la meilleure combinaison d'hyperparamètres pour un modèle d'apprentissage automatique afin de satisfaire la fonction d'optimisation (c'est-à-dire maximiser les performances du modèle compte tenu de l'ensemble de données étudié). En d'autres termes, chaque modèle fournit plusieurs « boutons » de réglage d'options que nous pouvons modifier jusqu'à ce que nous obtenions une combinaison optimale d'hyperparamètres pour notre modèle. Quelques exemples de paramètres que nous pouvons modifier lors de l'optimisation des hyperparamètres peuvent être le taux d'apprentissage, l'architecture du réseau neuronal (par exemple, le nombre de couches cachées), la régularisation, etc. ​

Dans cet article, nous présenterons conceptuellement les trois méthodes d'optimisation d'hyperparamètres les plus courantes, à savoir la recherche par grille, la recherche aléatoire et l'optimisation bayésienne, puis les implémenterons une par une.

Je fournirai un tableau de comparaison de haut niveau au début de l'article pour référence du lecteur, puis j'explorerai, expliquerai et mettrai en œuvre plus en détail chaque élément du tableau de comparaison dans le reste de l'article. ​

Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

Tableau 1 : Comparaison des méthodes d'optimisation des hyperparamètres​

1. Algorithme de recherche par grille​

La recherche par grille est probablement la méthode la plus simple et la plus intuitive pour l'optimisation des hyperparamètres, qui implique une recherche dans un espace de recherche défini. la meilleure combinaison d'hyperparamètres. L'« espace de recherche » dans ce contexte correspond à l'ensemble des hyperparamètres et aux valeurs de ces hyperparamètres pris en compte lors de l'optimisation. Comprenons mieux la recherche par grille avec un exemple. ​

Supposons que nous ayons un modèle d'apprentissage automatique avec seulement trois paramètres. Chaque paramètre peut prendre la valeur fournie dans le tableau :​

paramètre_1 = [1, 2, 3]​
paramètre_2 = [a, b, c ]​
paramètre_3 = [x, y, z]​

Nous ne savons pas quelle combinaison de ces paramètres optimisera la fonction d'optimisation de notre modèle (c'est-à-dire fournira le meilleur résultat pour notre modèle d'apprentissage automatique). Dans la recherche par grille, nous essayons simplement chaque combinaison de ces paramètres, mesurons les performances du modèle pour chaque paramètre et choisissons simplement la combinaison qui donne les meilleures performances ! Dans cet exemple, le paramètre 1 peut prendre 3 valeurs (c'est-à-dire 1, 2 ou 3), le paramètre 2 peut prendre 3 valeurs (c'est-à-dire a, b et c) et le paramètre 3 peut prendre 3 valeurs. ​​(c'est-à-dire x, y et z). En d’autres termes, il y a 3*3*3=27 combinaisons au total. La recherche de grille dans cet exemple impliquera 27 cycles d'évaluation des performances du modèle d'apprentissage automatique pour trouver la combinaison la plus performante. ​

Comme vous pouvez le constater, cette méthode est très simple (semblable à une tâche d'essais et d'erreurs), mais elle présente également certaines limites. Résumons les avantages et les inconvénients de cette méthode. ​

Parmi eux, les avantages incluent :​

  • Facile à comprendre et à mettre en œuvre​
  • Facile à paralléliser​
  • Convient aux espaces discrets et continus.Les inconvénients incluent principalement :​
  • Dans les grands et/ou complexes systèmes avec un grand nombre d'hyperparamètres Coûteux dans le modèle (car toutes les combinaisons doivent être essayées et évaluées)
  • Mémoire - n'apprend pas des observations passées
  • Peut ne pas trouver la meilleure combinaison si l'espace de recherche est trop grand Mon conseil est si vous avez un modèle simple avec un petit espace de recherche, utilisez la recherche par grille ; sinon, il est recommandé de poursuivre la lecture pour trouver une solution plus adaptée à un espace de recherche plus grand.
    Maintenant, implémentons la recherche par grille avec un exemple réel.

1.1. Implémentation de l'algorithme de recherche par grille

Afin d'implémenter la recherche par grille, nous utiliserons l'ensemble de données Iris dans scikit-learn pour créer un modèle de classification aléatoire des forêts. Cet ensemble de données comprend 3 longueurs différentes de pétales et de sépales d'iris et sera utilisé pour cet exercice de classification. Dans cet article, le développement de modèles est secondaire car l'objectif est de comparer les performances de diverses stratégies d'optimisation d'hyperparamètres. Je vous encourage à vous concentrer sur les résultats de l'évaluation du modèle et sur le temps requis pour chaque méthode d'optimisation des hyperparamètres pour atteindre l'ensemble d'hyperparamètres sélectionné. Je décrirai les résultats de l'exécution, puis fournirai un tableau de comparaison récapitulatif pour les trois méthodes utilisées dans cet article. ​

L'espace de recherche incluant toutes les valeurs d'hyperparamètres est défini comme suit :​

search_space = {'n_estimators' : [10, 100, 500, 1000],​
'max_degree' : [2, 10, 25, 50, 100],​
'min_samples_split' : [2, 5, 10],​
'min_samples_leaf' : [1, 5, 10]}​

L'espace de recherche ci-dessus se compose de 4*5*3*3= 180 hyperparamètres de la combinaison totale. Nous utiliserons la recherche par grille pour trouver la combinaison qui optimise la fonction objectif comme suit :​

# Importer des bibliothèques​
depuis sklearn.model_selection import GridSearchCV​
depuis sklearn.datasets import load_iris​
depuis sklearn.ensemble import RandomForestClassifier​
depuis sklearn.model_selection import cross_val_score​
temps d'importation​
# Charger l'ensemble de données Iris​
iris = load_iris()​
X, y = iris.data, iris.target​
#Définir l'espace de recherche des hyperparamètres​
search_space = {'n_estimators' : [10, 100, 500, 1000],​
'max_degree' : [2 , 10, 25, 50, 100],​
'min_samples_split' : [2, 5, 10],​
'min_samples_leaf' : [1, 5, 10]}​
#Définir un classificateur de forêt aléatoire​
clf = RandomForestClassifier (random_state=1234)​
# Générer un objet optimiseur​
optimizer = GridSearchCV(clf, search_space, cv=5, scoring='accuracy')​
#Stocker l'heure de démarrage afin qu'elle puisse être utilisée pour calculer la consommation totale Temps ​
start_time = time.time()​
# Optimiseur sur l'ajustement des données​
optimizer.fit(X, y)​
# Stocke l'heure de fin afin qu'elle puisse être utilisée pour calculer la durée totale
end_time = time .time ()​
# Imprime l'ensemble d'hyperparamètres optimaux et le score correspondant​
print(f"hyperparameters sélectionnés:")​
print(optimizer.best_params_)​
print("")​
print(f"best_score: {optimizer. best_score_}")​
print(f"elapsed_time: {round(end_time-start_time, 1)}")​

Le résultat du code ci-dessus est le suivant :​

Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

Ici, nous pouvons voir l'utilisation de la recherche de grille réseau sélectionne les valeurs d'hyperparamètres. Parmi eux, best_score décrit les résultats de l'évaluation à l'aide de l'ensemble d'hyperparamètres sélectionné, et elapsed_time décrit le temps qu'il a fallu à mon ordinateur portable local pour exécuter cette stratégie d'optimisation d'hyperparamètres. Lorsque vous passez à la méthode suivante, gardez à l’esprit les résultats de l’évaluation et le temps écoulé à des fins de comparaison. Passons maintenant à la discussion sur la recherche aléatoire. ​

2. Algorithme de recherche aléatoire​

Comme son nom l'indique, la recherche aléatoire est le processus d'échantillonnage aléatoire d'hyperparamètres à partir d'un espace de recherche défini. Contrairement à la recherche par grille, la recherche aléatoire sélectionne uniquement un sous-ensemble aléatoire de valeurs d'hyperparamètres pour un nombre prédéfini d'itérations (en fonction des ressources disponibles telles que le temps, le budget, les objectifs, etc.) et calcule le modèle d'apprentissage automatique pour chaque performance d'hyperparamètre, et puis choisissez les meilleures valeurs d'hyperparamètres. ​

Sur la base de l'approche ci-dessus, vous pouvez imaginer que la recherche aléatoire est moins coûteuse qu'une recherche sur grille complète, mais présente néanmoins ses propres avantages et inconvénients, comme suit :​

Avantages :​

  • Facile à comprendre et à mettre en œuvre​
  • Facile à paralléliser​
  • Applicable aux espaces discrets et continus​
  • Moins cher que la recherche par grille​
  • Plus susceptible de converger vers une recherche optimale que la recherche par grille avec le même nombre de tentatives Inconvénients : ​
  • Mémoire - n'apprend pas à partir d'observations passées​
  • Compte tenu de la sélection aléatoire, des valeurs d'hyperparamètres importantes peuvent être manquées​

Dans la méthode suivante, nous résoudrons la grille et l'inconvénient "sans mémoire" de la recherche aléatoire. Mais avant de discuter de cette méthode, implémentons la recherche aléatoire. ​

2.1. Implémentation de l'algorithme de recherche aléatoire

À l'aide de l'extrait de code ci-dessous, nous implémenterons l'optimisation des hyperparamètres de recherche aléatoire pour le même problème décrit dans l'implémentation de la recherche par grille. ​

# Importer la bibliothèque​
from sklearn.model_selection import RandomizedSearchCV​
from scipy.stats import randint​

# Créer un objet RandomizedSearchCV​
optimizer = RandomizedSearchCV(clf, param_distributinotallow=search_space,​
n_iter=50, cv= 5, scoring='accuracy',​
random_state=1234)​

# Stockez l'heure de début pour calculer la durée totale d'exécution​
start_time = time.time()​

# Ajustez l'optimiseur sur les données​
optimizer . fit(X, y)​

# Stocke l'heure de fin pour calculer la durée totale d'exécution​
end_time = time.time()​

# Imprime le meilleur ensemble d'hyperparamètres et le score correspondant​
print(f"hyperparamètres sélectionnés :" )​
print(optimizer.best_params_)​
print("")​
print(f"best_score: {optimizer.best_score_}")​
print(f"elapsed_time: {round(end_time-start_time, 1) }" )​

Le résultat du code ci-dessus est le suivant :​

Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

Résultats de recherche aléatoire​

Ces résultats sont très intéressants par rapport aux résultats de la recherche par grille. best_score reste le même, mais elapsed_time diminue de 352,0 secondes à 75,5 secondes ! Comme c’est impressionnant ! En d’autres termes, l’algorithme de recherche aléatoire a réussi à trouver un ensemble d’hyperparamètres qui ont effectué la même performance que la recherche sur grille en environ 21 % du temps requis par la recherche sur grille ! Cependant, l’efficacité ici est bien supérieure. ​

Ensuite, passons à notre méthode suivante, appelée optimisation bayésienne, qui apprend de chaque tentative du processus d'optimisation.

3. Optimisation bayésienne

L'optimisation bayésienne est une méthode d'optimisation d'hyperparamètres qui utilise un modèle probabiliste pour « apprendre » des tentatives précédentes et diriger la recherche vers la meilleure combinaison d'hyperparamètres dans l'espace de recherche, optimisant ainsi la fonction objective de l'apprentissage automatique. modèle. ​

La méthode d'optimisation bayésienne peut être divisée en 4 étapes, que je décrirai ci-dessous. Je vous encourage à lire ces étapes pour mieux comprendre le processus, mais aucune connaissance préalable n'est requise pour utiliser cette méthode. ​

  1. Définir un « a priori », qui est un modèle probabiliste sur notre croyance à un moment donné sur la combinaison la plus probable d'hyperparamètres qui optimise la fonction objectif
  2. Un modèle pour évaluer un échantillon d'hyperparamètres
  3. Utiliser les étapes En utilisant les connaissances acquises à l'étape 2, nous mettons à jour le modèle probabiliste à l'étape 1 (ce que nous appelons le « prior ») pour comprendre où se trouvent, selon nous, les combinaisons les plus probables d'hyperparamètres qui optimisent la fonction objectif. Notre croyance actualisée est appelée « postérieure ». En d'autres termes, les connaissances acquises à l'étape 2 nous aident à mieux comprendre l'espace de recherche et nous font passer de l'avant au postérieur, faisant du postérieur notre « dernière » connaissance sur l'espace de recherche et la fonction objectif, comme déterminé par l'étape 2. Fournir des informations. ​
  4. Répétez les étapes 2 et 3 jusqu'à ce que les performances du modèle convergent, que les ressources soient épuisées ou que d'autres métriques prédéfinies soient respectées​

Si vous souhaitez en savoir plus sur l'optimisation bayésienne, vous pouvez consulter l'article suivant : ​

"Algorithme d'optimisation bayésien dans l'apprentissage automatique", l'adresse est :
​​https://medium.com/@fmnobar/conceptual-overview-of-bayesian-optimization-for-parameter-tuning-in -machine-learning-a3b1b4b9339f . ​​​

Maintenant que nous comprenons le fonctionnement de l'optimisation bayésienne, examinons ses avantages et ses inconvénients. ​

Avantages :​

  • Apprenez des observations passées et soyez donc plus efficace. En d'autres termes, on s'attend à ce qu'elle trouve un meilleur ensemble d'hyperparamètres en moins d'itérations que les méthodes sans mémoire
  • Convergence vers l'optimalité compte tenu de certaines hypothèses Inconvénients :
  • Parallélisation difficile​
  • Calcul plus grand que la grille et recherche aléatoire par itération​
  • Le choix des distributions a priori et de probabilité initiale pour les fonctions utilisées dans l'optimisation bayésienne (par exemple, les fonctions d'obtention, etc.) peut affecter de manière significative les performances et sa courbe d'apprentissage​

Une fois les détails réglés, implémentons l'optimisation bayésienne et voyons les résultats. ​

3.1. Implémentation de l'algorithme d'optimisation bayésienne

Semblable à la section précédente, nous utiliserons l'extrait de code suivant pour implémenter l'optimisation des hyperparamètres bayésiens pour le même problème décrit dans l'implémentation de la recherche de grille. ​

# Importer une bibliothèque​
à partir de skopt import BayesSearchCV​

# Effectuer une optimisation bayésienne​
optimizer = BayesSearchCV(estimator=RandomForestClassifier(),​
search_spaces=search_space,​
n_iter=10,​
cv=5 ,​
scoring='accuracy',​
random_state=1234)​

# Stockez l'heure de début pour calculer la durée totale d'exécution​
start_time = time.time()​

optimizer.fit(X, y)​

# Stocker l'heure de fin pour calculer la durée totale d'exécution​
end_time = time.time()​

# Imprimer le meilleur ensemble d'hyperparamètres et le score correspondant​
print(f"hyperparameters sélectionnés :")​
print(optimizer.best_params_ ) ​
print("")​
print(f"best_score: {optimizer.best_score_}")​
print(f"elapsed_time: {round(end_time-start_time, 1)}")​

La sortie du code ci-dessus Comme suit :​

Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

Résultats de l'optimisation bayésienne​

Un autre ensemble de résultats intéressants ! Le best_score est cohérent avec les résultats que nous avons obtenus avec la recherche par grille et aléatoire, mais le résultat n'a pris que 23,1 secondes contre 75,5 secondes pour la recherche aléatoire et 352,0 secondes pour la recherche par grille ! En d’autres termes, l’utilisation de l’optimisation bayésienne prend environ 93 % de temps en moins que la recherche sur grille. Il s’agit d’un énorme gain de productivité qui devient plus significatif dans des modèles et des espaces de recherche plus grands et plus complexes. ​

Notez que l'optimisation bayésienne n'a utilisé que 10 itérations pour obtenir ces résultats car elle peut apprendre des itérations précédentes (par opposition à la recherche aléatoire et à la grille).

Comparaison des résultats

Le tableau ci-dessous compare les résultats des trois méthodes discutées jusqu'à présent. La colonne « Méthodologie » décrit la méthode d'optimisation des hyperparamètres utilisée. Viennent ensuite les hyperparamètres sélectionnés à l’aide de chaque méthode. Le « Meilleur score » est le score obtenu à l'aide d'une méthode spécifique, puis le « Temps écoulé » représente le temps qu'il a fallu pour que la stratégie d'optimisation s'exécute sur mon ordinateur portable local. La dernière colonne, Efficacité gagnée, prend la recherche par grille comme référence, puis calcule l'efficacité gagnée par chacune des deux autres méthodes par rapport à la recherche par grille (en utilisant le temps écoulé). Par exemple, étant donné que la recherche aléatoire prend 75,5 secondes et la recherche par grille 352,0 secondes, l'efficacité de la recherche aléatoire par rapport à la référence de recherche par grille est calculée comme étant de 1 à 75,5/352,0 = 78,5 %. ​

Comparaison de l'optimisation des hyperparamètres : recherche de grille, recherche aléatoire et optimisation bayésienne

Tableau 2 - Tableau de comparaison des performances des méthodes​

Deux conclusions principales du tableau de comparaison ci-dessus :​

  1. Efficacité : nous pouvons voir comment des méthodes d'apprentissage telles que l'optimisation bayésienne peuvent obtenir de meilleurs résultats en moins de temps. ensemble optimisé d’hyperparamètres.
  2. Sélection des paramètres : il peut y avoir plusieurs réponses correctes. Par exemple, les paramètres sélectionnés pour l'optimisation bayésienne sont différents de ceux pour la recherche par grille et aléatoire, bien que la métrique d'évaluation (c'est-à-dire best_score) reste la même. Ceci est encore plus important dans les environnements plus vastes et plus complexes. ​

Conclusion

Dans cet article, nous avons discuté de ce qu'est l'optimisation des hyperparamètres et présenté les trois méthodes les plus couramment utilisées pour cet exercice d'optimisation. Nous présentons ensuite chacune de ces trois méthodes en détail et les mettons en œuvre dans un exercice de classification. Enfin, nous comparons les résultats de la mise en œuvre des trois méthodes. Nous constatons que des méthodes telles que l'optimisation bayésienne apprises lors de tentatives précédentes peuvent améliorer considérablement l'efficacité, ce qui peut être un facteur important dans les grands modèles complexes tels que les réseaux neuronaux profonds, où l'efficacité peut être un facteur déterminant. ​

Présentation du traducteur

Zhu Xianzhong, rédacteur en chef de la communauté 51CTO, blogueur expert 51CTO, conférencier, professeur d'informatique dans une université de Weifang et vétéran de l'industrie de la programmation indépendante. ​

Titre original : ​​Optimisation des hyperparamètres — Introduction et implémentation de la recherche en grille, de la recherche aléatoire et de l'optimisation bayésienne​​, auteur : Farzad Mahmoodinobar​



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer