Comprendre

Sélection et hyperparamétrage des modèles

Raphaël d'Assignies
12 mai 2023

Les données collectées et préparées doivent être injectées dans un ou plusieurs types de modèles d’apprentissage choisis généralement par le maître d’œuvre en fonction des objectifs et du problème traité. Il existe pléthore d’algorithmes dans le domaine du Machine Learning qui peuvent répondre à différents objectifs.

A ce stade, il faut distinguer deux types d’hyperparamètres :

  • ceux qui définissent l’architecture du modèle ;
  • ceux qui sont utilisés pendant la phase d’entraînement.

💡Paramètres et hyperparamètres :

Les hyperparamètres ne doivent pas être confondus avec les paramètres. Ces derniers – également appelés poids – sont les valeurs que le modèle acquiert pendant la phase d’apprentissage. Ce sont ces valeurs qui vont permettre au modèle de prédire le mot suivant à partir d’une séquence dans GPT.

Les hyperparamètres du modèle

La première série d’hyperparamètres est relative à l’architecture du modèle. Lorsqu’il s’agit d’un réseau de neurones (Deep Learning), ils sont constitués du type de couche, de leur nombre, des fonctions d’activation utilisées, etc.

Le plus souvent, le maître d’œuvre ne part pas d’une feuille blanche. Il va sélectionner des modèles sur étagère souvent issus du monde de la recherche comme les Transformers.

Ces modèles peuvent être recréés à partir de librairies logicielles qui fournissent les briques élémentaires comme l’illustre l’exemple ci-après ou utilisés directement via des services en ligne comme AWS ou GCP.

Parfois, il s’agit de mixer un modèle figé (pré-entraîné) et de lui ajouter une couche entraînable pour accomplir une tâche particulière ou l’adapter à un domaine spécifique.

Voici un bout de code utilisant la librairie pytorch qui met en œuvre un classifieur de texte simple avec une couche linéaire.

def __init__(self, vocab_size, embed_dim, num_class):
    super(TextClassificationModel, self).__init__()
    self.embedding = nn.EmbeddingBag(vocab_size, embed_dim, sparse=True)  # 
    self.fc = nn.Linear(embed_dim, num_class # 
    self.init_weights()

def init_weights(self): # 
    initrange = 0.5
    self.embedding.weight.data.uniform_(-initrange, initrange)
    self.fc.weight.data.uniform_(-initrange, initrange)
    self.fc.bias.data.zero_()

Combien faut-il de paramètres ?

La performance d’un modèle dépend de son architecture mais également d’un subtile équilibre entre quantité de données d’entraînement et nombre de paramètres.

Il existe un optimum entre ces deux variables. Si vous n’avez pas assez de données par rapport aux paramètres, le modèle sera sous-entraîné. Si le modèle contient plus de paramètres que nécessaires au volume de données, il sera sur-paramétrisé.

Les chercheurs ont modélisé cet optimum, connu sous le nom de Chinchilla Law. Ce papier modélise le nombre de paramètres et de tokens optimum pour un budget donné représenté sous forme de puissance de calcul.

Il ressort qu’il faut 20 tokens par paramètre pour atteindre le maximum d’efficience.

Cette loi doit être respectée pour optimiser son budget et fait partie des éléments clés dans un projet d’IA autour du langage. Encore faut-il avoir les ressources en données nécessaires pour entraîner le modèle !

Les hyperparamètres d’apprentissage

La deuxième série d’hyperparamètres concerne ceux qui permettent d’entraîner effectivement le modèle comme la vitesse, le nombre d’itérations, la taille des données à traiter en parallèle…