PC & Mobile

Algorithmes d'optimisation d'hyperparamètre en Python

Algorithmes d'optimisation d'hyperparamètre en Python


Table des matières

  1. Définitions basiques
  2. Optimisation basée sur un modèle séquentiel (SMBO)
  3. Types de SMBO: à base de Gauss et à base de TPE
  4. Des exemples pratiques utilisant Hyperopt

Définitions basiques

1. Hyperparamètres sont les variables de configuration intégrées d'un modèle. Ces variables nécessitent un réglage précis pour produire un modèle plus performant. Ces paramètres dépendent du modèle et varient d'un modèle à l'autre. Par exemple, un modèle de forêt aléatoire aura les hyperparamètres suivants

Caractéristiques internes d'un modèle de forêt aléatoire

Toutes les fonctionnalités ci-dessus sont des fonctionnalités intégrées d'un modèle. Pour les méthodes d’ensemble basées sur des arbres, telles que la forêt aléatoire ou le renforcement du gradient, max_depth, min_sample_leaf et n_estimators (nombre d’arbres dans l’ensemble) sont les plus importants.

2 Recherche de grille est la méthode algorithmique la plus basique pour l'optimisation d'hyper-paramètres. C'est comme exécuter des boucles imbriquées sur toutes les valeurs possibles de vos fonctionnalités intégrées. Les exemples rf_params ci-dessous contiennent des fonctionnalités de modèle qui nécessitent un réglage précis.

Dans le cas ci-dessus, le modèle sera recyclé 300 fois.
2 (n_estimator) * 3 (max_features) * 10 (max_depth) * 5 (exécutions cv) = 300

Il s’agit d’un espace de recherche extrêmement étroit car nous recherchons uniquement sur 3 éléments. Si nous effectuons une recherche exhaustive, le nombre de combinaisons pourrait facilement dépasser 10 000.

3 Recherche aléatoire est une recherche dans la grille où le prochain ensemble de fonctionnalités est sélectionné de manière aléatoire et où le nombre total d’exécutions a une limite supérieure.

Le code pour la recherche aléatoire est identique à GridSearch. La seule différence est que nous ajoutons n_iter = 100, ce qui fixe une limite supérieure pour le nombre de cycles autorisés. Recherche grille / aléatoire sont des exemples de recherche non informée ce qui signifie que le prochain ensemble de fonctionnalités est indépendant de la sortie des dernières exécutions. Les deux requièrent un recyclage dans chaque itération, ce qui représente un coût énorme.

Optimisation basée sur un modèle séquentiel (SMBO)

SMBO minimise la perte de validation en sélectionnant séquentiellement différents ensembles d'hyperparamètres, le prochain ensemble étant sélectionné par le raisonnement bayésien (en fonction des exécutions précédentes). Intuitivement, SMBO revient sur les résultats des dernières courses pour concentrer les recherches futures sur des domaines plus prometteurs.

SMBO est utilisé à chaque fois que la fonction fitness (f: X -> R) est coûteux à évaluer. Dans de tels cas, une approximation F (substitut M) est calculé. Ce modèle M est généralement moins coûteux à calculer. Typiquement, la boucle interne de SMBO est l’optimisation numérique de ce substitut ou une transformation de celui-ci (ligne 3 en dessous du code). Le point X* qui maximise le substitut devient la proposition pour laquelle la vraie fonction de perte F devrait être évalué (ligne 4).

Figure 1: Le pseudo-code de l'optimisation générique basée sur un modèle séquentiel

H: Historique d'observation
T: Nombre d'essais
f: vraie fonction
M: Fonction de substitution pour approcher f
S: calcule la prochaine assignation d'hyperparamètre
x *: exemple d'exemple où M est minimisé

Explication du pseudo code:
Ligne 1 : Initier un vide H.
Ligne 2: Lancez la boucle avec un nombre d'essais fixe.
Ligne 3:
1. L
gagner une fonction de substitution pour F appelé M.
2. Définissez un critère d'évaluation qui doit être minimisé.
3. S (x, M) est exécuté
pour plusieurs instances de x à trouver X* lequel minimise S.
Ligne 4: F est évalué pour le meilleur x.
Ligne 5: H est mis à jour avec la valeur actuelle de x, f (x).
Ligne 6: M est
mis à jour après chaque itération pour devenir une meilleure approximation de F.
Ligne 7:
Le processus se termine après un nombre fixe d'itérations.

Fonctions d'acquisition (S) définir un équilibre entre l'exploration de nouvelles zones dans l'espace objectif et l'exploitation de zones dont on sait déjà qu'elles ont des valeurs favorables. Différents types de SMBO utilisent différents algorithmes pour optimiser les améliorations attendues (EI, un choix populaire pour les fonctions d’acquisition). Par exemple, Hyperopt optimise l'assurance-emploi par le biais de TPE (Tree Parzen Estimators), tandis que Spearmint utilise des processus gaussiens pour l'optimiser.

SMBO optimise l'assurance-emploi (amélioration attendue)
  1. Pm: GP postérieur sachant H
  2. y *: valeur du substitut du nouveau candidat
  3. y: valeur du substitut du candidat précédent

Intuitivement, il définit le nombre d'EI non négatif par rapport à la meilleure valeur objective précédemment observée à un emplacement x donné.

Optimisation de l'IE basée sur les processus gaussiens

Processus gaussien (GP) est un processus stochastique (un ensemble de variables aléatoires indexées par le temps ou l’espace), tel que chaque ensemble fini de ces variables aléatoires a une distribution normale multivariée, c’est-à-dire que chaque combinaison linéaire finie est normalement distribuée.

GP est le substitut standard de la fonction objectif de modélisation (F) dans l'optimisation bayésienne. Dans un tel cadre F est supposé être un médecin généraliste vous et noyau de covariance K.Choix du noyau K peut avoir des implications majeures sur la reconstruction de substitution. Dans ce modèle d'approche M (ligne 6 de la figure 1) définit la distribution prédictive p (y | x, D).

Méthode d'estimation de Parzen arborescente (TPE)

Les TPE sont des estimateurs de noyau organisés en arborescence pour préserver la dépendance conditionnelle. Contrairement à l'approche basée sur les généralistes qui modélise p (y | x) directement TPE s'en rapproche par p (x | y) et p (y).

TPE apporte 2 modifications à la méthode de gestion générale permettant d'optimiser l'amélioration attendue.

  1. p (y | x) est remplacé par p (x | y) * p (y) / p (x)
  2. Cas 1: p (x | y) = l (x) si y <y *
    Cas 2: p (x | y) = g (x) si y≥y *
  • l (x) est la densité formée en utilisant les observations {X} tel que la perte correspondante f (x) était inférieur à y
  • g (x) comprend des observations restantes

Avec ces 2 distributions, on peut optimiser un terme de formulaire fermé proportionnel aux améliorations attendues.

Cela conduit à la conclusion suivante

EI après optimisations spécifiques à TPE

Cette dernière expression montre que pour maximiser l’amélioration, nous aimerions des points x avec une probabilité élevée sous l (x) et faible probabilité sous g (x). Cela signifie simplement de choisir x qui ont une probabilité plus élevée d'avoir l'assurance-emploi inférieure à la valeur rapportée précédente.

Optimisation pratique des paramètres avec Hyperopt

Hyperopt est une bibliothèque Python permettant d'effectuer un réglage de modèle automatisé via SMBO. L'application hyperopt pour l'optimisation de l'hyperparamètre est un processus en 3 étapes:

  1. Définir la fonction objectif.
  2. Définition de l'espace de recherche (xgb_space).
  3. Définir une base de données d'essais pour sauvegarder les résultats de chaque itération.

Le bloc de code suivant est un exemple sur la manière d'effectuer l'optimisation d'hyperparamètre pour xgboost (bibliothèque de renforcement de gradient).

Afin d’utiliser le même script pour d’autres modèles, il faut peu de modifications sur la base des modèles. Vous devez apporter des modifications à la variable xgb_space pour répondre à l'espace de recherche du modèle choisi. Dans la fonction objectif, vous devez modifier la manière dont la validation croisée est exécutée (comme nous avons utilisé la méthode xgb specifc), ainsi que la métrique que vous souhaitez réduire. Par exemple, pour LightGBM (consultez LightGBM pour en savoir plus sur cette bibliothèque géniale), vous pouvez utiliser le code tel quel en apportant des modifications mineures.

Je publierai à l'avenir un blog plus détaillé sur la bibliothèque hyperopt.

Ce blog donne un bref aperçu des techniques d’optimisation de l’hyperparamètre actuellement disponibles. Nous avons commencé avec les recherches non informées telles que les recherches grille / aléatoire, puis nous sommes passés à différentes méthodes bayésiennes telles que SMBO basée sur GP et SMBO basé sur TPE, puis un exemple concret d'hyperopt.

Références

Veuillez parcourir le matériel suivant si vous voulez creuser plus profondément

  1. Hyperopt github repository
  2. Papier hyperopt
  3. Algorithmes d'optimisation d'hyperparamètre

N'hésitez pas à partager vos pensées et vos idées dans la section commentaires.

Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer