Fermer

février 1, 2022

Distillation des connaissances dans l'apprentissage en profondeur


Il y avait des moments où nos professeurs nous aidaient à résoudre des problèmes difficiles. Nous avons confié notre problème à quelqu'un qui pouvait mieux le comprendre et qui pouvait donner une bonne vue d'ensemble, ce qui nous a ensuite permis de résoudre le problème. Oui, nous pouvons réellement enseigner un modèle à partir d'un autre modèle. Superficiellement, cela peut ressembler à l'apprentissage par transfert, mais ce n'est pas le cas. Ce sont des notions assez différentes. Dans cet article, nous allons discuter de l'ensemble du processus.

L'explication vise à donner une compréhension minimale mais suffisante de la distillation et à la mettre en œuvre en cas de besoin. L'article sur ce concept peut être lu ici.

Mais pourquoi voudrions-nous apprendre d'un autre modèle ? Si nous devons nous entraîner au processus d'apprentissage, ne pouvons-nous pas simplement nous entraîner sur les données elles-mêmes ?

Il y a quelques situations dans lesquelles nous pourrions vouloir utiliser la distillation. Nous discuterons des avantages plus tard dans l'article.

L'enseignant et l'étudiant

Dans le processus de distillation, le modèle à apprendre est appelé modèle Étudiant , tandis que le modèle à partir duquel nous learn est appelé le modèle  de l'enseignant.

L'enseignant est généralement un modèle plus complexe qui a plus d'aptitudes et de capacité de connaissance à partir de données données. Une grande quantité de données peut être assez facilement comprise par un modèle contenant des centaines de couches. Il est également appelé le modèle « encombrant ». Rassembler, la même quantité de connaissances pour un modèle simple est parfois impossible en raison des variations ou des gros volumes de données. censé se produire techniquement ?

Envisagez de résoudre un problème de notre livre de mathématiques, nous prenons un problème et essayons de le résoudre nous-mêmes. Ensuite, nous vérifions le dos du livre pour trouver des réponses, mais nous constatons que la réponse est incorrecte ! Et maintenant? La réponse nous a aidés à savoir que ce que nous avons fait était incorrect, mais nous ne savons pas vraiment ce qui n'allait pas, nous ne savons pas à quel point nous étions proches ou avons-nous été confus entre certaines étapes ? Maintenant, notre professeur peut nous aider avec cela, un simple coup de pouce dans la bonne direction peut nous mettre sur la bonne voie. Ou si l'enseignant résout quelques problèmes de ce type, nous pouvons comparer notre solution à celle de notre enseignant et avoir une meilleure idée du problème.

Le même principe est appliqué dans l'apprentissage en profondeur, le modèle étudiant est exposé aux réponses. du modèle enseignant. On va donner les sorties calculées par le modèle lourd au modèle le plus simple.

Mais n'est-ce pas un peu la même chose que de lui donner les vraies cibles, les vraies ?

Non ! Et il y a aussi un hic. Nous n'allons pas fournir les prédictions finales du modèle enseignant mais les logits. Les logits sont ici les sorties obtenues avant la dernière couche d'activation. Ainsi, la somme de la prédiction logit ne totalisera pas nécessairement 1. Si auparavant ce modèle ne voyait que les cibles comme [1,0] , ici, il verra quelque chose comme [12.7777, -3.99999] avec les véritables cibles. Ces scores du modèle lourd fourni en plus sont appelés cibles souples.

logit-flow

Lorsque les classes sont assez similaires ou trop différentes, les cibles souples seront donner au modèle une meilleure idée de ces scénarios. Même donner les sorties activées softmax serait légèrement meilleur que les objectifs, mais les logits sont ce avec quoi nous travaillerons comme proposé dans le document actuel.

Pour la formation, nous pourrions utiliser le même ensemble que le modèle d'enseignant utilisé pour la formation, ou nous pourrions avoir un ensemble de transfert si nous le souhaitons.

Pendant les implémentations, nous supprimons simplement la couche d'activation finale du modèle d'enseignant, puis récupérons ses sorties et les transmettons simplement au étudiant avec les cibles réelles.

La température

La température est un paramètre utilisé pour ajuster la distribution des cibles souples. La formule générale de la fonction softmax est une version plus simple de la même formule avec la température :

temperature-formula

Le T dans la formule représente cette température, généralement , il est pris égal à 1 lors du calcul des sorties softmax.

La valeur de la température affecte la netteté de la distribution des valeurs. Plus la valeur de la température est élevée, plus la distribution devient douce. Nous pouvons observer ce comportement dans le graphique ci-dessous pour certaines valeurs d'échantillon. Nous pouvons utiliser différentes valeurs de température pour nos besoins, juste un autre hyperparamètre que nous aurions besoin d'ajuster. Bien que la valeur de température différente ne soit utilisée que pendant la formation du modèle étudiant, une fois que le modèle est terminé, les prédictions de ce modèle doivent être faites en utilisant la valeur de température comme 1.

La fonction de perte[19659007]Nous utiliserions la moyenne pondérée de deux fonctions objectifs différentes.
  • La première fonction de perte serait l'entropie croisée avec les cibles souples
  • La deuxième fonction de perte serait l'entropie croisée avec les étiquettes correctes

La le calcul de la perte pour la première fonction doit être calculé en utilisant la même température que celle utilisée pour calculer les logits du modèle encombrant.

Lambda

Le paramètre λ est utilisé comme paramètre de pondération pour la fonction de perte finale. La fonction de perte pondérée serait quelque chose comme l'équation ci-dessous : problème spécifique. Nous pourrions utiliser quelque chose comme 0,1 pour la valeur de λ, ce qui signifierait une contribution de 90 % de la perte de la cible souple et une perte de 10 % de la véritable perte de la cible. Encore une fois, c'est quelque chose avec lequel nous aurions besoin de jouer.

Le processus de mise en œuvre ressemblerait à ceci,

saving-logits-flow

Nous créerions d'abord les logits à partir du modèle de l'enseignant et enregistrez-les dans un fichier numpy. logits enregistrés.

Après la transformation, il y aurait deux couches d'activation au lieu d'une seule. Dans l'une des couches, les activations normales seraient effectuées tandis que dans l'autre les activations douces seraient effectuées.

La transformation dans l'API Keras ressemblerait à ceci :

 

Avant transformation avant-transformation

Après transformation après-transformation

Plus tard, pour utiliser le modèle formé, si nous devons charger les poids, nous devrons d'abord définir le modèle exactement de la même manière manière avec toutes les transformations de couches et la température pour que cela fonctionne.

La distillation des connaissances est très appropriée pour résoudre des problèmes par l'ensemble. Dans certains scénarios où le nombre de classes est important, même un seul modèle encombrant n'est pas tout à fait capable d'englober toutes les informations tout en couvrant les subtiles différences détaillées.

En utilisant l'ensemble comme l'une des solutions de contournement, nous pouvons créer plusieurs modèles spécialisés. qui se concentrent uniquement sur certaines des classes qui sont similaires les unes aux autres et peuvent être confondues lors des prédictions.

Une fois les modèles spécialisés créés, nous pouvons utiliser la distillation pour coder toutes les informations de différents modèles dans un seul modèle. Plutôt que d'utiliser tous les modèles pour obtenir des sorties d'ensemble, nous pourrions alors simplement utiliser ce modèle distillé contenant la connaissance de tous les autres modèles.

Avantages et inconvénients

Chaque méthodologie a ses avantages ainsi que certaines limites, etc. fait la distillation des connaissances, alors parlons-en en commençant par les avantages.

Avantages

L'utilisation de la distillation des connaissances présente de nombreux avantages, dont certains :

  • Très efficace pour les techniques d'ensemble.

  • L'utilisation de la distillation peut également vous faire gagner beaucoup d'espace, comme dans le cas d'un ensemble où nous pourrions avoir un seul modèle plutôt que de conserver tous les modèles d'ensemble pour obtenir les sorties.

  • Peut identifier des classes, pas dans les données. Un modèle plus simple peut également donner des résultats satisfaisants sur les classes qu'il n'a peut-être pas vues du tout dans l'ensemble de transfert utilisé en apprentissage, à condition que le modèle encombrant ait vu ces classes.

  • Utile pour obtenir une structure à partir de données complexes pour des modèles plus simples qui peuvent avoir du mal à le faire par eux-mêmes. Parfois, même lorsqu'un modèle plus simple a une capacité suffisante pour une grande connaissance, il peut encore avoir du mal à extraire les fonctionnalités utiles. Le modèle encombrant peut l'aider à trouver ces fonctionnalités complexes.

  • Un modèle mystérieux sur lequel nous n'avons pas beaucoup d'informations peut être cloné sur une architecture de notre choix. C'était le cas d'utilisation auquel nous avons dû faire face dans l'un de nos projets. Nous avions un meilleur modèle mais aucune idée de ses données et autres paramètres. Nos modèles plus simples étaient en difficulté. Nous avons donc utilisé ce modèle pour aider notre modèle plus simple à mieux fonctionner et cela a réellement fonctionné.

    C'est un peu complexe à mettre en place correctement. Ce n'est pas réellement un con mais quelque chose auquel nous venons de faire face. Nous avons essayé de l'implémenter en utilisant Keras. L'exemple de problème donné dans la documentation de Keras fonctionne mais nous n'avons pas pu le faire fonctionner en utilisant un générateur pour obtenir des données à partir de répertoires locaux.

  • Compréhension attentive du problème. Avant de mettre en œuvre la distillation, nous devons comprendre notre énoncé de problème et comment nous adapterions la distillation et cela aiderait ou non notre cas.

  • Peut nécessiter un réglage supplémentaire pour obtenir une performance équilibrée. La distillation a deux paramètres supplémentaires, Lambda et Température, que nous devons ajuster pour que le processus fonctionne correctement pour notre cas d'utilisation.

Conclusion et cas d'utilisation

Le concept de distillation des connaissances s'est avéré utile chez l'un de nos clients. projets à To The New. Le client disposait d'un modèle de classification d'images existant dont les performances étaient difficiles à battre, mais le modèle était lourd et n'était pas le mieux adapté à l'inférence en temps réel. Nous avons donc dû créer une autre classification d'images qui pourrait reproduire des performances similaires à celles du modèle existant, mais qui a également une architecture relativement plus petite, de sorte que sa surcharge de déploiement est nettement inférieure à la précédente.

Nous n'avons pas été en mesure de reproduire les performances de. le modèle existant malgré la préparation de plusieurs ensembles de données et combinaisons d'hyperparamètres, mais en utilisant la distillation des connaissances, nous avons pu atteindre les performances du modèle existant.

La distillation des connaissances est très utile dans d'autres situations similaires et une implémentation officielle alternative prête à l'emploi est également disponible en utilisant l'API Keras disponible ici.




Source link