Une fois l'entraînement du réseau terminé, il te reste presque toujours un tas de neurones inutiles : des neurones qui ne contribuent quasiment pas à la performance du réseau, mais qui continuent à consommer de la mémoire.

Autrement dit, il existe un pourcentage élevé de neurones qui, si on les retire du réseau entraîné, n'affecteront pas la performance de façon notable :

Schéma comparant un réseau de neurones complet et sa version élaguée : la précision passe de 90 % à 89,7 % après suppression des neurones inutiles.

Et bien sûr, je ne dis pas ça au hasard ou sans fondement.

J'ai vérifié ça expérimentalement, encore et encore, sur mes différents projets.

Voici l'idée de base.

Une fois l'entraînement terminé, on fait passer le dataset dans le modèle (sans backpropagation cette fois) et on analyse l'activation moyenne de chaque neurone.

On observe alors souvent que de nombreuses activations de neurones restent proches de zéro.

Diagramme illustrant l'activation moyenne de plusieurs neurones (0,5, 0,007, -1,3, -0,002) : les valeurs proches de zéro sont identifiées comme pouvant être supprimées.

Ces neurones peuvent donc être supprimés du réseau (on parle de pruning), car ils auront très peu d'impact sur la sortie du modèle.

Pour ça, on peut fixer un seuil de pruning (λ) et supprimer tous les neurones dont l'activation est inférieure à ce seuil.

Ça a aussi du sens intuitivement.

Plus précisément, si un neurone atteint rarement une activation élevée, on peut raisonnablement supposer qu'il ne contribue pas à la sortie du modèle, et on peut donc le supprimer sans risque.

Le tableau suivant compare la précision du modèle pruné à celle du modèle original (complet), pour différents seuils de pruning (λ) :

Tableau comparant la précision de validation et la réduction du nombre de paramètres du modèle original et de modèles élagués, pour des seuils de pruning (λ) allant de 0,1 à 1.

Remarque un truc ici.

Avec un seuil de pruning λ=0.4, la précision de validation du modèle ne baisse que de 0,62 %, mais le nombre de paramètres chute, lui, de 72 %.

Illustration comparant visuellement la taille du modèle original (grille complète) à celle du modèle élagué (grille fortement réduite).

C'est une réduction énorme, alors que les deux modèles restent quasiment aussi bons !

Bien sûr, il y a un compromis, puisqu'on ne fait pas aussi bien que le modèle original.

Mais dans beaucoup de cas, surtout quand on déploie des modèles de ML en production, la précision n'est pas la seule métrique qui compte.

Schéma montrant qu'un modèle déployé doit aussi être évalué sur le run-time, l'utilisation des ressources et les utilisateurs, en plus de la précision.

D'autres métriques opérationnelles, comme l'efficacité, la vitesse ou la consommation mémoire, entrent aussi en jeu, et de façon décisive.

C'est pour ça que les techniques de compression de modèles sont si importantes dans ces cas-là.

Si tu veux creuser le sujet, on en parle en détail dans ce dossier complémentaire : Model Compression : une étape critique vers un Machine Learning efficace.

Aujourd'hui, on n'a vu qu'une seule technique (l'activation pruning), mais le mini-cours en couvre 6, avec leur implémentation en PyTorch.

Envie d'aller plus loin ? DataXp t'attend : formations et parcours pour progresser en data science, machine learning et IA.

👉 À toi de jouer : quelles sont, selon toi, d'autres façons de rendre les modèles de ML plus adaptés à la production ?


Commentaires

Avatar

ou participer

À lire ensuite

Des shots dans la même veine, à lire entre deux tâches.

Voir tous les shots
caret-right