Un réseau de neurones apprend, c’est-à-dire qu’il ajuste par itérations ses paramètres pour aboutir au résultat souhaité : prédire un mot, identifier des entités dans un texte, classifier une clause dans un contrat…
L’opérateur doit ajuster les hyperparamètres comme le nombre d’itérations ou la vitesse d’apprentissage pour optimiser cette phase. En cela, un réseau de neurones n’apprend pas « tout seul », il est nécessairement piloté par un humain. Il doit donc être possible d’identifier et de tracer les éléments clés de ce pilotage.
Ce pilotage vise à optimiser l’apprentissage en fonction des objectifs et des contraintes du projet. Il existe un lien fort entre le réglage des hyperparamètres d’apprentissage et les métriques d’évaluation.
Cette interaction doit aboutir à un modèle dont l’entraînement est jugé satisfaisant pour être mis en production, c’est-à-dire utilisé concrètement seul ou au sein d’un applicatif plus vaste.
Avant d’aborder la phase d’entraînement, faisons un détour sur les enjeux calculatoires posés.
Un problème de capacité
La difficulté à entraîner un modèle comme GPT tient en partie à la puissance de calcul nécessaire. Pour se rendre compte de ce qu’un milliard de paramètres représente, voici un schéma :
Schéma RAM – Entraînement vs Inférence
Lorsqu’on entraîne un modèle, l’objectif est d’apprendre la valeur des poids qui minimise le coût. Mais lors de cette phase, il est nécessaire de stocker d’autres valeurs associées au poids. L’addition en mémoire pour un paramètre complet (poids + autres variables) monte rapidement comme le montre le schéma.
Pour se donner un ordre d’idée, GPT 3.x a 178 milliards de paramètres donc son entraînement nécessite 80*178 Go de RAM. Cela n’est évidemment pas accessible facilement.
Une des techniques utilisées est la quantization qui consiste à abaisser le nombre d’octets nécessaires pour représenter un paramètre. Evidemment, cela se fait au prix d’une moindre précision du paramètre. L’état de l’art aujourd’hui est d’utiliser une représentation de type bfloat16 spécifiquement élaborée pour le machine learning qui permet de diviser par deux le nombre d’octets requis pour représenter un paramètre. Même là, l’addition reste salée !
L’ajustement des hyperparamètres
Les hyperparamètres sont de deux natures :
- les premiers sont relatifs à l’architecture du réseau de neurones : le nombre de couches, la taille, etc. ;
- les seconds vont être ajustés pendant la phase d’apprentissage comme la vitesse, le nombre d’itérations, la taille des données à traiter en parallèle…
Illustration : journal de sortie d’entraînement d’un modèle
Les lignes suivantes correspondent aux informations produites par l’entraînement d’un réseau de neurones visant à classifier des bouts de textes en plusieurs catégories (classes). Voici les informations qu’elles contiennent :
- l’epoch est un hyperparamètre qui correspond à un cycle d’apprentissage sur les données (un passage entier) ;
- les données ne sont pas injectées en une fois dans le modèle mais sous forme de lots (batches). La taille de ces lots est un hyperparamètre ;
- la métrique utilisée ici est l’exactitude (accuracy). On voit qu’elle augmente au fur et à mesure de l’apprentissage. Elle est également appliquée au jeu de données de validation (non vues pendant l’entraînement) pour évaluer le modèle à chaque cycle (epoch).
Les choix opérés pendant cette phase, comme la sélection des métriques d’évaluation, va avoir des conséquences sur le rendu final, c’est-à-dire la capacité du modèle à prédire.
Une fois entraîné, le modèle est figé totalement ou partiellement. On peut alors l’utiliser pour le faire se spécialiser sur certaines tâches moyennant un entraînement complémentaire ou tel quel.