[PYTHON] Lire l'article Auto-apprentissage profond à partir d'étiquettes bruyantes

Résumé de l'article

Ici, nous introduisons l'article Auto-apprentissage profond à partir d'étiquettes bruyantes [1]. Ce document a été adopté à l'ICCV 2019. De plus, l'implémentation par Pytorch est disponible sur GitHub. Cependant, la précision n'est pas si élevée et une discussion sur la cause est donnée à la fin de cet article.

Contenu de l'article

Aperçu

Dans cet article, nous travaillons à améliorer la précision de l'apprentissage à l'aide d'ensembles de données contenant du bruit dans la tâche de classification d'images par apprentissage en profondeur. «Contient du bruit» indique ici une situation dans laquelle l'étiquette de classe du jeu de données est ajoutée de manière incorrecte. L'apprentissage en profondeur nécessite généralement un grand ensemble de données pour entraîner le modèle, mais la préparation d'un énorme ensemble de données bien étiqueté peut être assez fastidieuse. De plus, lors de la création d'un ensemble de données strict, il est courant que les humains annotent manuellement, mais des erreurs peuvent survenir à ce moment-là. D'un autre côté, si vous utilisez les données explorées à partir du Web telles quelles, vous pouvez facilement organiser un énorme ensemble de données avec des étiquettes, mais dans ce cas, il y a généralement plus d'erreurs d'étiquette. Dans ces circonstances, un modèle d'apprentissage en profondeur qui peut effectuer un apprentissage correct à l'aide d'un ensemble de données contenant du bruit dans une certaine mesure est considéré comme utile dans le monde réel, et cet article vise à atteindre cet objectif.

Nouveauté de ce papier

Il existe de nombreuses études existantes sur l'apprentissage en profondeur utilisant des ensembles de données bruyants. Parmi eux, l'introduction d'une matrice de transition pour indiquer le taux d'erreur de l'étiquette et le réglage d'une fonction de perte résistante au bruit. Cependant, ces techniques supposent implicitement que les erreurs d'étiquetage sont aléatoires. D'autre part, en réalité, le bruit d'étiquette dépend souvent de l'entrée. Par exemple, une image qui prête à confusion quant à la classe à laquelle elle appartient est plus susceptible d'être mal étiquetée. Dans cet article, nous proposons un apprentissage qui correspond au bruit des étiquettes dans le monde réel.

Une autre caractéristique de cet article est qu'il n'est pas nécessaire d'utiliser des informations supplémentaires telles que des ensembles de données sans bruit. De nombreuses études existantes utilisent des ensembles de données débruités manuellement. Cependant, comme déjà mentionné, l'étiquetage manuel est une charge, même dans un nombre limité. Dans cette méthode, le modèle est entraîné dans le format dit d'auto-apprentissage en utilisant uniquement l'ensemble de données contenant du bruit.

Aperçu de la méthode

Dans l'apprentissage du modèle de la méthode proposée, il y a deux phases, la phase d'apprentissage et la phase de correction d'étiquettes. Ces phases alternent avec chaque époque.

Phase d'apprentissage

Dans la phase d'apprentissage, le modèle F de classification d'images est formé. Considérez cette phase comme presque la même qu'une formation typique d'apprentissage en profondeur. Un seul point est que la fonction de perte est légèrement différente et est exprimée comme $ L_ {TOTAL} $ dans la formule ci-dessous. $ L_{TOTAL} = (1 - \alpha) L_{CCE}(F(\theta, x), y) + \alpha L_{CCE}(F(\theta, x), \hat{y}) $ Où $ L_ {CCE} $ est la fonction de perte d'entropie croisée. De plus, $ y $ est l'étiquette attachée aux données et $ \ hat {y} $ est l'étiquette corrigée. Ce $ \ hat {y} $ est obtenu dans la phase de correction d'étiquette décrite plus loin. $ \ Alpha $ est un hyper paramètre pour équilibrer ces deux fonctions de perte. Dans la première époque, la phase de correction d'étiquette n'a pas encore été effectuée et l'étiquette de correction ne peut pas être obtenue, alors définissez $ \ alpha = 0 $.

Phase de correction d'étiquette

Ensuite, la phase de correction d'étiquette sera expliquée. Le but de cette phase est d'obtenir une étiquette bien corrigée $ \ hat {y} $ à utiliser dans la phase d'apprentissage. Pour cela, suivez les étapes suivantes.

  1. Prenez au hasard des échantillons de $ m $ à partir des données d'entraînement de chaque classe.
  2. Déterminer des prototypes représentatifs $ p $ à partir de $ m $ échantillons de chaque classe.
  3. Pour toutes les données, déterminez l'étiquette de correction en fonction de la similitude avec le prototype de chaque classe.

Avant d'expliquer dans l'ordre, définissons la «similitude» pour chaque donnée utilisée ici. Tout d'abord, le modèle d'apprentissage en profondeur $ F $ est défini comme $ F = f \ circ G $. Ici, $ G $ est la couche d'extraction d'entités et $ f $ est la couche entièrement connectée pour la classification. En utilisant cela, la similitude est définie sur la similitude cosinus de $ G (x_1) $ et $ G (x_2) $ pour les entrées $ x_1 $ et $ x_2 . C'est, $ \frac{G(x_1)^\mathsf{T}G(x_2)}{||G(x_1)|| ~ ||G(x_2)||} $$ Il est exprimé comme. Dans ce qui suit, toutes les descriptions de "similarité" doivent être considérées comme cette "similarité cosinus du vecteur de quantité de caractéristiques".

échantillonnage

Premièrement, $ m $ de données sont échantillonnées aléatoirement dans chaque classe. Il s'agit de réduire le montant de $ O (n ^ 2) $ calculé pour le nombre de données $ n $ dans les calculs suivants.

Décision de prototype

Ensuite, pour chaque classe, les prototypes $ p $ sont déterminés à partir des données $ m $ sélectionnées précédemment. La condition requise pour ce prototype est qu'il représente bien les caractéristiques de chaque classe. Plus précisément, un prototype qui satisfait aux deux conditions suivantes est utilisé. ・ Il existe de nombreuses fonctionnalités qui nous ressemblent. ・ Ce n'est pas aussi similaire que les autres prototypes. En d'autres termes, idéalement, s'il y a des clusters $ p $ dans la quantité d'entités de la classe, nous voulons que les prototypes $ p $ soient les points représentatifs de chaque cluster. La méthode spécifique est décrite ci-dessous.

Tout d'abord, vérifiez la similitude des fonctionnalités de $ m $. Définissez la matrice $ S $ pour que $ S_ {ij} $ soit la similitude entre le $ i $ ème échantillon et le $ j $ ème échantillon.

Deuxièmement, définissez la densité $ \ rho $ pour chaque échantillon. Cela montre la densité des points autour de l'échantillon. $ \rho_i = \sum_{j = 1}^m sign(S_{ij} - S_c). $ Ici, $ sign $ est une fonction qui renvoie $ 1 $ pour une valeur positive, $ -1 $ pour une valeur négative et $ 0 $ pour $ 0 $, et $ S_c $ est approprié. C'est la valeur standard, et ici c'est la valeur qui correspond aux 40% supérieurs de $ S $. Par conséquent, plus le nombre d'échantillons similaires à vous est élevé, plus la valeur de $ \ rho $ est élevée.

Troisièmement, nous définissons la similitude $ \ eta $ pour le prototypage de chaque échantillon.

\eta_i = \max_{j, \rho_j > \rho_i} S_{ij} ~~(\rho_i < \rho_{max}), \\
\eta_i = \min_{j} S_{ij} ~~(\rho_i = \rho_{max})

Autrement dit, celui avec la densité la plus élevée $ \ rho $ prend la plus petite similitude, et les autres prennent la similitude la plus élevée parmi les échantillons avec la densité la plus élevée $ \ rho $. Par conséquent, on peut dire que plus $ \ eta $ est petit, plus la propriété est adaptée au prototype.

Et enfin, le prototype est décidé en utilisant $ \ rho $ et $ \ eta $. Gardez à l'esprit que $ \ rho $ doit être plus petit et $ \ eta $ doit être plus petit. Ici, les échantillons $ p $ supérieurs avec le plus grand $ \ rho $ sont obtenus à partir de ceux satisfaisant $ \ eta <0,95 $. Que ce soit le prototype de cette classe.

Générer une étiquette de correction

Maintenant que nous avons un prototype pour chaque classe, nous allons demander des étiquettes de correction pour toutes les données. Triez-les simplement dans des classes très similaires aux prototypes. Pour chaque donnée, calculez le degré moyen de similitude avec le prototype de chaque classe, et laissez le libellé de la classe ayant la plus grande valeur être le libellé de correction $ \ hat {y} $.

Mise en œuvre du papier

À partir de là, je décrirai la mise en œuvre du document. Vérifiez GitHub pour le code source. Cependant, comme je l'ai déjà écrit, l'exactitude décrite dans l'article n'a pas été confirmée. La prise en compte de cette cause est décrite à la fin.

Aperçu de la mise en œuvre

Comme dans l'article, nous avons mené des expériences en utilisant le jeu de données Clothing1M [2] et le jeu de données FoodLog-101N [3]. En outre, l'ensemble de données FoodLog-101N semble être censé utiliser l'ensemble de données FoodLog-101 [4] pour les données de test, alors suivez-le. Le contenu écrit dans l'article est utilisé tel quel pour les modèles et les hyper paramètres.

Les détails de l'environnement d'exécution principal sont décrits ci-dessous. ・ Python: 3.5.2 ・ CUDA: 10,2 ・ Pytorche: 0.4.1 ・ Vision de la torche: 0.2.1 ・ Numpy: 1.17.2

résultat

La précision écrite dans le papier est indiquée dans le tableau ci-dessous. CCE est la précision lors de l'optimisation en utilisant simplement l'entropie croisée.

CCE Méthode proposée
Clothing1M 69.54 74.45
Food-101N 84.51 85.11

D'autre part, la précision de l'implémentation de la reproduction est celle indiquée dans le tableau ci-dessous. La raison pour laquelle la précision de la méthode proposée est ambiguë est que l'erreur due aux nombres aléatoires est assez grande. Comme cela sera décrit plus loin, nous n'avons pas été en mesure d'évaluer quantitativement le degré de ce flou en raison de diverses confirmations concernant la cause. Cependant, il n'y a pas de phénomène dans lequel la méthode proposée dépasse significativement le CCE.

CCE Méthode proposée
Clothing1M 68.10 Environ 64
Food-101N 85.05 Environ 80

Causes possibles d'une précision réduite

Implémentation éventuellement incorrecte

Ceci est juste une section qui indique la garantie que cette implémentation est correcte, alors sautez-la si vous n'êtes pas intéressé.

S'il y a une erreur dans cette implémentation, la précision lors de l'utilisation de l'entropie croisée n'est pas si différente du papier, donc je pense que le problème est la partie liée à la correction des étiquettes. Ceci est confirmé en le divisant en deux parties, l'une qui génère l'étiquette de correction et l'autre qui utilise l'étiquette de correction.

Le premier est la confirmation de la pièce qui génère l'étiquette de correction. Premièrement, nous avons individuellement confirmé que les fonctions qui y étaient liées se comportaient comme prévu. Ensuite, il est confirmé que l'étiquette corrigée et l'étiquette bruyante d'origine correspondent dans une certaine mesure, et que l'étiquette est corrigée dans une certaine mesure selon l'étiquette bruyante. De plus, nous avons confirmé quantitativement la précision du comportement de correction des étiquettes. Pour Clothing1M, une étiquette vierge est attachée à une partie de l'ensemble de données, vous pouvez donc vérifier l'exactitude de la correction d'étiquette. Ici, afin de se concentrer sur la précision de la correction d'étiquette, une étiquette est attribuée aux données de test à l'aide d'un module de correction d'étiquette généré à partir du modèle entraîné et des données d'apprentissage, et le taux de réponse correct de l'étiquette de l'ensemble des données d'apprentissage et la réponse correcte de l'étiquette de test corrigée sont attribués. Nous avons comparé les tarifs. Les résultats à ce moment sont présentés dans le tableau ci-dessous (dans l'article, le taux de précision de l'étiquette des données d'entraînement est de 61,74, mais dans l'article original de Clothing 1M, il est de 61,54, donc j'espère que) .. En regardant cela, nous pouvons voir que la précision de l'étiquette bruyante des données d'entraînement d'origine est dépassée.

Libellé des données d'entraînement Étiquette de correction des données de test
61.54 69.92

Comme vous pouvez le voir, le comportement de la correction d'étiquette dans son ensemble est considéré comme correct. À partir de ce qui précède, vous pouvez confirmer que le module de correction d'étiquette est correct.

La seconde est la confirmation de la pièce qui utilise l'étiquette de correction. À ce propos, lorsque la partie où l'étiquette corrigée du code source a été transmise a été réécrite de sorte que l'étiquette non corrigée a été transmise, la précision était à peu près la même que celle du CCE original. Par conséquent, on considère qu'il n'y a pas d'erreur dans la partie qui effectue l'optimisation à l'aide de l'étiquette de correction. Pour les deux raisons ci-dessus, je pense que le point de vue des bogues d'implémentation a été effacé.

Différence d'environnement d'exécution

Les hyperparamètres utilisés cette fois sont les mêmes que ceux de l'article Par exemple, dans Clothing 1M, le taux d'apprentissage est atténué toutes les 5 époques avec un total de 15 époques. Cependant, comme vous pouvez le voir sur la figure 1, les 5 premières époques semblent inutiles car le taux d'apprentissage est trop élevé. L'une des causes les plus probables de ce phénomène est la différence dans la bibliothèque et la version utilisées au moment de l'exécution.

images.png

Quand démarrer la phase de correction d'étiquette

Dans la phase de correction d'étiquettes, on considère que la précision peut être détériorée à moins que le réseau neuronal ne puisse extraire dans une certaine mesure les caractéristiques appropriées. Même dans le papier d'origine, il y a une description qui implique que la phase de correction d'étiquette n'est pas insérée dans un premier temps, mais le réglage spécifique n'est pas indiqué. Dans cette mise en œuvre, le résultat lorsque la phase de correction d'étiquette est lancée immédiatement après la fin de la première époque est montré. Pour autant que j'ai lu l'article, il semble que la correction d'étiquette commence après la fin de la première époque, mais il semble qu'elle soit écrite de telle manière que l'on ne peut pas dire que ce n'est pas tout à fait le cas.

Dans des expériences réelles, il a été confirmé dans certains cas que la précision a chuté à environ 30% dans les premiers stades en raison de la correction de l'étiquette à la première époque. Ainsi, lorsque j'ai changé certaines époques pour démarrer la phase de correction d'étiquette, la précision finale n'a pas tellement changé même si le phénomène de baisse de précision a soudainement disparu. Les résultats peuvent changer si vous essayez d'insérer des corrections d'étiquettes au milieu avec un numéro d'époque plus long, mais cela reste une question.

nombre aléatoire

Bien que nous n'ayons pas pu évaluer quantitativement la variance des résultats, je pense que l'influence des nombres aléatoires ne peut être ignorée en raison de l'intensité des vagues d'apprentissage et de l'atmosphère de plusieurs essais. En ce qui concerne l'article original, au moins pour Food-101N, je pense que l'amélioration de la précision par cette méthode ne dépasse pas la plage d'influence des nombres aléatoires. Soit dit en passant, concernant l'expérience Food-101N, l'article original n'a pas été analysé de manière aussi détaillée.

Prise en compte du bonus

Dans Food-101N, la précision n'a pas été tellement améliorée dans l'article original, et j'ai mentionné la possibilité que cela puisse être expliqué par des nombres aléatoires, mais je pense que la cause est la méthode elle-même. Dans Clothing 1M, qui est une classification de 14 classes, l'étiquette de correction a une probabilité suffisamment élevée qu'il s'agisse de la même étiquette que l'étiquette d'origine, mais dans Food-101N, qui est une classification de 101 classes, la probabilité que l'étiquette de correction soit la même que l'étiquette d'origine est Clothing 1M. Il a été confirmé qu'il était globalement inférieur à. Je ne connais pas l'exactitude de l'étiquette de correction car Food-101N n'a pas d'étiquette propre, mais je pense qu'il est presque certain qu'elle est inférieure à Clothing1M. Et compte tenu de la difficulté de classer 101 classes en utilisant un petit nombre de prototypes, je pense que ce n'est pas un résultat étrange. Par conséquent, lors de l'application de cette méthode dans le cas d'une classification multi-classes telle que Food-101N, des étiquettes souples sont utilisées afin de ne pas attribuer de manière décisive des classes, et le poids de l'apprentissage utilisant des étiquettes de correction est réduit. Je pense qu'il sera nécessaire de concevoir.

Les références

[1] Jiangfan Han, Ping Luo, and Xiaogang Wang. Deep Self-Learning From Noisy Labels. In International Conference on Computer Vision, 2019. [2] Tong Xiao, Tian Xia, Yi Yang, Chang Huang, and Xiaogang Wang. Learning from Massive Noisy Labeled Data for Image Classification. In Computer Vision and Pattern Recognition, 2015. [3] Kuang-Huei Lee, Xiaodong He, Lei Zhang, and Linjun Yang. CleanNet: Transfer Learning for Scalable Image Classifier Training with Label Noise. In Computer Vision and Pattern Recognition, 2018. [4] Lukas Bossard, Matthieu Guillaumin, and Luc Van Gool. Food-101 – Mining Discriminative Components with Random Forests. In European Conference on Computer Vision, 2014.

Recommended Posts

Lire l'article Auto-apprentissage profond à partir d'étiquettes bruyantes
Lisez la valeur du paramètre dans Google Spread Sheet gssetting
Apprendre en profondeur à partir des bases mathématiques Partie 2 (pendant la fréquentation)
J'ai lu la référence Chainer (mise à jour de temps en temps)