Une représentation mentale utile
Imaginez l’architecture d’un modèle comme un ensemble d’équations comportant des emplacements numérotés vides. L’architecture détermine l’emplacement de ces emplacements et leurs connexions. Les paramètres sont les nombres placés dans ces emplacements.
Cette distinction est importante. Deux modèles peuvent avoir la même architecture, mais se comporter différemment parce que leurs valeurs de paramètres diffèrent. Avant l’entraînement, les emplacements contiennent des valeurs initialisées. L’entraînement ajuste une partie ou la totalité de ces valeurs à l’aide de données. Pendant l’inférence, le modèle conserve normalement ces valeurs fixes et applique le calcul obtenu à de nouvelles entrées.
Un paramètre n’est pas un bouton que l’utilisateur règle pour chaque requête. Il fait partie intégrante du modèle.
Fonctionnement des paramètres
Une couche de réseau neuronal effectue généralement un calcul de la forme suivante :
[
\text{sortie} = f(\text{entrée} \times \text{matrice des poids} + \text{vecteur de biais})
]
La matrice des poids et le vecteur de biais contiennent des paramètres. La fonction (f) fait partie de l’architecture et peut ne contenir aucun paramètre propre.
L’architecture fixe les dimensions des tenseurs de paramètres. Si une couche relie 2 valeurs d’entrée à 3 valeurs de sortie, sa matrice des poids doit contenir 6 valeurs scalaires :
2 inputs ──> [2 × 3 weight matrix] ──> 3 outputs
+
[3-value bias vector]Chaque valeur scalaire stockée indépendamment compte comme un paramètre. Le modèle utilise ces mêmes valeurs pour chaque exemple qu’il traite. Appliquer un paramètre un million de fois ne le transforme pas en un million de paramètres.
Pendant l’entraînement, un optimiseur reçoit des informations sur l’effet qu’aurait une petite modification de chaque paramètre entraînable sur l’erreur du modèle. Il met ensuite les valeurs à jour. La répétition de ce processus peut produire un ensemble de paramètres qui associe de nouvelles entrées à des sorties utiles.
Le terme « entraînable » doit être utilisé avec précaution. Un paramètre peut être gelé afin qu’une exécution particulière de l’entraînement ne le mette pas à jour. Il fait néanmoins toujours partie de l’état ajusté du modèle. Les frameworks stockent également d’autres états qui influencent le calcul sans être considérés comme des paramètres. PyTorch appelle cet état un buffer, tandis que Keras utilise une collection plus large de « poids » et la divise en poids entraînables et non entraînables.
Exemple de calcul du nombre de paramètres
Considérons un petit réseau comportant deux valeurs d’entrée, une couche cachée avec trois sorties et une sortie finale.
La première couche possède :
- (2 \times 3 = 6) poids
- 3 biais
- 9 paramètres au total
La couche finale possède :
- (3 \times 1 = 3) poids
- 1 biais
- 4 paramètres au total
Le réseau complet possède (9 + 4 = 13) paramètres.
Les valeurs d’entrée ne comptent pas comme des paramètres, car elles changent d’un exemple à l’autre. Les sorties intermédiaires ne comptent pas non plus : ce sont des résultats temporaires. Les fonctions d’activation de cet exemple n’ajoutent aucun paramètre. Seules les valeurs stockées indépendamment dans les matrices de poids et les vecteurs de biais contribuent au décompte.
Cette méthode fondée sur les dimensions s’applique aux modèles plus grands : comptez les valeurs scalaires de chaque tenseur de paramètres, puis additionnez-les. Si des paramètres sont partagés, comptez une seule fois les valeurs stockées, et non chaque emplacement où le modèle les utilise.
Pourquoi le nombre de paramètres est important
Le nombre de paramètres décrit la taille de l’état numérique appris d’un modèle. Il influence plusieurs propriétés pratiques.
Premièrement, les paramètres stockés occupent de la mémoire. La quantité dépend du nombre de paramètres et de la représentation de chaque valeur. Une représentation sur 16 bits utilise deux octets par valeur scalaire stockée, avant même de tenir compte de l’état non paramétrique et des informations supplémentaires du fichier.
Deuxièmement, les paramètres participent aux calculs. Un plus grand nombre de paramètres implique souvent davantage d’opérations arithmétiques, même si l’architecture, le partage des paramètres et les parties du modèle qui sont actives peuvent modifier cette relation.
Troisièmement, le nombre de paramètres aide à décrire la capacité d’un modèle à ajuster des motifs. Il ne mesure pas la qualité avec laquelle cette capacité a été exploitée. Les données d’entraînement, l’objectif, l’architecture, l’optimisation et l’évaluation jouent tous un rôle. Un modèle ayant davantage de paramètres n’est pas automatiquement plus précis, plus informé ou plus utile.
Les nombres de paramètres doivent également être accompagnés d’une indication. Un outil ou un article peut rapporter le nombre total de paramètres, uniquement les paramètres actuellement marqués comme entraînables, ou un nombre qui exclut les plongements. Ces nombres répondent à des questions différentes et ne doivent pas être comparés comme s’ils étaient identiques.
Idées fausses courantes
Les paramètres ne sont pas des hyperparamètres
Les paramètres sont des valeurs ajustées dans le cadre du modèle. Les hyperparamètres configurent le modèle ou le processus d’entraînement. Le taux d’apprentissage et la taille des lots sont des hyperparamètres courants : ils influencent le déroulement de l’entraînement, mais ne sont pas des valeurs apprises à l’intérieur du modèle obtenu.
Paramètres et poids ne sont pas des synonymes exacts
Les poids constituent une catégorie importante de paramètres, si bien que ces termes sont souvent employés indifféremment. Mais un biais est également un paramètre, tout comme les valeurs d’échelle et de décalage apprises dans certaines couches de normalisation. « Poids » peut aussi avoir un sens plus large, propre à un framework. Pour interpréter correctement un nombre de paramètres, il est plus sûr de se référer à la définition donnée par l’outil ou l’éditeur du modèle qui l’a produit.
Un paramètre n’équivaut pas à un fait
Le comportement d’un modèle entraîné résulte de l’action conjointe de nombreuses valeurs de paramètres. Une valeur isolée n’a généralement pas de signification formulable en langage courant, comme « Paris est la capitale de la France ». L’information peut être répartie entre de nombreuses valeurs, et une même valeur peut influencer de nombreuses sorties.
Davantage de paramètres ne garantit pas un meilleur modèle
Le nombre de paramètres mesure une quantité, pas une qualité. Accroître la capacité peut être utile lorsque l’architecture, les données et l’entraînement l’exploitent efficacement. Cela peut aussi gaspiller de la mémoire et des calculs, ou ajuster des motifs indésirables. Les performances doivent être mesurées sur la tâche qui compte.
Toute valeur stockée n’est pas nécessairement un paramètre
Les modèles peuvent conserver des statistiques cumulées, des caches ou d’autres états parallèlement aux paramètres. Les frameworks classent ces états différemment. Pour obtenir un décompte exact, utilisez l’énumération des paramètres du framework plutôt que la taille de chaque tenseur d’un checkpoint.
La place des paramètres dans un modèle
L’architecture du réseau neuronal détermine les opérations et les dimensions des tenseurs de paramètres. L’initialisation fournit les valeurs de départ de ces tenseurs. L’entraînement modifie les valeurs entraînables. Un checkpoint enregistre les valeurs obtenues, souvent avec un état supplémentaire. L’inférence les charge et les utilise pour calculer les sorties.
Les paramètres ne constituent donc ni l’intégralité du modèle ni une simple spécification de modèle. Un modèle entraîné utilisable associe une architecture à des valeurs de paramètres particulières.
Pour aller plus loin
Lisez Que sont les poids du modèle ? pour découvrir le rôle des multiplicateurs qui constituent la majeure partie des paramètres d’un réseau neuronal. Consultez ensuite Paramètres du modèle et poids du modèle pour comprendre la distinction exacte entre ces deux termes.