# Hyperparamètre

Dans l'apprentissage automatique, un hyperparamètre est un paramètre dont la valeur est utilisée pour contrôler le processus d'apprentissage. En revanche, les valeurs des autres paramètres (généralement la pondération de nœuds) sont obtenues par apprentissage.
Les hyperparamètres peuvent être classifiés comme étant des hyperparamètres de modèle, qui ne peuvent pas être déduits en ajustant la machine à l'ensemble d'entraînement parce qu'ils s'appliquent à la tâche de la sélection du modèle, ou des hyperparamètres d'algorithmes, qui en principe n'ont aucune influence sur la performance du modèle mais affectent la rapidité et la qualité du processus d'apprentissage. Un exemple d'hyperparamètre de modèle est la topologie et la taille d'un réseau de neurones. Des exemples d'hyperparamètres d'algorithme sont la vitesse d'apprentissage et la taille des lots.
Les différents hyperparamètres varient en fonction de la nature des algorithmes d'apprentissage, par exemple certains algorithmes d'apprentissage automatique simples (comme la régression des moindres carrés ) n'en nécessitent aucun. Compte tenu de ces hyperparamètres, l'algorithme d'apprentissage apprend les paramètres à partir des données. Par exemple, la régression LASSO est un algorithme qui ajoute un hyperparamètre de régularisation à la régression des moindres carrés , qui doit être défini avant d'estimer les paramètres via l'algorithme d'apprentissage.

## Considérations

Le temps requis pour entraîner et tester un algorithme d'apprentissage automatique peut dépendre du choix de ses hyperparamètres. Un hyperparamètre est généralement de type continu ou entier, conduisant à des problèmes d'optimisation de type mixte. L'existence de certains hyperparamètres est conditionnée à la valeur d'autres, par exemple la taille de chaque couche cachée dans un réseau de neurone peut être conditionnée par le nombre de couches ce celui-ci les deux ayant de l'influence l'un sur l'autre.

### Difficulté à apprendre les paramètres

Parfois, les hyperparamètres ne peuvent pas être appris en utilisant des méthodes bien connues basées sur le gradient qui sont couramment utilisées pour apprendre les paramètres. Ces hyperparamètres sont les paramètres décrivant une représentation du modèle qui ne peut pas être appris par des méthodes d'optimisation classiques mais qui affectent néanmoins la fonction d'objectif.
Un exemple serait l'hyperparamètre de tolérance aux erreurs dans les machines à vecteurs de support.

### Paramètres non entraînables

Parfois, les hyperparamètres ne peuvent pas être appris à partir des données d'entraînement car ils augmentent de manière agressive la capacité d'un modèle et peuvent pousser la fonction de perte à un mauvais minimum - surajustement et captation du bruit, dans les données - par opposition à cartographier correctement la richesse de la structure dans les données. Par exemple, si nous traitons le degré d'une équation polynomiale ajustant un modèle de régression comme un paramètre entraînable, cela augmenterait simplement le degré jusqu'à ce que le modèle corresponde parfaitement aux données, donnant une petite erreur d'apprentissage - mais de mauvaises performances de généralisation.
La plupart des variations de performances peuvent être attribuées à quelques hyperparamètres$^,$$^,$. L'optimisation d'un algorithme, d'un hyperparamètre ou d'hyperparamètres en interaction est une mesure des performances pouvant être obtenues en le réglant. Pour un LSTM, alors que le taux d'apprentissage suivi de la taille du réseau sont ses hyperparamètres les plus cruciaux , le batching et le momentum n'ont aucun effet significatif sur ses performances.
Bien que certaines recherches aient préconisé l'utilisation de tailles de mini-lots par milliers, d'autres travaux ont trouvé les meilleures performances avec des tailles de mini-lots comprises entre 2 et 32.
Une stochasticité inhérente à l'apprentissage implique directement que la performance empirique des hyperparamètres n'est pas nécessairement sa vraie performance. Les méthodes qui ne sont pas robustes à de simples changements d'hyperparamètres, à des germes aléatoires ou même à différentes implémentations du même algorithme ne peuvent pas être intégrées dans des systèmes de contrôle critiques sans simplification et robustesse significatives.
Les algorithmes d'apprentissage par renforcement, en particulier, nécessitent de mesurer leurs performances sur un grand nombre de germes aléatoires, ainsi que de mesurer leur sensibilité aux choix des hyperparamètres. Leur évaluation avec un petit nombre de graines aléatoires ne saisit pas correctement les performances en raison de la forte variance. Certaines méthodes d'apprentissage par renforcement, par exemple DDPG (Deep Deterministic Policy Gradient), sont plus sensibles aux choix des hyperparamètres que d'autres.

## Optimisation

L'optimisation des hyperparamètres trouve un tuple d'hyperparamètres qui produit un modèle optimal qui minimise une fonction d'objectif prédéfinie sur des données de test données. La fonction d'objectif prend un tuple d'hyperparamètres et renvoie le coût associé.
L'optimisation des hyperparamètres se fait en définissant une grille de recherche qui contient plusieurs configurations d'hyperparamètres à tester. La grille de recherche peut être établie de trois manières :
- en construisant une grille exhaustive explorant toutes les combinaisons possibles des valeurs à tester (analyse parfois dite "full factorielle"), usuellement à l'aide d'un outil du type GridSearchCV. Étudier 5 hyperparamètres à 5 niveaux chacun revient à explorer 5^5=3125 combinaisons possibles, cette "explosion combinatoire" peut donc rendre l'optimisation quasiment impossible en pratique par manque de moyens de calcul
- en construisant une grille aléatoire en explorant un nombre plus restreint de combinaisons, fixé à l'avance, usuellement à l'aide d'un outil du type RandomizedSearchCV. Cette approche est plus parcimonieuse que l'approche précédente et plus "créative" car elle permet d'explorer des combinaisons nouvelles à chaque fois plutôt que des combinaisons pré-établies en un temps réduit
- en construisant progressivement et "intelligemment" la grille. Les deux approches précédentes sont "aveugles" et vont calculer chaque combinaison demandée, y compris celles qui sont infructueuses. Une grille "intelligente" se concentre sur les combinaisons "prometteuses", en réalisant d'abord une première grille aléatoire de petite taille, puis en essayant de "comprendre" comment l'erreur diminue ou non en fonction des hyperparamètres testés, pour se focaliser sur les zones où l'erreur est la plus faible. Chaque combinaison d'hyperparamètres étant potentiellement lourde à évaluer en temps de calcul (puisqu'il s'agit d'entraîner une IA à chaque fois), l'erreur est estimée indirectement, non pas en examinant réellement l'erreur des combinaisons, mais en examinant une approximation de l'erreur des combinaisons (une fois une approximation prometteuse trouvée, la combinaison est effectivement testée directement). L'outil de recherche "intelligente" modélise l'erreur par machine learning. Il y a deux donc modèles IA imbriqués dans cette approche, le premier est le modèle que l'on cherche à construire et à optimiser, le second est un modèle construit uniquement pour optimiser le premier. Construire une IA étant un processus potentiellement lourd, le second modèle IA est généralement un modèle très simple, très rapide à entraîner, pour ne pas ajouter de la complexité à la complexité (usuellement une random forest ou un gradient boosting "légers" ou un processus gaussien simple). Des packages Python comme Scikit-Optimize ou HyperOpt permettent de réaliser ce type de recherche bayésienne "intelligente". Cette approche est séduisante sur le papier et peut effectivement parfois donner de bons résultats (erreur plus faible et/ou trouvée plus rapidement qu'avec une grille exhaustive ou aléatoire), mais reste encore un domaine de recherche à perfectionner (il n'est pas rare, en pratique, que cette approche se révèle finalement plus longue et moins précise qu'une grille exhaustive ou aléatoire$^,$).

## Reproductibilité

Outre le réglage des hyperparamètres, l'apprentissage automatique implique de stocker et d'organiser les paramètres et les résultats, et de s'assurer qu'ils sont reproductibles. En l'absence d'une infrastructure robuste à cet effet, le code utilisé durant la recherche évolue souvent rapidement et compromet des aspects essentiels de la méthode scientifique comme la comptabilité et la reproductibilité . Les plateformes de collaboration en ligne pour l'apprentissage automatique vont plus loin en permettant aux scientifiques de partager, d'organiser et de discuter automatiquement de leurs expériences, des données et des algorithmes utilisés. La reproductibilité peut être particulièrement problématique pour les modèles d'apprentissage profond.

### Prestations de service

| Nom | Interfaces |
| Comet.ml | Python |
| OpenML$^,$$^,$ | REST, Python, Java, R |
| Weights & Biases | Python |

### Logiciel

| Nom | Interfaces | Stockage |
| Détermined AI | REST, Python | PostgreSQL |
| OpenML Docker$^,$$^,$$^,$ | REST, Python, Java, R | MySQL |
| Sacred$^,$ | Python | fichier, MongoDB, TinyDB, SQL |