Dans la première partie de cette série en quatre parties, nous explorerons le pipeline ML et mettrons en évidence les défis de l'extraction manuelle de fonctionnalités.
Blog de la communauté Alibaba Cloud Auteur [Ahmed F. Gad](https: //www.linkedin. Depuis com / in / ahmedfgad? Spm = a2c65.11461447.0.0.5bd3e739Qn9U9o)
À travers les quatre didacticiels, nous avons appris le réseau neuronal artificiel (ANN) en utilisant les fonctionnalités extraites en transférant l'apprentissage du modèle d'apprentissage profond (DL) et du réseau neuronal convolutif (CNN) appris à l'avance à Keras, et avons appris l'image. J'explorerai la classification.
Le didacticiel commence par explorer le pipeline d'apprentissage automatique (ML). Il souligne que la conception manuelle des fonctionnalités est une tâche difficile, en particulier lorsqu'il y a une grande quantité de données, et que l'extraction automatique des fonctionnalités à l'aide de l'apprentissage par transfert est la méthode préférée. Après cela, nous présenterons l'apprentissage par transfert et explorerons les avantages de l'apprentissage par transfert et ses conditions d'utilisation. Ensuite, dans cette série, nous utiliserons le modèle pré-entraîné (MobileNet) formé avec l'ensemble de données ImageNet à l'aide de Keras s'exécutant sur le notebook Jupyter pour une utilisation avec un autre ensemble de données, qui est l'ensemble de données Fruits360. L'apprentissage par transfert est effectué. Après cela, la quantité de caractéristique est extraite du modèle obtenu par apprentissage par transfert, la quantité de caractéristique extraite est analysée pour supprimer la mauvaise caractéristique, et enfin l'ANN apprise par la quantité de caractéristique est construite.
Ce tutoriel en est la première partie, explorant le pipeline ML pour mettre en évidence les défis de l'extraction manuelle de fonctionnalités. Ensuite, nous présenterons l'apprentissage par transfert pour le comprendre et expliquer pourquoi nous pouvons l'utiliser.
Les points abordés dans ce didacticiel sont:
--Explorez le pipeline d'apprentissage automatique.
Commençons.
Nous allons discuter et comprendre le pipeline ML pour comprendre les avantages de l'apprentissage par transfert pour les modèles DL pré-formés. Cela vous donnera une idée des principaux avantages de l'apprentissage par transfert. La figure suivante montre le pipeline qui crée le modèle d'apprentissage automatique. Il n'y a aucune possibilité que d'autres étapes telles que la réduction des fonctionnalités soient ajoutées au pipeline, mais les étapes suivantes sont suffisantes pour créer le modèle. Jetons un bref coup d'œil à chaque étape du pipeline et concentrons-nous sur les étapes d'ingénierie des fonctionnalités.
La définition du problème consiste à comprendre le problème que vous essayez de résoudre afin de trouver la meilleure technique de ML. Cela commence par définir la portée du problème. S'agit-il d'un problème surveillé (classification ou régression) ou d'un problème non surveillé (clustering)? Après avoir défini la portée du problème, décidez quel algorithme ML utiliser ensuite. Par exemple, pour un problème surveillé, décidez quel algorithme ML utiliser. Linéaire ou non linéaire, paramétrique ou non paramétrique, etc.
La définition du problème aide à préparer les données, ce qui est la prochaine étape du pipeline ML. La machine apprend avec un exemple. Chaque exemple a une entrée et une sortie. Par exemple, si le problème est un problème de classification et que chaque échantillon est classé dans l'une des catégories prédéfinies, la sortie sera une étiquette. Si la sortie est un problème de régression exprimé sous forme de ligne continue, la sortie n'est plus une étiquette mais un nombre. En définissant le problème de cette manière, nous pouvons préparer les données de manière appropriée.
Une fois que les données sont prêtes, l'étape suivante est l'ingénierie des fonctionnalités. Il s'agit de l'étape la plus importante dans la création d'un modèle d'apprentissage automatique traditionnel. Premièrement, pourquoi faites-vous de l'ingénierie des fonctionnalités? L'ingénierie des fonctionnalités consiste à transformer les données de leur forme actuelle en une autre forme qui aide à résoudre le problème. Comment les données sont-elles transformées d'un formulaire à un autre? Cela consiste à utiliser des descripteurs de caractéristiques. En parlant de vision par ordinateur, il existe différents descripteurs de fonctionnalités pour transformer une image d'une forme à une autre. Ces descripteurs incluent les couleurs, les bords, les textures, les descripteurs de points-clés, etc.
Chacune de ces catégories a un type de descripteur différent. Par exemple, les descripteurs de texture comprennent des matrices de cooccurrence de niveau de gris (GLCM) et des modèles binaires locaux (LBP). En outre, les descripteurs de points clés incluent la conversion d'entités invariantes d'échelle (SIFT), la conversion accélérée de caractéristiques robustes (SURF) et Harris. Une autre question se pose ici. Quel type de descripteur est-il préférable d'utiliser pour un problème donné?
Le data scientist décide manuellement d'utiliser ou non le descripteur de fonctionnalité pour un problème donné. Les scientifiques des données commencent à suggérer certains descripteurs à utiliser, en fonction de leur expérience dans la résolution des problèmes actuels. Les caractéristiques sont extraites de l'image en fonction du descripteur sélectionné, puis deux étapes sont suivies: l'apprentissage de l'algorithme ML et le test du modèle entraîné. Notez que le modèle est le résultat de l'apprentissage de l'algorithme.
En raison d'une sélection incorrecte des descripteurs et du potentiel d'erreurs de test importantes dans les modèles formés, les scientifiques des données doivent modifier les descripteurs jusqu'à ce qu'ils trouvent le meilleur choix pour réduire l'erreur. Chaque fois que vous sélectionnez un nouveau descripteur, l'algorithme ML est entraîné et doit être testé à nouveau.
Outre l'erreur, il peut y avoir d'autres facteurs à prendre en compte lors du choix d'un descripteur, comme la complexité des calculs. En effet, il peut être fastidieux de sélectionner manuellement le meilleur descripteur pour vos besoins, en particulier pour les types de problèmes complexes qui analysent des milliers ou des millions d'images.
En supposant que chacun correspond à une classe différente, appliquons la description ci-dessus pour sélectionner le meilleur type d'entités pour classer les trois images présentées dans la figure suivante. Quelle est la catégorie la plus appropriée (couleur, bord, texture, point-clé) pour les fonctionnalités que vous utilisez? Il est clair que les couleurs de ces trois images sont différentes, vous pouvez donc utiliser un descripteur de couleur comme un histogramme de couleur. Cela servira exactement votre objectif. Une fois que vous avez créé le modèle exact, passez à la dernière étape du pipeline, le déploiement du modèle.
Étant donné que chaque image correspond à une classe différente, que se passe-t-il si nous ajoutons plus d'images à l'ensemble de données comme suit? Il est clair que différentes images ont des couleurs similaires. Oui, utiliser uniquement l'histogramme des couleurs peut ne pas servir votre objectif. Vous devez donc rechercher d'autres types de descripteurs.
Supposons que le descripteur X a été sélectionné et a bien fonctionné pour capturer les différences dans les images ci-dessous. Il est également possible d'utiliser d'autres images impossibles à distinguer dans Descriptor X. Par conséquent, au lieu du descripteur X, nous devons trouver un descripteur X qui peut capturer la différence. Ce processus est répété à mesure que le nombre d'images augmente.
La discussion ci-dessus a souligné que l'ingénierie manuelle des fonctionnalités est un problème. Si la caractérisation manuelle d'un problème donné est un problème, quelles sont les alternatives? C'est l'apprentissage en profondeur, DL pour faire court.
DL est une automatisation traditionnelle de l'apprentissage automatique, dans laquelle la machine elle-même détermine le type optimal de fonctionnalités à utiliser. La figure suivante compare les pipelines ML et DL traditionnels. Plutôt que l'ingénierie des fonctionnalités dans le pipeline ML, le pipeline DL ne supervise que les humains lors de la construction de l'architecture DL. Après cela, nous commencerons à apprendre à trouver automatiquement la quantité de caractéristiques optimale pour réduire autant que possible l'erreur. L'algorithme DL utilisé pour reconnaître les données multidimensionnelles telles que les images est le réseau neuronal à convolution (CNN).
DL permet de trouver beaucoup plus facilement un type de fonctionnalité facile à utiliser, mais il y a certaines choses à garder à l'esprit. Pour que CNN s'adapte automatiquement pour trouver les meilleures fonctionnalités, il doit y avoir des milliers d'images utilisées. MobileNet, par exemple, est un modèle CNN formé avec ImageNet, le plus grand ensemble de données de reconnaissance d'images au monde avec plus d'un million d'échantillons. De cette manière, l'abondance des données est la force motrice de la construction de MobileNet. MobileNet n'aurait pas dû être créé si un ensemble de données aussi volumineux n'était pas disponible. Une question importante se pose ici. Si vous ne disposez pas d'un ensemble de données volumineux pour créer un modèle DL à partir de zéro et que vous souhaitez gagner du temps en essayant différents descripteurs d'entités pour créer un modèle ML traditionnel, vous pouvez extraire automatiquement des entités. Que devrais-je faire? La réponse est l'apprentissage par transfert.
Vous n'avez pas besoin de créer un modèle DL à partir de zéro pour utiliser DL. Vous pouvez profiter de la formation sur le modèle DL pré-apprise et la porter vers vos propres problèmes. La section suivante décrit l'apprentissage par transfert.
L'apprentissage par transfert est plus adaptatif que créatif. Le modèle n'est pas créé à partir de zéro, il s'agit simplement d'une adaptation d'un modèle pré-entraîné à un nouveau problème. Si vous disposez d'un petit ensemble de données qui ne suffit pas pour créer un modèle DL à partir de zéro, la formation à la mobilité est une option permettant d'extraire automatiquement des entités. La figure suivante le souligne.
Avant l'entraînement au transfert, le modèle DL est entraîné sur un vaste ensemble de données contenant des milliers à des millions d'échantillons. L'entraînement d'un modèle DL formé de cette manière est transféré à l'aide de l'apprentissage par transfert, ce qui permet au modèle DL de fonctionner avec un autre petit ensemble de données de seulement des centaines ou des milliers d'images.
Beaucoup de gens me demandent si je peux utiliser l'apprentissage en profondeur même avec de petits échantillons de données. Il n'y a pas de réponse claire à une telle question, mais ce que je peux dire, c'est qu'à mesure que le nombre d'échantillons dans le nouvel ensemble de données augmente, la précision du modèle créé à partir de l'entraînement au transfert s'améliore. Le nouvel ensemble de données ne doit pas nécessairement être aussi grand que l'ensemble de données d'origine utilisé pour entraîner le modèle DL, mais plus la taille de l'échantillon est grande, mieux c'est. Plus la taille de l'échantillon du nouvel ensemble de données est grande, plus le modèle sera personnalisé pour fonctionner avec le nouvel ensemble de données, comme illustré dans la figure suivante. La raison en est que plus le nombre d'échantillons est élevé, plus les paramètres de modèle pré-entraînés auront de personnalisation pour le nouvel ensemble de données. En conséquence, le modèle obtenu par apprentissage par transfert peut faire des prédictions plus précises que le modèle avec un petit nombre d'échantillons.
Pour acquérir de nombreuses connaissances sur l'apprentissage par transfert, la section suivante explique pourquoi vous devriez utiliser l'apprentissage par transfert.
Il y a plusieurs raisons pour faire l'apprentissage par transfert. Voici quelques-unes des raisons importantes.
Lors de la création d'un modèle prédictif, la première tâche à laquelle un ingénieur ML pense est de collecter autant de données que possible pour créer un modèle précis capable de gérer différents cas. Les paramètres, qui sont des algorithmes d'apprentissage automatique, ont un grand nombre de paramètres à apprendre à partir des données, et pour certaines tâches, il n'y a pas assez de données pour aider l'algorithme à apprendre correctement ces paramètres.
L'apprentissage par transfert ne nécessite pas beaucoup de données car l'algorithme n'est pas entraîné à partir de zéro pour créer le modèle. On utilise plutôt un modèle de pré-entraînement qui pré-entraîne ces paramètres. Une petite quantité de données est nécessaire pour adapter le modèle entraîné au problème à résoudre.
Si l'ensemble de données utilisé pour former et tester les algorithmes d'apprentissage automatique n'est pas suffisamment volumineux pour garantir que le modèle atteint un état d'apprentissage solide, certains ingénieurs en apprentissage automatique le font de différentes manières. A tendance à développer de grands ensembles de données. La méthode la plus préférée consiste à collecter des échantillons plus réalistes et à les étiqueter pour une utilisation dans l'apprentissage de l'algorithme. L'étiquetage manuel n'est pas facile et l'étiquetage automatique peut ne pas être assez précis.
Pour certains types de problèmes, l'étiquetage peut ne pas être un problème. L'étiquetage d'une instance se produit une fois que l'instance elle-même devient disponible. Pour certains problèmes, le nombre d'instances est limité et il n'est pas facile de créer plus d'instances. Pour les images médicales, l'autorisation du patient est requise pour utiliser les données dans l'expérience, et tous les patients ne sont pas d'accord. S'il n'y a aucun moyen de créer plus d'instances, des techniques telles que l'augmentation des données d'image peuvent aider, mais elles n'ont pas encore beaucoup servi. C'est parce qu'il transforme (rotation, etc.) la même instance pour produire plus d'images.
L'apprentissage par transfert résout ce problème car il ne nécessite pas beaucoup de données car il ne nécessite pas de créer un modèle à partir de zéro. Vous n'avez besoin que d'une petite quantité de données pour affiner le modèle pré-entraîné. Il est préférable d'utiliser plus de données pour affiner le modèle, mais si vous ne pouvez pas, ce n'est pas grave.
Dans le point précédent, nous avons mentionné le problème que l'ensemble de données est équilibré mais que la taille de l'échantillon de toutes les classes est petite. Équilibré signifie que toutes les classes de données de l'ensemble de données sont approximativement égales et que chaque classe a une taille d'échantillon nettement plus grande que les autres.
Pour d'autres problèmes, une classe peut avoir plus d'échantillons qu'une autre. Dans ce cas, on dit que l'ensemble de données présente un déséquilibre dans la distribution des classes. En conséquence, le modèle d'apprentissage automatique est fortement biaisé vers cette classe et est plus important que les autres classes. La probabilité de classer les échantillons d'entrée selon cette étiquette de classe est plus élevée que dans les autres classes. Les classes avec un pourcentage élevé d'échantillons sont appelées classes majoritaires, et les autres classes sont appelées classes minoritaires. Les ingénieurs doivent faire face à ce problème de différentes manières.
Si le nombre d'échantillons dans la classe minoritaire est suffisamment petit pour créer un modèle d'apprentissage automatique, au lieu d'utiliser tous les échantillons de la classe majoritaire, sélectionnez une proportion égale des échantillons. Vous pouvez obtenir un ensemble de données bien équilibré.
Si la taille de l'échantillon de la classe minoritaire est petite et qu'un tel nombre n'est pas suffisant pour construire un modèle d'apprentissage automatique, alors quelques nouveaux échantillons de la classe minoritaire doivent être ajoutés. Comme mentionné précédemment, la méthode la plus préférée consiste à collecter des données plus réalistes pour la classe minoritaire. Sinon, certaines techniques syntaxiques sont disponibles pour créer de nouveaux exemples. L'une de ces techniques est appelée SMOTE (Synthetic Minority Over-sampling Technique). Le problème est que les échantillons ainsi générés ne sont pas réalistes. Plus les échantillons utilisés sont irréalistes, plus le processus d'apprentissage est mauvais.
L'apprentissage par transfert surmonte ce problème pour les raisons mentionnées ci-dessus. Vous pouvez affiner votre modèle avec quelques échantillons réalistes. Bien sûr, plus d'échantillons sont préférés pour effectuer cette tâche, mais si vous n'avez pas beaucoup d'échantillons, l'apprentissage par transfert est une meilleure option que l'apprentissage à partir de zéro.
Jusqu'à présent, les points ont nié l'idée de créer un modèle à partir de zéro et d'utiliser l'apprentissage par transfert simplement parce que la quantité de données est insuffisante. En supposant trop de données, cela signifie-t-il construire un modèle à partir de zéro et ne pas utiliser l'apprentissage par transfert? C'est certainement NON. L'apprentissage par transfert n'est pas seulement sélectionné lorsque la quantité de données est faible, mais la création d'un modèle à partir de zéro nécessite une machine puissante et une grande quantité de RAM. Toutes les machines avec de telles spécifications ne peuvent pas être utilisées. Même si le cloud computing est disponible, il peut être coûteux pour certaines personnes. Par conséquent, l'apprentissage par transfert peut être utilisé même avec une quantité suffisante de données. Avec suffisamment de données, vous pourrez peut-être affiner votre modèle pour l'adapter au problème que vous souhaitez résoudre.
Le modèle est supposé générique et l'ingénieur l'adapte au problème qu'il tente de résoudre. Il s'agit d'un passage du cas général à un cas plus spécifique qui correspond à votre objectif. Bien sûr, les ajustements peuvent ne pas nécessiter la grande quantité de données utilisées lors de la création d'un modèle à partir de zéro, mais cela aide toujours à adapter le modèle au problème.
La plupart des problèmes résolus à l'aide de l'apprentissage automatique ont des données d'entraînement et de test similaires et proviennent de la même distribution. Les modèles générés à partir de ces données ne semblent pas difficiles à tester avec des échantillons similaires aux données entraînées. Le problème est que certains nouveaux échantillons ne sont pas similaires aux données d'apprentissage et peuvent suivre une distribution légèrement différente.
Les ingénieurs en apprentissage automatique résolvent ce problème en créant de nouveaux modèles qui fonctionnent avec ces nouveaux exemples. Comme il est indénombrable, il n'est pas possible de changer le comportement d'un modèle pré-entraîné pour chaque groupe d'échantillons qui ont des caractéristiques différentes de celles utilisées dans la formation. Les modèles pré-entraînés peuvent être utilisés en production et ne peuvent pas être modifiés à mesure que de nouveaux échantillons deviennent disponibles.
Avec l'apprentissage par transfert, le modèle pré-formé a déjà vu des milliers à des millions d'échantillons couvrant de nombreux cas pouvant être présents dans les données de test. Vous êtes moins susceptible de voir des échantillons inconnus à l'avenir.
Lorsqu'un chercheur construit un réseau de neurones à convolution profonde (DCNN), la première étape consiste à bien comprendre le fonctionnement d'un réseau de neurones artificiels (ANN). En tant qu'extension d'ANN, les chercheurs doivent avoir une bonne compréhension du fonctionnement de CNN et de ses différents types de couches. Les chercheurs doivent également créer une architecture CNN pour le problème qu'ils tentent de résoudre en empilant différentes couches. Il s'agit d'une tâche ardue qui nécessite beaucoup de temps et d'efforts pour obtenir la meilleure architecture CNN.
Avec l'apprentissage par transfert, les chercheurs n'ont pas besoin de tout savoir. Tout ce que vous avez à faire est de vous soucier du nombre de paramètres que vous souhaitez modifier.
Supposons que vous ayez deux classes d'ensembles de données, chat et chien, et que vous souhaitiez créer un CNN pour cette tâche de classification. La création d'une architecture pour obtenir une précision de classification élevée peut prendre du temps et des efforts. Si vous avez la tâche de classer deux classes de classes de chevaux et d'ânes, il peut être fatigant de répéter la même tâche pour la classification des chats et des chiens. Dans de tels cas, l'apprentissage par transfert est efficace. Ce que vous avez appris des CNN que vous avez appris dans le jeu de données chat et chien peut être transféré à une autre tâche, la classification des chevaux et des ânes. Cela peut vous faire gagner beaucoup de temps à recommencer.
L'apprentissage par transfert peut être très efficace s'il est utilisé correctement. Cependant, il existe également des abus dans l'apprentissage par transfert. Par conséquent, il est important de souligner les principales conditions pour décider d'utiliser ou non l'apprentissage par transfert pour les modèles DL pré-formés. Les conditions discutées sont les suivantes.
1, cohérence du type de données 2, similitude des zones à problèmes Considérez ces deux conditions.
Avant de faire passer l'apprentissage d'un problème à un autre, les deux problèmes doivent correspondre par rapport aux données utilisées. Le type de données signifie image, son, texte, etc.
Si des images sont utilisées pour construire des modèles DL, elles doivent également être utilisées pour déplacer l'apprentissage de ces modèles vers de nouveaux problèmes. Il n'est pas correct de déplacer ce que vous avez appris avec des images vers de nouvelles tâches avec des données audio. Les caractéristiques apprises à partir d'images sont différentes de celles qui devraient être apprises à partir des signaux audio, et vice versa.
L'intégrité des données est un facteur très important qui doit être en vigueur avant le transfert d'apprentissage. D'autres facteurs contribuent à maximiser les avantages de l'utilisation de l'apprentissage par transfert. Il est préférable qu'il y ait une similitude entre les deux domaines problématiques. Nous parlerons non seulement du type de données, mais aussi de la similitude des deux problèmes. Un problème peut être lié à la classification des chats et des chiens. Les enseignements tirés de ce problème semblent s'appliquer à un autre problème qui classe deux autres types d'animaux, tels que les chevaux et les ânes.
Bien qu'il soit possible de transférer cet apprentissage au problème de la classification de deux types de tumeurs dans différents domaines du problème, il a des capacités limitées. Même lorsque les données d'image sont utilisées dans le problème de la classification de deux types de tumeurs, l'apprentissage des métastases est applicable mais limité dans sa capacité en raison des différents domaines du problème. Chez CNN, plusieurs couches apprennent des fonctionnalités générales qui peuvent être appliquées à tout type de problème. En approfondissant le CNN, la couche se concentrera sur les tâches à résoudre. Étant donné que les ensembles de données sur les chats et les chiens sont similaires en superficie aux ensembles de données sur les chevaux et les singes, de nombreuses fonctionnalités apprises dans l'un ou l'autre des modèles peuvent être appliquées à d'autres problèmes. En d'autres termes, la similitude s'étend à des niveaux plus profonds au sein du CNN, mais lorsque cet apprentissage est transféré à des problèmes dans un autre domaine, il atteint un niveau moins profond, alors que dans le CNN, il s'étend à un niveau plus profond.
Ce didacticiel a d'abord décrit le pipeline d'apprentissage automatique traditionnel et souligné que l'extraction manuelle d'entités est difficile, en particulier pour les ensembles de données volumineux et complexes. Avec l'apprentissage en profondeur, l'extraction des fonctionnalités est automatisée. Cependant, la création d'un modèle d'apprentissage profond à partir de zéro nécessite un vaste ensemble de données. L'apprentissage par transfert est une option permettant d'utiliser l'apprentissage en profondeur pour l'extraction automatique d'entités à partir de petits ensembles de données.
Dans le prochain tutoriel, partie 2, nous vous montrerons la partie pratique du téléchargement, de la préparation et de l'analyse du contenu de l'ensemble de données Fruits360. À la fin de la partie 2, en plus des étiquettes de classe, un tableau NumPy sera créé pour contenir les données d'image de tous les ensembles de données. Ces données sont ensuite fournies à MobileNet pour extraire des fonctionnalités après l'apprentissage mobile.
Recommended Posts