Dans le précédent article sur l'apprentissage automatique nous avions introduit le principe de machine learning. Cette branche de l'intelligence artificielle relie les données d'entrée dont nous disposons aux sorties que nous ignorons et que l'on cherche à déterminer.
Le machine learning, et plus généralement l'intelligence artificielle, fait de plus en plus de bruit avec des résultats qui parfois dépassent l'entendement. Le développement de la voiture autonome, l'assistant vocal intelligent ou les récentes prouesses de DeepMind sur le repliement des protéines ou encore le jeu de go ne sont que quelques exemples parmi tant d'autres. Tous ces modèles ont le point commun d'avoir été entraînés sur une grande quantité de données.
L'objectif initial et commun aux projets de machine learning, est de récolter suffisamment de données pour permettre l'apprentissage du modèle. Comme nous le verrons, ces données doivent être correctement labellisées.
Pour entraîner un modèle, il faut être en mesure de l’orienter dans la bonne direction en l’encourageant lorsqu'il a raison et en le pénalisant quand il a tord. Paradoxalement, il faut donc disposer de l'information que l'on cherche à déterminer pour mettre en place un modèle dont le rôle est, justement, de trouver cette information.
Par exemple, entraîner un modèle détectant si une image correspond à un chien ou un chat nécessite, à la fois l'image de l'animal utilisée comme entrée du modèle mais également le résultat associé à cette image à savoir (chien ou chat).
Ce processus s'appelle "l'étiquetage" ou la "labellisation des données". Informatiquement, cela revient à associer le nombre 1 pour les images représentants des chiens et 0 pour celles représentants des chats, ou inversement.
La labellisation peut être fastidieuse (labellisation à la main, extraction automatique des données...) et n'est jamais infaillible. Chaque erreur de labellisation va orienter le modèle en construction dans une mauvaise direction. De ce fait la labellisation est primordiale puisqu'elle conditionne les performances du futur modèle. Garbage in, garbage out.
Souvent les labellisations sont entachées d'erreurs, dans notre exemple cela correspondrait à certains chiens classifiés comme étant des chats et réciproquement. Ces erreurs détériorent les performances du modèle. Toutefois on peut tout de même espérer obtenir un bon modèle à partir de ces données mal labellisées si les erreurs sont :
Dans ce cas-là, avec un modèle correctement choisi, on devrait pouvoir corriger les erreurs de labellisations. Ainsi on pourrait obtenir de meilleures labellisations nous permettant d'entraîner à nouveau notre modèle afin d'améliorer les performances.
En partant de ces idées, on a voulu essayer sur un cas simple si on pouvait obtenir une amélioration en entraînant un modèle à partir de ses propres prédictions.
Le cas simple en question que nous avons choisi est la base de données bien connue MNIST qui regroupe 70.000 images de chiffres de 0 à 9 écrits manuscritement en nuances de gris. Les images sont de taille 28x28. La figure 3 représente quelques exemples.
Ce problème est considéré comme un problème extrêmement simple en data science avec des performances avoisinants les 100%. Toutefois, l'objectif n'est pas d'obtenir le score le plus élevé qui soit mais simplement de démontrer l'intérêt de rentraîner un modèle sur ses propres sorties afin de corriger les erreurs de labellisation et obtenir in fine un meilleur modèle.
On met en place la démarche explicitée par le schéma de la figure 2. Les données étant à la base parfaitement labellisées, on vient corrompre à la main une partie des données. Pour cela on choisit aléatoirement un certain nombre d'images, et on modifie aléatoirement leur labellisation. Ainsi un "5" peut se retrouver labellisé "7".
A partir de ces données corrompues, on entraîne un premier modèle que l'on utilise pour labelliser à nouveau nos données d'entraînement et espérer corriger une partie des erreurs. En d'autres termes, si la plupart des images avec un "5" sont labellisées "5" on espère que le modèle ne sera pas trop perturbé par les quelques "5" labellisées autre chose que "5". Puis, lors de son utilisation, il saura reconnaître et corriger une partie des erreurs. À l'issue de ce premier entraînement on obtient un premier score. On peut alors entraîner à nouveau le modèle sur les nouvelles labellisations (celles obtenues à partir du modèle lui-même), on obtient ainsi un second score que l'on comparera au premier.
On a réalisé l'ensemble de ces étapes cent fois en faisant varier le pourcentage de corruption entre 0% et 99% par pas de 1%. Pour chaque taux de corruption, on a noté les scores à l'issu du premier et du deuxième entraînement. Ce qui nous permet d'obtenir les deux courbes suivantes.
Le second entraînement améliore systématiquement les performances, c'est bien ce que l'on cherchait à montrer. Autrement dit, les erreurs de labellisations aléatoires sur ce jeu de données ont pu être corrigées en choisissant les sorties issues du premier entraînement. En entraînant sur ces données partiellement corrigées, la précision du modèle augmente.
Comme on pouvait s'y attendre les performances diminuent à mesure qu'on augmente le nombre de mauvaises labellisations dans le jeu d'entraînement. On observe un décrochage tardivement, à partir de 80% de mauvaises labellisations. Etant donné que les images sont plus souvent mal labellisées que bien labellisées on peut s’étonner d'obtenir un modèle avec quasiment 90% de précision. Pourtant, le fait que le modèle soit toujours en mesure de reconnaître un "4" s'explique. Même si durant l'entraînement les "4" sont labellisés "4" que 20 fois sur 100, ils sont labellisés "5" ou "0" ou n'importe quel autre chiffre que 9 fois sur 100 car les erreurs sont aléatoires. En revanche lorsque la corruption atteint 90% le modèle n'est plus capable d'apprendre quoi que ce soit, les étiquetages sont totalement aléatoires.
Sur la figure 5 on a représenté le gain de précision du modèle grâce au réentrainement c'est-à-dire la différence entre les performances du modèle à l'issue du second entraînement et celles à l'issue du premier entraînement.
Finalement, en combinant les figures 4 et 5, on observe que lorsque l'on entraîne notre modèle avec des données dont les erreurs de labellisations s'élèvent à 82% on obtient une précision de 70%. Ce qui permet de réduire drastiquement le taux de corruption en passant de 82% à 30%. Ainsi en réentrainement à partir de ces données de meilleures qualité, on augmente significativement les performances (en l'occurrence de plus de 10% en passant de 70% à un peu plus de 80%).
Un modèle de machine learning permet d'extraire une information utile (chat / chien) à partir d'une donnée quelconque (une image).Avant de pouvoir utiliser le modèle, en lui donnant par exemple une image et en récupérant la sortie chat / chien, il est nécessaire de l'entraîner. Pour cela il faut disposer de la donnée dont on souhaite extraire un résultat mais également du résultat pour guider le modèle dans la bonne direction lors de l'entraînement. Associer le bon résultat à chaque donnée s'appelle la labellisation.
La labellisation peut se faire à la main, automatiquement ou même semi-automatiquement. Quoiqu'il en soit, cette étape est longue et fastidieuse et conditionne la qualité du futur modèle. De ce constat né la double exigence : comment obtenir rapidement des labellisations de bonnes qualité.
Dans cet article nous avons présenté une approche originale pour corriger les mauvaises labellisations présentes dans un jeu de données en réentraînant le modèle sur ses propres sorties. En faisant varier le taux d'erreur dans les labellisations nous avons pu améliorer jusqu'à 10% les performances de notre modèle.
Bien entendu, ces résultats sont à nuancer. Ils ont été obtenus sur un exemple simple et avec des hypothèses fortes où les erreurs de labellisation étaient aléatoires. Néanmoins il n'est pas inenvisageable d'adapter la méthode pour l'appliquer à un problème plus complexe et espérer en tirer profit.
Pour aller plus loin, on aurait pu s'intéresser à des problèmes où les labellisations ne sont pas aléatoires. On aurait pu également rentraîner une seconde fois, voire davantage, le modèle sur les nouvelles sorties obtenues, auquel cas on aurait pu espérer améliorer davantage les performances.