Andrew Eun "Passion pour l'apprentissage automatique." Traduction des chapitres 36-46

Trois ans se sont écoulés depuis la publication des premiers chapitres du Machine Learning Yearning d'Andrew Ng. Si vous êtes abonné au hub "Machine Learning", il n'est pas nécessaire de vous présenter son auteur, et vous avez probablement déjà lu le livre lui-même il y a longtemps dans la langue de la source d'origine. La traduction de la première moitié du livre en russe a été faite par alexey_nichnikov , à ce moment il a été publié sur Habré dans une série d'articles .


Je vous présente ma version de la traduction de la seconde moitié du livre, à savoir les chapitres 36-58. Il est prévu de le diviser en deux articles pour faciliter la publication. De plus, vous pouvez télécharger une traduction complète de ces chapitres, compilée en pdf , peut-être que quelqu'un trouvera ce format plus pratique pour la lecture.

Le premier article se concentrera sur la formation et les tests sur différentes distributions, ainsi que sur le débogage d'algorithmes de sortie.

Formation et test sur différentes distributions



Chapitre 36. Quand vous devez vous entraîner et tester sur différentes distributions



Les utilisateurs de votre application Cat Photo ont téléchargé 10 000 images que vous avez étiquetées manuellement comme contenant ou ne contenant pas de chats. Vous disposez également d'un plus grand ensemble de 200 000 images que vous avez téléchargées sur Internet. Comment définir la formation (ensemble de trains), la validation (ensemble de développeurs) et la sélection de tests (ensemble de tests)?

Étant donné que 10 000 images d'utilisateurs reflètent étroitement la distribution de probabilité réelle des données avec lesquelles vous souhaitez travailler avec succès à l'avenir, vous pouvez l'utiliser pour vos échantillons de validation et de test. Si vous formez un algorithme d'apprentissage en profondeur exigeant sur le nombre d'exemples de formation, vous pouvez lui donner 200 000 images supplémentaires téléchargées sur Internet pour la formation. Ainsi, les données des échantillons de validation et d'essai auront des distributions de probabilité différentes. Comment cela affectera-t-il le résultat de votre travail?

Au lieu de diviser nos données en échantillons de formation, de validation et de test, nous pouvons prendre toutes les 210 000 images disponibles et les mélanger au hasard dans des échantillons de formation, de validation et de test. Dans ce cas, toutes les données sont livrées avec la même distribution. Mais je ne recommande pas d'utiliser cette méthode, car environ 97,6% (205 000/210 000) de vos échantillons de validation et de test seront constitués d'images téléchargées sur Internet qui ne reflètent pas la distribution réelle sur laquelle vous souhaitez réussir.

Recommandation pour la définition des échantillons de validation et d'essai:

  • sélectionnez des échantillons de validation et de test pour refléter les données que vous prévoyez de recevoir à l'avenir et avec lesquelles vous souhaitez travailler avec succès.

La plupart des publications universitaires sur l'apprentissage automatique suggèrent que la formation, la validation et les échantillons de test ont tous la même distribution. 1 À l'aube de l'apprentissage automatique, les données étaient rares. Habituellement, nous n'avions qu'un seul ensemble de données avec une certaine distribution de probabilité. Par conséquent, nous avons divisé au hasard l'ensemble complet en échantillons d'apprentissage, de validation et de test, en supposant que toutes les données provenaient de la même source, ce qui correspond généralement à la réalité.
1 Il existe un certain nombre d'études scientifiques sur la formation et la mise à l'essai de modèles sur diverses distributions. Les exemples incluent l'adaptation de domaine, l'apprentissage par transfert et l'apprentissage multitâche. Mais il y a encore un énorme fossé entre la théorie et la pratique. Si vous entraînez un modèle sur l'ensemble de données A et testez sur l'ensemble de données B, qui est très différent, la chance peut avoir un impact énorme sur les performances de votre algorithme. (Ici, la «chance» comprend la sélection manuelle des attributs par un chercheur pour une tâche spécifique, ainsi que d'autres facteurs que nous ne comprenons pas encore.) Cela rend difficile la conduite d'une étude académique systématique de la formation et des tests sur diverses distributions.

Mais à l'ère des mégadonnées, nous avons maintenant accès à d'énormes ensembles d'entraînement, tels que des images avec des chats sur Internet. Même si l'échantillon de formation a une distribution différente de la distribution des échantillons de validation et de test, nous voulons toujours l'utiliser pour la formation, car cela peut fournir beaucoup d'informations supplémentaires.

Dans l'exemple avec un détecteur de chat, au lieu de mettre les 10 000 images téléchargées par les utilisateurs dans les échantillons de validation et de test, nous n'avons pu y placer que 5 000 images. Et les 5000 autres exemples que nous pouvons mettre dans l'ensemble de formation. Ainsi, l'échantillon de formation comprendra 205 000 exemples et comprendra des données ayant la même distribution que dans les échantillons de validation et d'essai, plus 200 000 images Internet. Dans le chapitre suivant, nous expliquerons pourquoi cette méthode est utile.

Regardons un deuxième exemple. Supposons que vous construisez un système de reconnaissance vocale pour transcrire des adresses pour l'application vocale Navigator. Vous avez 20 000 exemples, dans chacun desquels l'utilisateur nomme une adresse. Mais vous avez également 500 000 autres enregistrements audio dans lesquels les utilisateurs parlent de sujets gratuits. Vous pouvez prendre 10 000 exemples avec des adresses pour les échantillons de validation et de test, et les 10 000 autres exemples, plus 500 000 exemples supplémentaires à inclure dans l'ensemble de formation.

Nous continuerons de supposer que nos données de validation et d'échantillons de test ont la même distribution. Mais il est important de comprendre et de se rappeler que les différentes distributions dans les échantillons de formation et de validation / test entraîneront des problèmes particuliers.


Chapitre 37. Comment décider d'utiliser toutes vos données ou seulement une partie



Supposons que l'échantillon d'apprentissage de votre détecteur de chat comprend 10 000 images téléchargées par l'utilisateur. Laissez ces données avoir la même distribution que dans les échantillons de validation et de test, et c'est pour une telle distribution que vous souhaitez obtenir le résultat maximum. Vous avez également 20 000 images supplémentaires téléchargées sur Internet. Est-il nécessaire d'inclure les 20 000 + 10 000 = 30 000 images dans l'ensemble de formation, ou est-il préférable de supprimer 20 000 images Internet de peur d'introduire des erreurs dans votre algorithme d'apprentissage?

En utilisant des générations précédentes d'algorithmes d'apprentissage (comme un algorithme de vision par ordinateur conçu manuellement, suivi d'un simple classificateur linéaire), il y avait un risque réel que la combinaison de données des deux sources puisse dégrader les résultats. Ainsi, certains ingénieurs vous mettront en garde contre l'inclusion de 20 000 images en ligne.

Mais à l'ère moderne des algorithmes d'apprentissage puissants et flexibles, tels que les grands réseaux de neurones, ce risque a été considérablement réduit. Si vous pouvez vous permettre de construire un réseau de neurones avec un nombre suffisamment important de couches cachées, vous pouvez ajouter en toute sécurité 20 000 images Internet à votre ensemble d'entraînement. L'ajout d'images est susceptible d'améliorer votre résultat net.

Cette observation est basée sur le fait qu'il existe une correspondance xy qui fonctionne bien pour les deux types de données. En d'autres termes, il existe une sorte de système qui, après avoir reçu une image Internet ou une image d'une application mobile, prédit de manière fiable une étiquette sans même connaître la source de l'image.

L'ajout de 20 000 images Internet supplémentaires aura les effets suivants:

  1. Cela donnera à votre réseau de neurones plus d'exemples de l'apparence / non des chats. Ceci est utile car les images Web et les images téléchargées par les utilisateurs d'une application mobile présentent des similitudes. Votre réseau de neurones peut appliquer une partie des connaissances acquises grâce aux images en ligne aux images d'une application mobile.
  2. Cela oblige le réseau de neurones à consacrer une partie de ses ressources à la reconnaissance de propriétés spécifiques aux images Internet (par exemple, une résolution plus élevée, diverses méthodes de conception, etc.). une partie des capacités représentatives du réseau neuronal. Ainsi, il y aura moins de possibilités de reconnaître les données reçues d'une application mobile, et c'est ce qui devrait vraiment vous inquiéter. Théoriquement, cela peut dégrader les performances de votre algorithme.

Pour expliquer le deuxième effet en d'autres termes, nous pouvons nous tourner vers un personnage fictif, Sherlock Holmes, qui dit que votre cerveau ressemble à un grenier qui dispose d'un espace limité. Il dit que «à chaque ajout de connaissances, vous oubliez ce que vous saviez auparavant. Par conséquent, il est extrêmement important de ne pas permettre que des faits inutiles remplacent ceux qui sont utiles. » 2
2 «Etude in Scarlet», Arthutre Conan Doyle, 1887

Heureusement, si vous avez la puissance de calcul nécessaire pour construire un réseau neuronal suffisamment grand, c'est-à-dire un «grenier suffisamment grand», alors cet «éviction» décrit ci-dessus n'est pas un problème sérieux. Vous avez suffisamment de possibilités de formation sur les images Internet et sur les images d'une application mobile, tandis que les deux types de données ne rivalisent pas pour la capacité de reconnaissance. Le "cerveau" de votre algorithme est suffisamment grand pour que vous n'ayez pas à vous inquiéter de ne pas avoir soudainement assez "d'espace dans le grenier".

Mais si vous ne disposez pas d'un réseau neuronal suffisamment grand (ou d'un autre algorithme d'apprentissage très flexible), vous devez accorder plus d'attention à vos données d'entraînement qui correspondent à votre validation et à votre échantillon de test.

Si vous pensez que vous avez des données qui n'apportent aucun avantage, vous devez simplement les exclure pour accélérer les calculs. Par exemple, supposons que vos échantillons de validation et de test contiennent principalement des photographies aléatoires de personnes, de lieux, de panneaux et de pointeurs, ainsi que d'animaux. Supposons que vous disposiez également d'une grande collection de documents historiques numérisés:



Ces documents ne contiennent rien comme un chat. Ils sont également complètement différents des données de vos échantillons de validation et de test. Cela n'a aucun sens d'inclure ces données en tant qu'exemples négatifs, car dans ce cas, les avantages décrits dans le premier effet seront négligeables. Sur la base de ces données, votre réseau de neurones ne sera pas en mesure de découvrir presque tout ce qu'il pourrait appliquer à votre échantillon de validation et de test. L'inclusion de ces exemples entraînera une perte de ressources informatiques et une diminution de la capacité représentative du réseau neuronal.


Chapitre 38. Comment décider d'inclure ou non des données contradictoires



Supposons que vous souhaitiez apprendre à prévoir les prix des logements à New York. Étant donné la taille de la maison (entrée x ), vous voulez prédire le prix (étiquette cible y ).

Les prix des logements à New York sont très élevés. Supposons que vous ayez un deuxième ensemble de données - les prix des logements à Detroit, Michigan, où les prix des logements sont beaucoup plus bas. Dois-je inclure ces données dans mon ensemble d'entraînement?

Etant donné la même taille x , le prix d'une maison y est très différent selon que ce soit à New York ou à Détroit. Si vous vous souciez uniquement de la prévision des prix des logements à New York, la combinaison des deux ensembles de données nuira à votre productivité. Dans ce cas, il serait préférable de ne pas utiliser de données contradictoires de l'ensemble de Détroit. 3
3 Il existe un moyen de résoudre le problème d'incompatibilité des données de Detroit avec les données de New York, à savoir l'ajout d'une fonctionnalité supplémentaire à chaque exemple de formation, c'est-à-dire indication de la ville. Étant donné la valeur d'entrée de x , qui indique maintenant la ville, la valeur cible de y est désormais déterminée de manière unique. Cependant, dans la pratique, je ne vois toujours pas que cela se fasse souvent.

En quoi cet exemple avec un logement à New York et à Detroit diffère-t-il de notre exemple avec des images Internet de chats et des images d'une application mobile?

L'exemple avec les images de chats diffère en ce que, étant donné l'image d'entrée x , vous pouvez prédire de manière fiable l'étiquette y , en indiquant s'il y a un chat dessus, sans même savoir si nous avons reçu l'image d'Internet ou d'une application mobile. C'est-à-dire il existe une fonction f (x) qui reflète de manière fiable la correspondance de l'entrée x avec la sortie cible y , sans même connaître la source d'origine de x . Ainsi, la tâche de reconnaissance des images Internet "correspond" à la tâche de reconnaissance des images d'une application mobile. Cela signifie qu'il y avait un petit inconvénient (à l'exception des coûts de calcul) de l'inclusion de toutes les données et de certains avantages significatifs. Contrairement à l'exemple avec des données contradictoires de New York et Detroit, dans lesquelles, pour la même valeur d'entrée x (taille de la maison), le prix est très différent selon la ville dans laquelle cette maison est située.


Chapitre 39. Données de pesée



Supposons que vous ayez 200 000 images en ligne et 5 000 images d'utilisateurs de votre application mobile. Il existe un rapport de 40: 1 entre les tailles de ces ensembles de données. Théoriquement, tant que vous construisez un énorme réseau de neurones et que vous le formez suffisamment longtemps avec tous les 205 000 exemples disponibles, il n'y a rien de mal à faire fonctionner l'algorithme aussi bien sur les images Internet que sur les images mobiles.

Mais en pratique, ayant 40 fois plus d'images Internet que les images d'une application mobile, vous devrez peut-être dépenser 40 fois plus de ressources informatiques que lorsque vous avez formé un réseau pour seulement 5 000 images.

Si vous ne disposez pas d'énormes ressources informatiques, vous pouvez donner aux images Internet beaucoup moins de poids comme compromis.

Par exemple, supposons que votre objectif d'optimisation soit l'erreur quadratique (ce n'est pas un bon choix pour le problème de classification, mais cela simplifiera notre explication). Ainsi, votre algorithme d'apprentissage essaie d'optimiser:

$$ afficher $$ \ min_θ \ sum _ {(x, y) ∈ MobileImg} (h_θ (x) -y) ^ 2 + \ sum _ {(x, y) ∈InternetImg} (h_θ (x) -y) ^ 2 $$ afficher $$


Le premier montant ci-dessus est l'erreur totale pour 5 000 images mobiles et le second montant est l'erreur totale pour 200 000 images Internet. Au lieu de cela, vous pouvez optimiser avec un paramètre supplémentaire  beta:

$$ afficher $$ \ min_θ \ sum _ {(x, y) ∈ MobileImg} (h_θ (x) -y) ^ 2 + \ beta \ sum _ {(x, y) ∈InternetImg} (h_θ (x) -y) ^ 2 $$ afficher $$


Si vous installez  beta= 1/40, l'algorithme donnera un poids égal à 5 ​​000 images mobiles et 200 000 images Internet. Vous pouvez également définir le paramètre  betad'autres valeurs, éventuellement en l'ajustant à l'échantillon de validation.

En attribuant un poids inférieur aux images Internet, vous n'avez pas besoin de créer un réseau neuronal massif pour vous assurer que l'algorithme s'adapte bien aux deux types de tâches. Cette méthode de «repondération» n'est nécessaire que si vous pensez que des données supplémentaires (images Internet) ont une distribution très différente des données des échantillons de validation et de test, ou s'il y a beaucoup plus de données supplémentaires que les données obtenues avec la même distribution. comme dans les échantillons de validation et de test (images mobiles).


Chapitre 40. Généralisation de l'échantillon d'apprentissage à un échantillon de validation



Supposons que vous appliquez ML dans une situation où l'échantillon d'apprentissage est différent de celui de validation / test. Supposons qu'un échantillon de formation contient des images Internet + des images mobiles et que les échantillons de validation / test contiennent uniquement des images mobiles. Cependant, l'algorithme ne fonctionne pas très bien: il a une erreur beaucoup plus élevée sur l'échantillon de validation / test que nous le souhaiterions. Voici quelques raisons pour lesquelles cela peut ne pas être le cas:

  1. L'algorithme ne fonctionne pas très bien sur l'ensemble d'entraînement. Il s'agit d'un problème de biais élevé (évitable) de la distribution de l'échantillon d'apprentissage.
  2. L'algorithme fonctionne bien sur l'ensemble d'apprentissage, mais se généralise mal aux nouvelles données (précédemment non représentées) prises avec la même distribution que dans l'ensemble d'apprentissage. Il s'agit d'une variance élevée.
  3. L'algorithme se généralise bien aux nouvelles données (précédemment non représentées) prises avec la même distribution que dans l'échantillon d'apprentissage, mais pas aux données de l'échantillon de validation / test. Nous appelons ce problème de non-concordance des données en raison du fait que les données de l'échantillon d'apprentissage sont mal corrélées avec les données des échantillons de validation / test.

Par exemple, supposons que les gens obtiennent un résultat presque parfait dans la tâche d'identification des chats. Et votre algorithme a atteint:

  • 1% d'erreurs dans l'échantillon de formation
  • 1,5% d'erreurs sur les nouvelles données (non affichées auparavant dans l'algorithme) ayant la même distribution que l'échantillon d'apprentissage
  • 10% d'erreurs dans l'échantillon de validation

Dans ce cas, vous avez certainement un problème de non-concordance des données. Pour l'activer, vous pouvez essayer de rendre l'exemple de formation plus similaire à celui de validation / test. Nous discuterons quelques techniques de cette technique plus tard.

Pour diagnostiquer dans quelle mesure l'algorithme souffre de chacun des problèmes 1 à 3 décrits ci-dessus, il sera utile d'avoir un ensemble de données différent. En particulier, au lieu de donner à l'algorithme toutes les données disponibles pour la formation, vous pouvez le diviser en deux parties: l'échantillon de formation réel sur lequel l'algorithme sera formé, et un ensemble distinct, que nous appellerons formation-validation (ensemble «trainig dev» ), que nous n'utiliserons pas dans la formation.

Ainsi, vous disposez de 4 ensembles de données:

  • L' ensemble d'entraînement (ensemble d'entraînement). Ce sont les données sur lesquelles l'algorithme sera formé (par exemple, les images Internet + les images d'une application mobile). Ces données ne doivent pas être prises avec la même distribution, dont nous nous concentrons finalement sur le résultat (échantillons de validation / test).
  • Échantillon de formation et de validation (ensemble «formation dev»). Ces données sont prises avec la même distribution que dans l'échantillon de formation (par exemple, images Internet + images d'une application mobile). Cet ensemble est généralement plus petit que l'ensemble d'entraînement, et il devrait être suffisamment grand pour évaluer et suivre la progression de notre algorithme d'entraînement.
  • Échantillonnage de validation (ensemble de développeurs). Ces données sont prises avec la même distribution que dans l'échantillon de test et doivent refléter pleinement la distribution des données sur lesquelles nous nous efforçons d'obtenir une amélioration maximale (par exemple, des images provenant d'une application mobile).
  • Ensemble de test Ces données sont prises avec la même distribution que dans l'échantillon de validation (par exemple, les images d'une application mobile).

Armé de ces quatre ensembles de données distincts, vous pouvez évaluer:

  • L'erreur de formation (erreur de formation), en évaluant l'échantillon de formation.
  • La capacité de l'algorithme à généraliser à de nouvelles données, avec la même distribution que dans l'ensemble de formation, en évaluant l'ensemble de formation-validation.
  • L'efficacité de l'algorithme dans son ensemble pour le problème à résoudre, en évaluant sur un échantillon de validation et (ou) de test.

La plupart des recommandations qui ont été données dans les chapitres 5-7 de ce livre pour choisir la taille de l'échantillon de validation sont également applicables à l'échantillon de formation et de validation.


Chapitre 41. Détermination du biais, de la variance et de l'erreur de non-concordance des données



Supposons que les gens atteignent une efficacité presque parfaite (erreur ≈0%) dans les tâches de détection des chats, et donc le taux d'erreur optimal est d'environ 0%.

Supposons que vous ayez:

  • 1% d'erreurs dans l'échantillon de formation
  • 5% d'erreurs dans l'échantillon de formation et de validation
  • 5% d'erreurs dans l'échantillon de validation

Qu'est-ce que cela nous apprend? Vous savez que vous avez un écart élevé. Les méthodes de réduction de la dispersion décrites précédemment devraient vous permettre de progresser.

Supposons maintenant que votre algorithme ait atteint:

  • 10% d'erreurs dans l'échantillon de formation
  • 11% d'erreurs dans l'échantillon de formation et de validation
  • 12% d'erreurs dans l'échantillon de validation

Cela suggère que vous avez un biais évitable élevé dans l'ensemble d'entraînement. C'est-à-direl'algorithme produit de mauvais résultats sur l'ensemble d'apprentissage, mais les méthodes de réduction de décalage devraient aider.

Dans les deux exemples ci-dessus, l'algorithme ne souffre que d'un biais élevé (biais évitable) ou uniquement d'une dispersion élevée (variance). De plus, l'algorithme peut souffrir de toute combinaison de biais élevé, de dispersion élevée et d'incohérence des données. Par exemple:

  • 10% d'erreurs dans l'échantillon de formation
  • 11% d'erreurs dans l'échantillon de formation et de validation
  • 20% d'erreurs dans l'échantillon de validation

Cet algorithme souffre d'un biais élevé (biais évitable) et d'une inadéquation des données, et en même temps ne rencontre pas de problèmes de dispersion élevée dans l'échantillon d'apprentissage.

Il peut être plus facile de comprendre comment les différents types d'erreurs sont liés les uns aux autres en les écrivant dans le tableau suivant:


En poursuivant avec l'exemple du détecteur d'image de chat, vous pouvez voir qu'il existe deux distributions de données différentes (distribution A et distribution B) le long de l'axe X. Sur l'axe Y, nous avons trois types d'erreurs: l'erreur humaine, l'erreur sur les exemples à partir desquels l'algorithme a été formé et l'erreur sur les exemples, sur lesquels l'algorithme n'a pas été formé. Nous pouvons remplir les cellules du tableau avec les différents types d'erreurs que nous avons identifiés dans le chapitre précédent.

Si vous le souhaitez, vous pouvez également remplir les deux cellules restantes de ce tableau: vous pouvez remplir le champ dans le coin supérieur droit («L'efficacité est accessible aux humains dans les images d'une application mobile»), en demandant à quelqu'un de marquer les images des chats de l'application mobile et ensuite de mesurer son erreur . Vous pouvez remplir le champ suivant en prenant des images de chats à partir d'une application mobile (distribution B) et en plaçant une petite partie dans l'ensemble d'apprentissage afin que le réseau de neurones en apprenne également. Ensuite, vous mesurez l'erreur du modèle formé sur ce sous-ensemble de données. Remplir ces deux champs supplémentaires peut parfois donner une compréhension supplémentaire du fonctionnement de l'algorithme sur deux distributions différentes (distribution A et B) de données.

En comprenant les types d'erreurs dont l'algorithme souffre le plus, vous pouvez mieux déterminer s'il faut se concentrer sur la réduction du biais, la réduction de la variance ou la réduction des incohérences des données.


Chapitre 42. Résolution de l'erreur de non-concordance des données



Supposons que vous ayez développé un système de reconnaissance vocale qui fonctionne très bien sur un échantillon de formation et sur un échantillon de validation de formation. Cependant, l'algorithme ne fonctionne pas bien sur votre échantillon de validation: vous avez un problème de non-concordance des données. Que pouvez-vous faire?

Je vous recommande: (i) d'essayer de comprendre quelles propriétés diffèrent dans les données des échantillons de formation et de validation; (ii) essayez de trouver plus de données de formation qui correspondent mieux aux exemples de l'échantillon de validation avec lesquels votre algorithme a des problèmes. 4
4 « » (domain adaptation) — . , , .

Par exemple, supposons que vous effectuez une analyse des erreurs de validation pour un système de reconnaissance vocale: vous parcourez manuellement 100 exemples et essayez de comprendre où l'algorithme fait des erreurs. Vous constaterez que votre système ne fonctionne pas bien, car la plupart des enregistrements audio de l'échantillon de validation ont été effectués à l'intérieur de la voiture, tandis que la plupart des exemples de l'échantillon d'entraînement ont été enregistrés dans le contexte du silence. Le bruit du moteur et de la route dégrade considérablement les performances de votre système de reconnaissance vocale. Dans ce cas, vous pouvez essayer d'obtenir plus d'exemples de formation contenant des enregistrements audio réalisés dans la voiture. L'analyse d'erreurs a pour but de comprendre les différences significatives entre les échantillons d'apprentissage et de validation, qui conduisent à une non-concordance des données.

Si votre échantillon de formation et de validation de formation comprend le son enregistré dans la voiture, vous devez également vérifier l'efficacité de votre système sur cet ensemble de données. Si cela fonctionne bien sur des exemples «automobiles» d'un échantillon de formation, mais pas sur des exemples «automobiles» d'un échantillon de formation-validation, cela confirme une fois de plus l'hypothèse selon laquelle obtenir plus d'exemples «automobiles» aidera. C'est pourquoi, dans le chapitre précédent, nous avons discuté de la possibilité d'inclure dans votre ensemble de formation un ensemble de certaines données ayant la même distribution que dans les échantillons de validation / test. Cela vous permet de comparer l'efficacité du système avec des exemples «automobiles» de l'ensemble de formation par rapport à des exemples similaires d'échantillons de validation / test.

Malheureusement, il n'y a aucune garantie en la matière. Par exemple, si vous n'avez pas la possibilité d'obtenir davantage de données de formation qui correspondraient mieux aux données de l'échantillon de validation, vous ne disposez peut-être pas d'un chemin clair pour améliorer l'efficacité.


Chapitre 43. Synthèse des données artificielles



Votre système de reconnaissance vocale a besoin de plus de données qui sonnent comme si les enregistrements audio de ces exemples étaient faits dans une voiture. Au lieu de collecter beaucoup de données pendant que vous roulez, il pourrait y avoir un moyen plus simple d'obtenir ces données: en les générant artificiellement.

Supposons que vous receviez un grand nombre d'enregistrements audio avec du bruit de route / voiture. Vous pouvez télécharger ces données depuis plusieurs sites. Supposons que vous ayez également un grand ensemble de formation, dans les exemples dont les gens parlent dans une pièce calme. Si vous prenez un enregistrement audio d'une personne qui parle et "y ajoutez" les sons du bruit de la voiture / route, vous obtiendrez un enregistrement audio qui sonne comme si cette personne parlait dans une voiture bruyante. En utilisant ce processus, vous pouvez synthétiser une énorme quantité de données qui semblent avoir été collectées à l'intérieur d'une voiture.

En général, il existe plusieurs circonstances où la génération de données artificielles vous permet de créer un énorme ensemble de données qui correspond raisonnablement à l'échantillon de validation. Prenons un détecteur d'image de chat comme deuxième exemple. Vous avez remarqué que les images de l'échantillon de validation sont beaucoup plus floues lors du déplacement, car elles sont généralement obtenues auprès d'utilisateurs de téléphones mobiles qui bougent légèrement le téléphone pendant la prise de vue. Vous pouvez prendre des images Internet nettes de l'ensemble d'entraînement et leur ajouter une imitation de flou de mouvement, les rendant ainsi plus similaires aux images de l'ensemble de validation.

Gardez à l'esprit que la synthèse de données artificielles a ses propres problèmes: il est parfois plus facile de créer des données synthétiques qui semblent réalistes pour une personne que de créer des données qui semblent réalistes pour un ordinateur. Par exemple, supposons que vous ayez 1000 heures d'enregistrements vocaux dans un ensemble d'entraînement, mais seulement 1 heure de bruit de voiture. Si vous utilisez à plusieurs reprises la même heure de bruit de voiture avec des pièces autres que les 1000 heures d'origine de l'ensemble d'entraînement, vous obtiendrez un ensemble de données synthétique dans lequel le même bruit de voiture est répété maintes et maintes fois. Bien que la personne qui écoute ce son ne puisse probablement pas nommer ses caractéristiques - tous les bruits de voiture sonnent de la même manière pour la plupart d'entre nous, il est possible que l'algorithme d'apprentissage soit recyclé pendant 1 heure de bruit de voiture. De cette façonil peut mal se généraliser à de nouveaux enregistrements audio dans lesquels le bruit de la voiture sonne différemment.

Supposons également que vous ayez 1000 heures uniques de bruit de voiture, mais seulement 10 voitures différentes ont été utilisées pour les enregistrer. Dans ce cas, l'algorithme peut se recycler sur les enregistrements de ces 10 voitures et afficher de mauvaises performances lors du test des enregistrements d'une autre voiture. Malheureusement, ces problèmes sont difficiles à détecter.


Prenons un autre exemple, supposons que vous créez un système de vision par ordinateur pour reconnaître les voitures. Supposons que vous collaborez avec une société de jeux vidéo qui possède plusieurs modèles de voitures fabriqués à l'aide d'infographies. Pour former votre algorithme, vous utilisez ces modèles pour générer des images de voiture synthétiques. Même si les images synthétisées semblent très réalistes, cette approche (qui a été suggérée indépendamment par de nombreuses personnes) ne fonctionnera probablement pas bien. Un jeu vidéo peut avoir environ 20 modèles de voitures. La création d'un modèle 3D de voiture de haute qualité coûte très cher.Si vous jouiez à un jeu, vous ne remarqueriez probablement pas que vous voyez les mêmes voitures encore et encore, peut-être uniquement dans des couleurs différentes. C'est-à-direCes données vous semblent très réalistes. Mais par rapport à la variété de toutes les voitures sur la route, et donc avec l'ensemble que vous verrez probablement dans l'échantillon de validation / test, cet ensemble de 20 modèles synthétisés ne capture qu'une infime fraction de toute la variété mondiale de voitures. Ainsi, si vos 100 000 exemples de formation sont entièrement dérivés de ces 20 voitures, votre système sera recyclé par ces modèles spécifiques et il ne pourra pas bien se généraliser aux échantillons de validation / test qui incluent d'autres modèles de voitures.

Lors de la synthèse des données, déterminez si vous générez réellement un ensemble représentatif d'exemples. Essayez de ne pas donner aux propriétés de données synthétisées
permettre à l'algorithme d'apprentissage de distinguer un exemple synthétisé d'un exemple non synthétisé, comme dans les cas où toutes les données synthétisées sont obtenues sur la base de l'un des 20 modèles de voiture, ou tous les sons synthétisés sont obtenus à partir d'une seule heure de bruit de voiture. Suivre ces conseils peut être très difficile.

Lorsque nous travaillons sur la synthèse de données, il a parfois fallu des semaines à notre équipe pour créer des données avec des détails suffisamment proches de la distribution réelle des données synthétisées ayant un effet significatif. Mais si vous pouvez obtenir les bons détails, cela vous donnera soudainement accès à un ensemble d'entraînement beaucoup plus vaste qu'auparavant.

Débogage des algorithmes de sortie


Chapitre 44. Référence d'optimisation



Imaginez que vous développez un système de reconnaissance vocale. Votre système fonctionne en prenant l'audio A en entrée et calcule un score A (S) pour chaque phrase de sortie possible S. Par exemple, vous pouvez essayer d'évaluer le score A (S) = P (S | A), c'est-à-dire la probabilité que la phrase S soit la transcription de sortie correcte, étant donné que l'audio A a été envoyé à l'entrée.

Compte tenu de la méthode de calcul du score A (S), vous devez trouver une phrase en anglais qui aura la note maximale:

Output=argmaxSScoreA(S)


Comment calculer le "arg max" à partir de l'exemple ci-dessus? Il y a 50 000 mots en anglais, auquel cas il y a (50 000) N phrases possibles de longueur N. C'est trop pour les énumérer.

Donc, vous devez appliquer un algorithme de recherche approximatif pour essayer de trouver la valeur de S qui optimise (maximise) le score du score A (S). Un exemple d'un tel algorithme est la recherche par faisceau, qui enregistre uniquement les K meilleurs candidats dans le processus de recherche. (Pour les besoins de ce chapitre, vous n'avez pas besoin de comprendre les détails de l'opération de recherche de rayons.) De tels algorithmes ne garantissent pas de trouver la valeur de S, ce qui maximise le score Score A (S).

Imaginez que sur une bande audio, quelqu'un ait dit "J'adore l'apprentissage automatique". Mais au lieu de la transcription correcte, votre système génère le mauvais «j'aime les robots». Il y a deux raisons possibles à ce qui pourrait mal tourner:

  1. Problèmes dans l'algorithme de recherche . L'algorithme de recherche de faisceau a incorrectement trouvé la valeur de S, ce qui maximise le score A (S).
  2. Un problème objectif avec la fonction d'évaluation . Notre estimation du score A (S) = P (S | A) n'était pas exacte. En particulier, le score A (S) sélectionné ne permettait pas de reconnaître correctement la transcription correcte "J'aime le machine learning".

En fonction de la cause de l'erreur système, vous devez prioriser différemment pour les efforts ultérieurs. Dans le premier cas, vous devez travailler sur l'amélioration de l'algorithme de recherche, dans le second cas, vous devez travailler sur un algorithme d'apprentissage qui calcule un score Score A (S).

Face à une situation similaire, certains chercheurs décident au hasard de travailler sur un algorithme de recherche, tandis que d'autres choisissent au hasard de travailler sur les améliorations d'apprentissage de la fonction de notation Score A (S). Mais jusqu'à ce que vous découvriez les véritables causes d'une erreur système, tous vos efforts peuvent être gaspillés. Comment prendre une décision plus systématique sur ce qui mérite d'être travaillé?

Laissez sortirsera la transcription de sortie ("I love robots"). Soit S * la transcription correcte («J'adore l'apprentissage automatique»). Pour comprendre lequel des deux problèmes énumérés ci-dessus est confronté, vous pouvez effectuer un test de vérification d'optimisation: calculez d'abord les scores pour le score A (S *) et pour le score A (S out ). Vérifiez ensuite laquelle des deux notes aura le plus d'importance. Il y a deux probabilités:

  1. Score A (S*) > Score A (S out ), .. ().

    S*. S out . , S, Score A (S). , . , (beam search).
  2. Score A (S*) ≤ Score A (S out ), .. ().

    , Score A (.): S out . . Score A (S) S.

Notre discussion a touché un seul exemple. Pour mettre le test de contrôle d'optimisation en pratique, vous devez vérifier les erreurs de votre échantillon de validation. Pour chaque erreur, vous devez vérifier que l'estimation de la transcription attendue (correcte) est supérieure à l'estimation de la transcription de sortie (incorrecte), c'est-à-dire Score A (S *)> Score A (S out ). Chaque exemple de l'échantillon de validation pour lequel une telle inégalité persiste sera marqué comme une erreur causée par l'algorithme d'optimisation. Chaque exemple pour lequel cette inégalité ne persiste pas sera considéré comme une erreur due à la mauvaise méthode de calcul du score A (.).

Par exemple, vous constatez que 95% des erreurs sont causées par le travail de la fonction d'évaluation lors du calcul du score A(.), et seulement 5% des erreurs sont causées par l'algorithme d'optimisation. Vous savez maintenant que peu importe à quel point vous améliorez votre fonction d'optimisation, en réalité, cela aidera à éliminer pas plus de 5% des erreurs. Par conséquent, vous devez vous concentrer sur l'amélioration de la méthode de calcul du score A (.).


Chapitre 45. Procédure générale de test de contrôle d'optimisation



Vous pouvez appliquer le repère d'optimisation lors de l'obtention de certains x en entrée, vous savez comment calculer le score X (y), qui indique dans quelle mesure la sortie y correspond au x donné à l'entrée. De plus, vous utilisez l'algorithme de recherche approximatif pour trouver le score Y max arg max (y), mais vous pensez que l'algorithme de recherche se trompe en trouvant le maximum. Dans l'exemple précédent, avec un système de reconnaissance vocale, x = A était un enregistrement audio et y = S était une transcription de sortie.

Supposons que y * soit la valeur de sortie correcte, mais l'algorithme renvoie yout à la place. Ensuite, l'essentiel est de vérifier comment le score X (y *) et le score X (y out ) sont liés. Si la première estimation est plus grande que la seconde, alors la cause de l'erreur est dans l'algorithme d'optimisation, sinon le défaut réside dans la fonction de calcul du score Score X (y).

Regardons un autre exemple. Supposons que vous créez un système de traduction automatique du chinois vers l'anglais. Votre système fonctionne en recevant une phrase C, calcule un score C (E) pour chaque version possible de la traduction E. Par exemple, vous pouvez utiliser le score Score C (E) = P (E | C), c'est-à-dire la probabilité que le transfert soit E, étant donné que la phrase C a été soumise.

Votre moteur de traduction automatique essaie de calculer:

Output=arg maxEScoreC(E)



Cependant, l'ensemble de toutes les phrases E possibles en anglais est si grand que vous devez vous fier à un algorithme de recherche heuristique.

Supposons que votre algorithme produit la mauvaise traduction E plus souvent qu'une certaine traduction correcte E *. Ensuite, le test de contrôle d'optimisation permettra de calculer l'inégalité Score C (E *)> Score C (E out ). S'il est enregistré, alors Score C (.) Reconnaît correctement E * comme la meilleure sortie E out , par conséquent, vous attribuerez cette erreur à la part de l'algorithme de recherche approximatif, sinon, à la fonction de calcul Score C (.).

Il s'agit d'un schéma très général en IA: d'abord, nous formons la fonction d'estimation approximative Score x (.), Ensuite, nous utilisons l'algorithme de maximisation approximative. Si vous vous souvenez de ce modèle, vous pouvez utiliser le test de contrôle d'optimisation pour trouver la source des erreurs.


Chapitre 46. Exemple d'apprentissage par renforcement




Supposons que vous utilisiez l'apprentissage automatique pour enseigner à un hélicoptère comment effectuer des manœuvres complexes. Ci-dessus est une image en accéléré d'un hélicoptère contrôlé par un ordinateur qui atterrit avec le moteur coupé.

Cette manœuvre est appelée atterrissage en autorotation. Il permet à l'hélicoptère d'atterrir, même si le moteur s'écrase soudainement. Les pilotes humains pratiquent cette manœuvre dans le cadre de leur formation. Votre objectif est d'utiliser l'algorithme d'apprentissage automatique afin que l'hélicoptère puisse voler sur une trajectoire T et atterrir en toute sécurité à la fin.

Pour appliquer la formation de renforcement, vous devez développer une «fonction de récompense» R (.) Qui donne une estimation montrant la qualité de chaque trajectoire possible de T., par exemple, si la trajectoire T a conduit à un accident d'hélicoptère, puis laissez la récompense R (T) = - 1000, soit a une grande valeur négative. La trajectoire T, qui s'est terminée par un atterrissage réussi, aura une estimation positive de R (T), qui reflète avec précision la dépendance de la fluidité de l'atterrissage. La fonction de récompense R (.) Est généralement sélectionnée manuellement pour quantifier à quel point les différentes trajectoires de T. sont souhaitables. Elle doit compenser divers facteurs: combien elle a tremblé pendant l'atterrissage, si l'hélicoptère a atterri exactement au bon endroit, la difficulté de la descente pour les passagers, etc. Les bonnes fonctionnalités de récompense ne sont pas faciles à développer.

Compte tenu de la fonction de récompense R (T), la tâche de l'algorithme d'apprentissage par renforcement est de contrôler l'hélicoptère de manière à atteindre max T R (T). Cependant, les algorithmes d'apprentissage par renforcement font de nombreuses approximations et peuvent ne pas réussir à atteindre cette maximisation.

Supposons que vous définissiez une fonction de récompense R (.) Et exécutiez votre algorithme d'apprentissage. Cependant, son efficacité est bien pire que celle d'un pilote humain - il tremble beaucoup lors de l'atterrissage et il semble moins sûr. Comment déterminer si l'erreur est liée à l'algorithme d'apprentissage par renforcement qui essaie de suivre le chemin max T R (T), ou l'erreur est-elle liée à la fonction de récompense qui essaie de mesurer et de déterminer la relation idéale entre la secousse acceptable pendant l'atterrissage et la précision du site d'atterrissage?

Nous appliquons le test de contrôle d'optimisation. Soit T humain le chemin suivi par le pilote, et T out le chemin choisi par l'algorithme. Suite à la description ci-dessus, nous convenons que la trajectoire de T humain est meilleure que T out , alors la question clé du test sera de savoir si R (T humain )> R (T out ) correspond à la réalité.

Option 1: si cette inégalité persiste, alors la fonction de récompense R (.) Estime correctement la trajectoire de T humain . Mais l'algorithme d'apprentissage par renforcement a choisi la trajectoire T out la moins bien notée. Cela signifie qu'il vaut la peine de travailler pour améliorer notre algorithme d'apprentissage par renforcement.

Option 2: cette inégalité n'est pas préservée, c'est-à-dire R (T humain ) ≤ R (T out ). Cela signifie que la fonction de récompense R (.) A attribué le pire résultat pour T humain , bien que ce soit de loin la meilleure trajectoire. Vous devriez travailler pour améliorer R (.) Pour trouver le meilleur rapport de facteurs qui correspondent à un bon ajustement.

De nombreuses applications d'apprentissage automatique ont ce «modèle» pour optimiser la fonction Score x (.), En utilisant l'algorithme de recherche approximatif. Parfois, nous n'avons pas exactement l'entrée donnée x, donc l'optimisation est réduite uniquement à la fonction d'évaluation Score (.). Dans l'exemple ci-dessus, la fonction de récompense était la fonction de récompense Score (T) = R (T), et l'algorithme d'optimisation était un algorithme d'apprentissage par renforcement essayant de calculer une bonne trajectoire T.

La seule différence entre cet exemple et les précédents est qu'au lieu de comparer avec le rendement «optimal», nous le comparons avec l'efficacité humaine pour T humain . Nous supposons que la trajectoire humaine T est raisonnablement bonne, même si elle n'est pas optimale. En général, tant que vous avez un certain y * (dans cet exemple, T humain ), qui est la meilleure sortie en termes d'efficacité pour votre algorithme d'apprentissage actuel (même s'il n'est pas «optimal»), le test de contrôle d'optimisation peut montrer s'il y aura plus promettant d'améliorer l'algorithme d'optimisation ou la fonction d'évaluation.


[ Suite ]

Source: https://habr.com/ru/post/fr485070/


All Articles