Model Weights
Les poids d’un modèle sont les valeurs apprises qui transforment les entrées d’un réseau en prédictions. Présentation de leur apprentissage, des fichiers de poids et de la compression.
Les poids d’un modèle sont les nombres apprenables d’un réseau de neurones qui transforment ses entrées en prédictions. Chaque poids ajuste le signal transmis entre deux unités ou constitue une valeur d’un filtre de convolution, et l’ensemble des poids encode tout ce que le modèle a appris à partir de ses données d’entraînement. Le terme est souvent employé au sens large pour désigner tous les paramètres appris d’un modèle, notamment les biais et les valeurs de normalisation, comme dans « poids préentraînés » ou « modèles à poids ouverts ». Le nombre de poids varie de plusieurs ordres de grandeur : ResNet-50 compte environ 25,6 millions de paramètres, tandis que les grands modèles de langage en comptent des milliards.
Comment l’entraînement définit les poids#
Un nouveau réseau commence avec de petits poids aléatoires, tirés de méthodes telles que l’initialisation de He, qui adaptent l’échelle des valeurs aléatoires à la taille de chaque couche afin que les signaux ne disparaissent pas et n’explosent pas en traversant de nombreuses couches. À ce stade, les prédictions du modèle sont du bruit. L’entraînement répète ensuite un cycle pour chaque lot de données : une passe avant produit des prédictions, une fonction de perte mesure leur erreur, la rétropropagation calcule la contribution de chaque poids à cette erreur, puis un optimiseur, comme la descente de gradient stochastique (SGD) ou l’optimiseur Adam, ajuste légèrement chaque poids pour la réduire. Après des millions de ces petits ajustements, les poids convergent vers des valeurs qui produisent des prédictions précises et restent fixes pendant l’inférence.
Poids et termes associés#
- Biais : Dans une couche qui calcule
y = Wx + b, les poidsWmultiplient les entrées et le biaisbajoute un décalage, ce qui permet à la fonction d’activation d’une unité de déplacer son seuil et de produire une sortie non nulle lorsque toutes les entrées sont nulles. Les deux sont appris pendant l’entraînement. - Hyperparamètres : Des réglages tels que le taux d’apprentissage et la taille des lots, choisis avant l’entraînement, qui contrôlent la façon dont les poids sont appris. La descente de gradient ne les met pas à jour.
- Activations : Les sorties intermédiaires qu’un réseau calcule pour une entrée donnée. Les poids restent identiques pour chaque entrée, tandis que les activations sont recalculées pour chacune.
- Weights & Biases : Une plateforme de suivi des expériences dont le nom reprend celui des deux types de paramètres.
Enregistrer et charger des poids#
Les poids entraînés sont enregistrés dans des fichiers pour pouvoir être rechargés pour l’inférence, partagés ou utilisés comme point de départ pour l’apprentissage par transfert. Dans PyTorch, les poids d’un modèle se trouvent dans son state_dict et sont généralement enregistrés dans des fichiers .pt. Ces fichiers utilisent le format pickle de Python, qui peut exécuter du code au chargement ; depuis PyTorch 2.6, torch.load utilise donc weights_only=True par défaut. Le format safetensors ne stocke que des tenseurs bruts, ce qui exclut l’exécution de code et permet un chargement rapide avec mappage mémoire ; c’est le format standard sur Hugging Face. Les fichiers ONNX regroupent les poids et le graphe de calcul afin que d’autres environnements d’exécution puissent exécuter le modèle.
Les points de contrôle .pt d’Ultralytics YOLO26 stockent une moyenne mobile exponentielle (EMA) des poids, qui lisse le bruit d’une étape à l’autre, ainsi que les arguments d’entraînement et les résultats par époque ; chaque exécution d’entraînement enregistre best.pt et last.pt dans son dossier weights. Charger la même architecture avec et sans poids entraînés montre où se trouve le savoir du modèle :
from ultralytics import YOLO
# Same YOLO26n architecture with two different sets of weights
trained = YOLO("yolo26n.pt") # weights learned on COCO
untrained = YOLO("yolo26n.yaml") # randomly initialized weights
for name, model in [("trained", trained), ("untrained", untrained)]:
results = model("https://ultralytics.com/images/bus.jpg")
print(f"{name}: {len(results[0].boxes)} objects detected")Les poids entraînés repèrent le bus et les personnes dans l’image, tandis que la copie de ce même réseau initialisée aléatoirement ne détecte rien.
Compresser les poids pour le déploiement#
La précision des poids détermine la taille du fichier du modèle et son empreinte mémoire, ce qui compte particulièrement pour les appareils d’IA en périphérie. La quantification de modèle stocke les poids avec une précision inférieure ; passer de nombres à virgule flottante sur 32 bits à des entiers sur 8 bits les rend quatre fois plus petits et accélère l’inférence sur le matériel prenant en charge les entiers. L’élagage supprime les poids qui contribuent peu à la sortie, et la distillation de connaissances entraîne un modèle plus petit à imiter un modèle plus grand. À titre indicatif, un modèle de langage de 7 milliards de paramètres nécessite environ 28 Go pour ses poids en 32 bits, 14 Go en 16 bits et 3,5 Go en 4 bits.










