[PYTHON] [AI] Apprentissage métrique profond

introduction

Cela fait longtemps que Deep Learning n'a pas fermement établi sa position dans le domaine de l'apprentissage d'opportunité. Cette fois, je voudrais présenter un bref résumé et quelques démos de Deep Metric Learning, qui est appliqué dans divers domaines en raison de ses hautes performances et de sa polyvalence. Comme la reconnaissance de caractères manuscrits et la reconnaissance de caractères manuscrits seuls ne sont pas intéressants, nous détectons également des anomalies.

Deep Metric Learning

L'apprentissage métrique est une méthode appelée «apprentissage à distance», qui est une méthode d'apprentissage de la conversion (mappage) de l'espace des fonctionnalités des données d'entrée vers l'espace des fonctionnalités qui reflète la similitude des données.

En un mot

--Les données appartenant à la même classe sont proches

Apprenez à convertir en espace d'entités.

Dans la classification des classes, même dans les cas où la distance est trop proche et qu'il est difficile de classer, il est possible d'améliorer la précision de la discrimination en apprenant l'espace des caractéristiques de sorte que la même classe soit proche et les différentes classes éloignées. Je peux le faire.

L'apprentissage métrique lui-même est une méthode ancienne, mais l'apprentissage métrique profond est une méthode de conception de cette transformation non linéaire par le réseau neuronal profond. Le Deep Metric Learning est très polyvalent car il s'agit d'une méthode d'apprentissage de la «distance» entre les données, et en raison de ses hautes performances, il a un large éventail de domaines d'application comme suit.

C'est une méthode qui apparaît fréquemment dans le concours "Kaggle" où les data scientists du monde entier se disputent leurs performances, et cette fois nous effectuerons la classification des images et la détection des anomalies.

Démo 1. Reconnaissance des caractères manuscrits

Deep Metric Learning est utilisé pour reconnaître les caractères manuscrits MNIST familiers. 20150117221123.png Données: 0-9 image de texte manuscrite de 28 x 28 pixels Données d'apprentissage: 50000 feuilles Données de test: 10000 feuilles

Plusieurs méthodes ont été proposées comme méthodes d'apprentissage métrique profond, Cette fois, nous utiliserons Softmax Loss sous contrainte L2 en raison de la vitesse d'apprentissage, des performances élevées et de la simplicité du modèle lui-même.

L2-constrained Softmax Loss Softmax Loss sous contrainte L2 est une méthode pour contraindre la norme L2 de la sortie de la couche finale du Deep Neural Network à une constante $ \ alpha $, qui est une hypersphère avec un rayon de $ \ alpha $ pour les données d'entrée. C'est synonyme d'intégration ci-dessus.

La formule de la perte Softmax contrainte L2 est:

\text{minimize } -\frac{1}{M} \sum_{i=1}^{M} \log \frac{e^{W_{y_{i}}^{T} f\left(\mathbf{x}_{i}\right)+b_{y_{i}}}}{\sum_{j=1}^{C} e^{W_{j}^{T} f\left(\mathbf{x}_{i}\right)+b_{j}}}\\
\text { subject to } \quad\left\|f\left(\mathbf{x}_{i}\right)\right\|_{2}=\alpha, \forall i=1,2, \dots M\\

En mettant une contrainte pour incorporer des données dans une forme hypersphérique, il est possible d'apprendre de sorte que la similitude cosinus entre les données de la même classe est grande et la similitude cosinus avec différentes classes est petite.

Dans Softmax Loss normal, par exemple, dans le cas d'une photographie faciale, la norme L2 est grande pour une image facile à comprendre qui fait face directement à l'avant, et la norme L2 est grande pour une image difficile à prendre des caractéristiques telles que faire face sur le côté ou allongé. Il a la propriété de devenir plus petit. En conséquence, l'apprentissage est attiré par des images faciles à comprendre qui regardent droit devant, et les images avec une petite norme L2, ce qui est difficile en somme, ont tendance à être ignorées. l2ノルム.jpeg

Softmax Loss avec contrainte L2 surmonte ce problème en rendant la norme L2 constante quelles que soient les données, rendant uniforme l'effet de toutes les données sur la perte.

La mise en œuvre de Softmax Loss sous contrainte L2 elle-même est très facile et peut être réalisée en ajoutant la couche de normalisation de la norme L2 et la couche de mise à l'échelle constante $ \ alpha $ à la sortie de la couche finale du réseau neuronal profond et en calculant la perte Softmax. Je vais.

https___qiita-image-store.s3.amazonaws.com_0_263391_4b3647ac-e98b-eb00-f2d4-cf4c75508c0e.png

modèle

La mise en œuvre se fera à l'aide de Keras sur Google Colaboratory. Comme indiqué ci-dessous, empilez 3 couches de convolution et insérez une contrainte L2 (couche Lambda) entre la couche FC (couche entièrement connectée) et Softmax. Cette contrainte L2 est la seule différence avec le réseau neuronal convolutif normal (CNN).

** Présentation du modèle **

** Sortie du modèle dans Keras ** キャプチャ.PNG

** Divers paramètres d'apprentissage **

--Nombre d'époques: 15

Visualisation avec t-SNE

Afin de confirmer l'effet du Deep Metric Learning, visualisons l'espace des fonctionnalités d'entrée et l'espace des fonctionnalités converti en les abaissant à deux dimensions avec t-SNE. Le t-SNE est un algorithme qui effectue une compression dimensionnelle de telle sorte que la "proximité" des données dans un espace dimensionnel élevé soit maintenue même dans un espace dimensionnel faible. Puisqu'une étiquette de professeur n'est pas utilisée pour la compression, les données sont purement dans un espace dimensionnel élevé. Vous pouvez voir à quel point ils sont séparés.

** 1. Visualisation de l'espace d'entrée (784 dimensions → 2 dimensions) ** 入力空間.png Chaque point correspond à une image et la même couleur représente des données appartenant à la même classe de nombres. Même dans l'espace d'entrée, bien qu'il soit généralement séparé pour chaque classe, il existe de nombreux chevauchements et variations.

** 2. Visualisation de la couche finale avec CNN normal (64ème dimension → 2ème dimension) ** CNN.png

Comme le CNN lui-même offre des performances élevées, vous pouvez voir que même un CNN normal est assez bien séparé (des grappes sont formées pour chaque classe) dans la couche finale. Bien qu'il soit bien séparé, si vous regardez de près, vous pouvez souvent voir une petite valeur de saut.

** 3. Visualisation de la couche finale avec Softmax Loss contraint L2 (64ème dimension → 2ème dimension) ** l2_圧縮.png

Dans Softmax Loss contraint par L2, vous pouvez voir que les clusters sont plus clairement séparés que dans un CNN normal. Grâce à la normalisation de la norme L2, toutes les données contribuent à l'apprentissage, et il n'y a presque pas de valeurs de saut. Vous pouvez voir pourquoi le Deep Metric Learning est appelé «apprentissage à distance».

Résultat d'identification

Les résultats d'identification pour 10 000 images de test sont les suivants. Comme vous pouvez voir le degré élevé de séparation dans la visualisation de la couche finale, on peut voir que la précision est améliorée simplement en mettant les contraintes de la couche de normalisation L2 et de la couche d'échelle dans le même modèle CNN. La précision et la perte montrent une transition douce, et les deux sont finalement meilleures que CNN (pas de perte L2).

Méthode CNN (pas de perte L2) Perte Softmax contrainte L2
Taux d'identification 99,01 99,31
Apprentissage (précision)
Apprentissage (perte)

Soit dit en passant, les images (69 images) qui n'ont pas été identifiées par Softmax Loss sous contrainte L2 sont les suivantes. ・ Pred: valeur prédite de la perte Softmax contrainte L2 ・ Vrai: étiquette de réponse correcte

失敗画像.png

Je comprends ce sentiment! Il y a pas mal de choses que je veux dire. Il semble difficile même pour les humains d'obtenir 100 points. .. Il semble que la précision augmentera si les données d'entraînement des endroits faibles sont augmentées.

Démo sur Flask (identification)

Comme c'était un gros problème, j'ai fait une démo qui peut être traitée en temps réel avec Flask en utilisant le modèle que j'ai appris. Vous pouvez voir qu'ils l'ont identifié fermement. En premier lieu, le taux d'identification est de 99,3%, il semble donc normal que ce ne soit pas un nombre très étrange.

Démo 2. Détection d'anomalies

Bien que l'identification soit solide, dans l'état actuel, les choses qui ne sont manifestement pas des nombres sont assignées de force à l'un d'entre eux comme suit.

Quand quelque chose qui n'est pas un nombre est entré, vous voulez dire que ce n'est pas un nombre, plutôt que de sortir quelque chose de proche. Utilisons la détection d'anomalies pour repousser les nombres non numériques tout en conservant la capacité de discrimination conventionnelle.

Comme je l'ai écrit au début, le Deep Metric Learning peut également être appliqué à la détection d'anomalies, il est supérieur à la détection d'anomalies dans l'espace d'entrée en effectuant une détection d'anomalies dans l'espace de quantité de caractéristiques apprises sous une forme qui reflète la similitude des données. Vous pourrez obtenir de la précision. Le Deep Metric Learning lui-même est une méthode d'apprentissage à distance, pas une méthode de détection d'anomalies, donc une autre méthode est nécessaire pour la détection des anomalies. Cette fois, nous utiliserons le facteur de valeur aberrante locale (LOF) pour la détection des anomalies.

Local Outlier Factor(LOF) LOF est une méthode de détection d'anomalies qui se concentre sur la densité des données dans l'espace. C'est un peu comme une version avancée de k-plus proche voisin (kNN), où kNN ne peut pas prendre en compte la variabilité des données d'un cluster à l'autre, alors que LOF est ** Densité locale avec k données dans le voisinage. En faisant attention à) **, il devient possible de détecter des anomalies compte tenu de la distribution des données.

Densité locale = 1 / distance moyenne à k points voisins

Les formules et les détails sont omis, mais dans le cas illustré dans la figure ci-dessous, par exemple, les données A sont loin des clusters voisins, nous voulons donc les juger comme anormales, et les données B sont dans la même distribution que les clusters voisins. Parce que c'est dedans, vous voulez le juger comme normal. Cependant, puisque B est plus éloigné en termes de distance du voisinage de k, kNN ne peut pas le gérer. D'autre part, LOF détermine le seuil d'anomalie en fonction de la densité des données environnantes, afin qu'il puisse gérer de tels cas.

modèle

LOF est appliqué à la sortie de la couche contrainte L2 du modèle appris par l'identification MNIST pour détecter les anomalies (pas besoin de réentraîner Deep Neural Net). Si le LOF détermine qu'il est anormal, il sera émis comme une erreur, et s'il est déterminé comme étant normal, le résultat d'identification de Sofmax sera émis comme avant.

LOF utilise scikit-learn et apprend avec les paramètres suivants. ・ N-voisins: 20 ・ Contamination: 0,001 ・ Nouveauté: vrai

Les données

Les deux types d'ensembles de données suivants sont utilisés comme cibles pour la détection d'anomalies.

Dataset Fashion-MNIST Cifar-10
Vue d'ensemble Ensemble de données d'images de mode pour chemises, sacs, chaussures, etc. (10 classes) Ensemble de données d'images naturelles pour les avions, les voitures, les chiens, etc. (10 classes)
Exemple d'image

Il n'y a pas de données numériques dans les deux cas, Fashion-MNIST est une image en échelle de gris de 28 x 28 pixels, alors utilisez-la telle quelle, et Cifar-10 est une image en couleur de 32 x 32 pixels, utilisez-la après la mise à l'échelle et le redimensionnement des gris Je vais. Étant donné que Deep Nerual Net est appris uniquement avec des caractères manuscrits MNIST, les deux sont des images inconnues ** lorsqu'elles sont visualisées à partir de ** Deep Neural Net. Je voudrais tester si ces deux ensembles de données sont correctement repoussés comme des anomalies dans le LOF de l'espace d'entités de la couche finale.

Résultat d'identification

À titre de référence, nous utiliserons la détection d'anomalies lorsque LOF est appliqué dans l'espace d'entités d'entrée.

** LOF dans l'espace des fonctionnalités d'entrée: référence **

Données Jugement normal Jugement anormal
MNIST0.990.01
Fashion-MNIST0.700.30
Cifar-100.160.84

Bien que MNIST puisse reconnaître 99% comme normal, la plage de la normale est trop large, 70% de Fashion-MNIST est normal et 16% de Cifar-10 est normal.

** À la dernière couche de Deep Metric Learning (L2-constrained Softmax Loss) LOF: Cette méthode de temps **

Données Jugement normal Jugement anormal
MNIST0.990.01
Fashion-MNIST0.120.88
Cifar-100.050.95

Tout en maintenant 99% du jugement normal de MNIST, 88% de Fashion-MNIST et 95% de Cifar-10 peuvent être jugés anormaux.

Si vous souhaitez repousser un peu plus d'anomalies, vous pouvez augmenter la contamination (rapport des valeurs aberrantes dans les données d'apprentissage), et le résultat lorsque la contamination est de 0,01 est le suivant.

Données Jugement normal Jugement anormal
MNIST0.960.04
Fashion-MNIST0.020.98
Cifar-100.001.00

4% des données MNIST sont jugées anormales, Avec Fashion-MNIST, 98% et avec Cifar-10, toutes les images peuvent être jugées anormales. Comme vous pouvez le voir sur l'image qui n'a pas réussi à identifier, MNIST contient des données difficiles à identifier en premier lieu, donc compte tenu de la précision de la détection d'anomalies, cela semble être meilleur pour une utilisation pratique.

Démo sur Flask (identification + détection d'anomalies)

J'ai également réalisé une démo qui peut être traitée en temps réel avec Flask. Lorsqu'un caractère autre qu'un nombre arrive, il est rejeté comme anormal (pas de chiffre) et il peut être confirmé que le numéro est toujours identifié.

Résumé

En effectuant un apprentissage à distance avec Deep Metric Learning, il a été découvert dans une démonstration simple qu'il est facile d'appliquer à la détection d'anomalies ainsi qu'à améliorer la précision de l'identification. Il est facile à comprendre en tant que concept, et en particulier Softmax Loss contraint L2 a l'avantage d'être très facile à mettre en œuvre car il ne met des contraintes que sur la norme L2.

Dans le futur, je voudrais présenter différentes méthodes tout en démontrant autant que possible de cette manière.

<Référence> Article Qiita ・ Un piège que n'importe qui peut facilement créer un RPAUn piège que quiconque peut construire un VBA peut facilement créer un RPAJ'ai créé un outil de vérification du codage UiPath [RPA]La raison pour laquelle la RPA est si bonne que vous pouvez approfondir votre compréhension de la RPALivres recommandés par RPALes personnes qui conviennent au développement RPA, celles qui ne le sont pasJ'ai essayé d'automatiser la fabrication des sushis

démo

Recommended Posts

[AI] Apprentissage métrique profond
L'apprentissage en profondeur
[AI] Apprentissage en profondeur pour le débruitage d'image
Mémorandum d'apprentissage profond
Apprentissage en profondeur Python
Apprentissage profond × Python
Premier apprentissage profond ~ Lutte ~
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Deep learning 1 Pratique du deep learning
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
J'ai essayé le deep learning
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Fonction d'apprentissage profond / softmax
Pourquoi le Deep Metric Learning basé sur la fonction Softmax fonctionne
Apprentissage profond à partir de zéro 1 à 3 chapitres
Essayez l'apprentissage en profondeur avec TensorFlow
Deep Learning Gaiden ~ Programmation GPU ~
Plan d'apprentissage Python pour l'apprentissage de l'IA
Reconnaissance d'image par apprentissage profond 1 théorie
Deep running 2 Réglage de l'apprentissage profond
Apprentissage profond / code de travail LSTM
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro
Apprentissage profond pour la formation composée?
Présentation d'Udacity Deep Learning Nanodegree
Sujets> Deep Learning: Day3 RNN
Introduction au Deep Learning ~ Règles d'apprentissage ~
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Générez des Pokémon avec Deep Learning
Introduction au Deep Learning ~ Rétropropagation ~
Créez une IA qui identifie le visage de Zuckerberg grâce à l'apprentissage en profondeur ③ (Apprentissage des données)
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Distillateur de bibliothèque d'éclaircissement de modèles d'apprentissage profond
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Essayez le Deep Learning avec les concombres FPGA-Select
Identification de la race de chat avec Deep Learning
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 11
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Faites de l'art ASCII avec l'apprentissage en profondeur
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab Chapitres 1 à 6
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Implémenter le deep learning / VAE (Variational Autoencoder)
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Apprentissage profond à partir de zéro (calcul des coûts)
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10 6-9
À propos de la gestion de projet de deep learning (DNN)
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 5-7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 9
Apprentissage profond pour démarrer sans GPU