Revue des méthodes de compactage des réseaux de neurones
Avez-vous déjà pensé à la performance d’un réseau de neurones et à la quantité de poids mort ? Combien de neurones font vraiment un travail significatif, combien ne sont pas bien formés ou juste formés pour faire quelque chose que vous ne leur demanderez jamais de faire ?
Et… et si nous pouvions trouver un moyen d’optimiser le réseau de neurones et de le rendre plus compact ?
Récemment, je me suis posé ces questions et j’ai cherché sur Google quels articles et articles sont disponibles sur Internet à ce sujet et j’ai trouvé une revue parfaite des différentes méthodes et approches du compactage des réseaux de neurones.
Cet article est basé sur le papier « Compacting Deep Neural Networks for Internet of Things: Methods and Applications » par Ke Zhang et. Al [1]. L’article original est une enquête complète de 25 pages sur le compactage des réseaux de neurones profonds, en mettant l’accent sur leur compactage pour les applications IoT. Cependant, les avantages d’un tel compactage sont importants non seulement pour l’IoT, mais dans tous les autres domaines, car chaque application bénéficiera de coûts réduits et de temps de traitement plus rapides, ce qui signifie également généralement une consommation d’énergie réduite.
La raison d’écrire cet article est que l’étude originale utilise un langage assez scientifique avec beaucoup de détails. Cela peut être bon pour un usage académique, mais souvent, nous avons juste besoin d’un bref aperçu des différentes méthodes et approches écrites en anglais simple, qui peuvent être trouvées ici.
Initialement, cet article a été commencé comme un résumé personnel pour moi-même, mais il a fini par être un peu long en raison de la complexité du domaine de recherche. Cela peut être utile pour d’autres personnes intéressées par ce sujet.
Dans le même temps, si vous recherchez plus de détails sur une méthode particulière, je vous suggère de lire l’article original et de suivre les liens vers d’autres études qui y sont contenues.
Il existe deux approches principales pour compacter les réseaux de neurones profonds (DNN) :
- Compactage d’un modèle pré-entraîné à l’aide de techniques telles que la quantification, l’élagage du réseau et la décomposition de rang inférieur. L’idée centrale de cette approche est de modifier le modèle initial et de le rendre plus petit.
- Entraînez directement un petit modèle à l’aide de techniques telles que la distillation des connaissances et la modification des structures de réseau à l’aide de la recherche d’architecture de réseau et de la conception d’unités de base artificielles. Dans ce cas, au lieu de modifier le modèle initial, nous l’utilisons (directement ou indirectement) pour créer un autre modèle plus petit qui imitera le comportement d’un grand modèle.
Ce sont les techniques suivantes de compactage du modèle de réseau :
- Quantification
- Élagage du réseau
- Décomposition de rang inférieur
Quantification
La quantification est une méthode de compression et d’accélération des applications en réduisant la surcharge des calculs à virgule flottante de haute précision. Le premier est que plusieurs neurones partagent un poids, mais la valeur de poids partagée doit être restaurée à sa position de neurone d’origine pendant l’inférence. Cela signifie que le processus de décodage est augmenté, ce qui augmente le temps d’inférence.
Ce dernier utilise des nombres à virgule fixe pour mapper des nombres à virgule flottante, économisant de la mémoire d’exécution et du temps d’inférence. Cependant, le premier comprime le modèle à un degré beaucoup plus élevé que le second. Il est plus adapté aux occasions où l’espace de stockage matériel est rare.
La quantification scalaire et vectorielle sont des techniques utilisées pour représenter les paramètres d’origine à l’aide d’un livre de codes et d’un ensemble de codes de quantification. Ces codes décrivent la distribution des centres de quantification dans le livre de codes et peuvent être encodés davantage à l’aide d’un codage sans perte pour une compression supplémentaire. En d’autres termes, il existe plusieurs méthodes de quantification scalaire et vectorielle, notamment la quantification k-moyenne, la quantification du produit et la quantification résiduelle.
Chacune de ces méthodes a un taux de compression différent et peut être utilisée dans différentes situations, selon le niveau de compression souhaité et les caractéristiques spécifiques des données compressées. Certains chercheurs ont également proposé des stratégies pour combiner ces méthodes ou les adapter à des situations spécifiques pour obtenir de meilleurs résultats.
La quantification à virgule fixe utilise des nombres à virgule fixe au lieu de nombres à virgule flottante, en s’appuyant sur le fait que les ordinateurs fonctionnent généralement beaucoup plus rapidement avec des calculs à virgule fixe, par rapport à des calculs à virgule flottante. En revanche, en présence de GPU et de TPU modernes, cette hypothèse doit probablement être vérifiée. L’article original passe en revue certaines méthodes de quantification FP, en les catégorisant en quantification low-bit et en quantification binaire/ternaire.
Élagage du réseau
L’idée générale derrière l’élagage du réseau semble très intuitive : pour rendre le modèle compact, supprimons simplement certaines parties moins importantes !
L’élagage basé sur la magnitude rend les poids clairsemés en supprimant certaines connexions ou neurones sans importance. La performance et le résultat final de cette méthode reposent uniquement sur la sélection correcte du critère d’élagage. Il est généralement difficile de déterminer le critère qui détermine la limite supérieure des performances du modèle après élagage.
Comme d’habitude, les meilleurs résultats ne sont pas obtenus en utilisant une seule méthode, mais en trouvant la bonne combinaison des bonnes méthodes, et une étude originale mentionne l’un des travaux de Han et al. [2] qui proposait une combinaison de méthodes d’élagage, de quantification et de codage Huffman, atteignant un taux de compression de 35x-49x !
L’élagage de canal, comme son nom l’indique, élague l’ensemble du canal au lieu de supprimer une seule connexion de neurone, ce qui présente au moins deux avantages. Tout d’abord, il n’introduit pas de parcimonie, de sorte qu’aucune implémentation logicielle ou matérielle spéciale n’est requise pour le modèle généré. Deuxièmement, la phase d’inférence ne nécessite pas de stockage massif sur disque ni de mémoire d’exécution. Comme pour l’élagage basé sur la magnitude, le critère utilisé pour l’élagage du canal joue un rôle assez crucial dans la performance finale.
Le document mentionne également brièvement d’autres types d’élagage, tels que:
- Algorithme d’élagage sensible à l’énergie, qui conduit le processus d’élagage en fonction de la consommation d’énergie
- Élagage pendant la phase de rétropropagation de la formation du réseau, qui peut effectuer un apprentissage de bout en bout et réduire considérablement le temps de formation
Décomposition de rang inférieur
La décomposition de rang inférieur fonctionne bien si nous pouvons trouver une certaine corrélation entre les valeurs de la matrice. L’idée est que s’il y a une corrélation, alors il y a des informations redondantes, qui peuvent être supprimées, ce qui rend le modèle plus petit. Cette méthode utilise généralement l’un des factorisation matricielle techniques. L’article original indique que la décomposition de rang inférieur est coûteuse en calcul et n’est pas facile à mettre en œuvre.
La distillation des connaissances (KD) est une méthode de transfert des connaissances d’un modèle de réseau neuronal plus grand et plus précis (modèle de l’enseignant) vers un modèle plus petit et moins précis (modèle de l’étudiant). Cela se fait généralement en formant le plus petit modèle pour imiter les prédictions du modèle plus grand plutôt que d’essayer d’apprendre directement à partir des données de formation d’origine.
La distillation des connaissances vise à créer un modèle plus petit qui peut fonctionner presque aussi bien que le modèle plus grand, mais avec moins de ressources de calcul et des temps de prédiction potentiellement plus rapides. Cela peut être utile dans les situations où le modèle plus grand est trop coûteux en termes de calcul pour être déployé en production ou lorsque le modèle plus petit est nécessaire pour s’exécuter sur des appareils aux ressources limitées.
Une étude originale passe en revue plusieurs méthodes de KD :
- Connaissances des logits
- Connaissances des couches intermédiaires
- Distillation d’informations mutuelles
- Autodistillation
L’efficacité du KD dépend à la fois de la structure du réseau d’enseignants et de la manière dont l’information est transférée. Un réseau d’enseignants bien conçu et une méthode KD appropriée peuvent atteindre des performances supérieures.
Dans cette section, les auteurs explorent des méthodes pour concevoir des modèles légers en modifiant la structure du réseau. Ceci peut être réalisé en modifiant les canaux, les filtres, les connexions entre les neurones, les fonctions actives et d’autres composants.
Le compactage DNN peut être réalisé en modifiant la structure du réseau grâce à des techniques telles que canal aléatoire ou décalage. L’article original passe en revue certains d’entre eux. ShuffleNet est une architecture de réseau compacte pour les appareils mobiles qui utilise des convolutions de groupe pour réduire les coûts de calcul et une opération de mélange de canaux pour mélanger le flux d’informations dans la convolution de groupe. ShiftNet remplace les convolutions spatiales par des changements de carte d’entités. AddressNet combine les fonctionnalités de ShuffleNet et ShiftNet et introduit également un décalage de raccourci pour réduire les frais généraux.
Des connexions raccourcies, également appelées connexions résiduelles, ont été proposées pour résoudre le problème des gradients de fuite dans les DNN. Certains chercheurs ont découvert que le problème de la disparition des gradients affecte fortement la convergence du réseau et que la dégradation du réseau devient également plus lourde lorsque le réseau s’approfondit. Ils ont proposé le cadre d’apprentissage résiduel profond pour résoudre ces problèmes et introduit la cartographie résiduelle.
Dans la partie Unités de réseau de base, les auteurs passent en revue plusieurs réseaux qui adoptent une approche expérimentale des unités de base, comme la séparation complète de la cartographie de corrélation de canaux et de la cartographie de corrélation spatiale ou l’ajout d’un module Squeeze-and-Excitation (SE) au réseau. Le module SE améliore la capacité de représentation des informations du réseau en modélisant explicitement les dépendances entre les canaux et en calibrant de manière adaptative les réponses des caractéristiques des canaux.
La recherche d’architecture de réseau est une méthode permettant de trouver la configuration de structure de réseau optimale dans un espace de recherche à l’aide de l’apprentissage par renforcement. Cependant, lorsque l’espace de recherche est très grand, le coût de calcul du NAS peut être élevé. En pratique, les réseaux de neurones contiennent souvent des structures unitaires répétées, telles que des groupes de noyaux de convolution, des structures unitaires non linéaires ou même des compositions de connexion.
Pouvons-nous trouver une expression universelle d’une unité de convolution via NAS, puis empiler les unités de convolution ensemble pour obtenir une grande précision après les avoir affinées ? L’étude originale passe en revue les travaux d’autres auteurs (Zoph et al.) qui ont proposé une méthode de construction de réseau qui recherche l’unité de base du réseau via NAS sur un petit ensemble de données, puis transfère cette unité vers un grand ensemble de données.
Le compactage des réseaux de neurones profonds est un domaine de recherche complexe qui vise à réduire le nombre de paramètres et les coûts de calcul des réseaux de neurones tout en maintenant ou en améliorant leurs performances. Il existe plusieurs approches pour y parvenir, et chacune d’entre elles a ses propres avantages et limites, et la meilleure approche pour une tâche particulière dépendra des exigences et des contraintes spécifiques d’un cas donné.
J’espère que cet article vous aidera à avoir une idée générale des principales méthodes utilisées pour le compactage des DNN et vous invite à lire l’article original par Ke Zhang et al. et suivez les liens et les références à partir de là si vous avez des questions ou avez besoin de plus de détails.
Cet article était principalement destiné à être un bref résumé pour moi-même, mais comme il n’était pas si court (comme le domaine de recherche lui-même), j’ai pensé qu’il pourrait être utile à d’autres.
- [1] Etude originale : https://arxiv.org/abs/2103.11083
- [2] S. Han, H. Mao et WJ Dally, « Compression profonde : compression de réseaux de neurones profonds avec élagage, quantification entraînée et codage de Huffman », arXiv : 1510.00149 [cs]octobre 2015.