Optimisez les modèles d'apprentissage automatique grâce à l'élagage de modèle. Obtenez une inférence plus rapide, une utilisation réduite de la mémoire et une efficacité énergétique pour les déploiements aux ressources limitées.
L'élagage des modèles est une technique d'optimisation de modèle conçue pour réduire la taille et la complexité informatique des réseaux neuronaux en supprimant les paramètres paramètres inutiles. Lorsque les modèles d'intelligence artificielle s'agrandissent pour atteindre de meilleures performances, ils deviennent souvent trop paramétrés, contenant de nombreuses connexions ou neurones qui contribuent peu à la sortie finale. Ils contiennent de nombreuses connexions ou neurones qui contribuent peu à la sortie finale. En identifiant et en éliminant ces composants redondants, les développeurs peuvent créer des modèles plus légers qui nécessitent moins de mémoire et d'énergie, tout en offrant une inférence en temps réel plus rapide. tout en offrant une inférence en temps réel plus rapide. Ce processus est particulièrement vital pour le déploiement d'architectures sophistiquées telles que YOLO11 sur du matériel où les ressources sont rares, comme les les téléphones portables ou les capteurs intégrés.
Le processus d'élagage comprend généralement trois étapes principales : la formation, l'élagage et l'affinage. l 'ajustement. Dans un premier temps, un grand modèle est entraîné jusqu'à convergence pour capturer des caractéristiques complexes. Au cours de la phase d'élagage, un algorithme évalue l'importance de certains paramètres paramètres spécifiques, généralement weights and biases-sur la base de sur la base de critères tels que l'ampleur ou la sensibilité. Les paramètres jugés insignifiants sont mis à zéro ou entièrement supprimés.
Cependant, le simple fait de découper des parties d'un réseau peut en dégrader la précision. sa précision. Pour y remédier, le modèle est soumis à une de réentraînement appelé "réglage fin". Cette étape permet aux paramètres restants de s'ajuster et de Cette étape permet aux paramètres restants de s'ajuster et de compenser les connexions manquantes, ce qui permet souvent de restaurer les performances du modèle à des niveaux proches de ceux d'origine. L'efficacité de cette L'efficacité de cette approche est étayée par l'hypothèse du l 'hypothèse du ticket de loterie, qui suggère que les réseaux denses contiennent des sous-réseaux plus petits capables d'atteindre des niveaux de performance comparables. des sous-réseaux plus petits capables d'atteindre une précision comparable lorsqu'ils sont formés de manière isolée.
Les stratégies d'élagage sont généralement classées en fonction de la structure des composants supprimés :
Bien que ces deux techniques d'optimisation soient populaires, il est important de distinguer l'élagage de la quantification du modèle. quantification du modèle. L'élagage se concentre sur la réduction le nombre de paramètres (connexions ou neurones), ce qui a pour effet de modifier l'architecture du modèle. En revanche, la quantification En revanche, la quantification réduit la précision de ces paramètres, par exemple en convertissant des nombres à virgule flottante de 32 bits en nombres entiers de 8 bits. à virgule flottante de 32 bits en entiers de 8 bits. Ces méthodes sont souvent complémentaires ; un développeur peut d'abord élaguer un modèle modèle pour supprimer la redondance, puis le quantifier pour minimiser son empreinte mémoire en vue du déploiement. déploiement.
L'élagage joue un rôle essentiel pour rendre la vision vision artificielle avancée dans des scénarios pratiques :
Des frameworks comme PyTorch fournissent des utilitaires intégrés pour appliquer l'élagage l'élagage de manière programmatique. L'exemple suivant montre comment appliquer un élagage non structuré à une couche de une opération courante avant d'exporter un modèle dans un format optimisé tel que ONNX.
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of the connections
# This sets the smallest 30% of weights (by absolute value) to zero
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity: calculate the percentage of zero parameters
sparsity = float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Layer sparsity: {sparsity:.2%}")