La vision sur le bout des doigts

LE GUIDE DE REFERENCE

POUR LA VISION INDUSTRIELLE >

Nouvelle édition 2019/2020 – Commandez votre exemplaire !

Plus

DÉFAUTS DE CARROSSERIE >

De l'esthétique à la performance,

nous vous aidons à garantir la qualité.

Plus

CONTRÔLEURS PRÊTS POUR

L’INDUSTRIE 4.0 >

Système d'éclairage intelligent | 3ème partie

Plus

Apprentissage automatique et deep learning

Ce document cherche à donner des clés pour mieux comprendre la notion d'apprentissage profond (de l'anglais « deep learning »), en s'attardant sur ses différentes définitions, interprétations et implications. Sujet d’actualité, il est également en évolution constante ; aussi, nous souhaitons jeter ici les bases d’une meilleure compréhension.

Cet article privilégie les diagrammes aux formules mathématiques afin de garantir une meilleure lisibilité.

Qu'est-ce que l'apprentissage profond ?

La notion d’apprentissage profond est tout d’abord une traduction directe du terme anglais « deep learning », que certain préfère traduire par la notion d’apprentissage statistique. De même que sa traduction, sa définition varie également, mais principalement au niveau des détails. Pour définir cette notion dans les grandes lignes, on pourrait dire que :

L’apprentissage profond est un algorithme d'abstraction de haut niveau qui permet de modéliser les données à partir de grands ensembles de données apprises.

Précisons quelques termes :

  • L'abstraction suppose que les données initiales diffèrent largement des donnés de sorties, avec pour résultat possible la classification d’images, la prédiction d’un comportement ou une traduction. L'abstraction signifie qu'il n'y a pas de relation simple entre l'entrée et la sortie. Dans notre cas, il s'agit selon toute vraisemblance d'une relation inconnue, une sorte de « boîte noire ».

  • La modélisation signifie que nous tentons de créer un certain scenario réaliste de sorte qu'une classification ou un résultat réaliste en découle.

  • La notion relative aux grands ensembles de données apprises que les données d’entrée sont extrêmement diverses. L'apprentissage profond ou l'apprentissage automatique implique généralement que les propriétés importantes de ces données sont détectées lors du processus d'apprentissage.

Pourquoi profond ?

De nombreux termes de ce document proviennent des sciences neurologiques, notamment de la notion de réseau de neurones. Un réseau neuronal est une sorte de logiciel cérébral ou de machine virtuelle composée de milliers d’unités (les neurones) qui effectuent des calculs. Plus précisément, des unités logiques et de prises de décisions (neurones, perceptrons) relient les données d’entrées et de sorties entre elles par l’intermédiaire d’un réseau complexe (réseau, cerveau) capable de prendre des décisions complexes.

A l'origine, ces systèmes portaient le nom de réseaux artificiels de neurones (ANN, Artificial Neural Networks) afin de les différencier des systèmes biologiques. Ils se composent en général d’un certain nombre de données d'entrées et de sorties (input / output layer), d’un réseau étroit de neurones et de plusieurs strates intermédiaires (hidden layers). Ces couches intermédiaires permettent de traiter des problèmes complexes ; sans elles, le système ne résout que des calculs simples. Le nombre de couches est donc un facteur décisif pour la complexité du système, et de l’apprentissage ; les données s’associent d’une couche à l’autre, les résultats d’une première couche servant d’entrée à la prochaine, et ainsi de suite afin d’aboutir à une prise de décision complexe. Ce fonctionnement en strates donne toute sa profondeur au réseau et à l’apprentissage. L’adjectif « profond » s’entend ici dans tous les sens du terme.

L'exemple ci-dessus présente trois unités d’entrées, une sortie et deux couches intermédiaires (couches cachées). Vous constatez que les neurones sont « fortement interconnectés », ce qui constitue une propriété essentielle des réseaux de neurones. C'est justement ce qui autorise les relations, fonctions ou décisions d’être complexes ; sans cette propriété, les relations entrée-sortie seraient relativement simples.

L'objectif n'est pas de créer un modèle exact du cerveau, mais bien de reproduire sa capacité d'apprentissage et de reconnaissance de connexions complexes. Un être humain peut avoir jusqu’à 100 milliards de neurones qui fonctionnent à une fréquence d’environ 1 kHz ; un processeur moderne fonctionne avec 2 milliards de transistors à 3 GHz.

Notez qu'un certain nombre de conditions préalables doivent être réunies avant qu'un réseau neuronal n'accède à la solution souhaitée, cela ne se résume pas simplement à « apprends et tu trouveras éventuellement la solution correcte ». Parmi les exemples de la page donnée en lien ci-dessus, le plus difficile est la classification en spirale pour laquelle les conditions préalables sont extrêmement importantes.

2. Un neurone artificiel, qu’est-ce que c‘est ?

L'idée de neurone artificiel n’a pas encore été vraiment spécifiée. Au sein d'un processeur, l’unité logique se compose de transistors ; on pourrait également y trouver un réseau neuronal « câblé », mais il faudrait qu’il soit « adaptatif », qu’il ait une « capacité d'apprentissage ». En effet, la réponse d'un neurone à des impulsions entrantes doit pouvoir évoluer tout au long du processus d'apprentissage. C'est ce qu'on appelle la « pondération » : un neurone évalue (pondère) diverses variables d'entrée pour obtenir la variable de sortie souhaitée. C'est pourquoi les neurones sont généralement des fonctions mathématiques qui relient entre elles des variables d'entrée et de sortie.

Dans la phase d'apprentissage, les neurones modifient leur comportement de pondération et affinent les résultats de sortie en fonction des variables d'entrée. Il doit donc y avoir un retour d'information du résultat global qui influence chaque neurone. On peut donc dire que les variables d'entrée et de sortie d'un réseau neuronal sont connues, mais que les valeurs des neurones, surtout dans les couches cachées restent inconnues. On a affaire à une « boîte noire ».

Pris isolément, un réseau neuronal qui n’a pas été entraîné ne « connaît » rien et fournit des résultats aléatoires, voire chaotiques pour l’utilisateur. Seul un système entraîné fournira le résultat souhaité. Si le problème posé est simple, un programme simple, plus facile à déboguer, pourra le résoudre. Pour un problème plus complexe, on aura recours à un réseau de neurones, que l’on entraînera à l’aide de grands ensembles de données. Chaque neurone peut fournir des variables de sortie complexes et réagir linéairement ou non linéairement aux variables d'entrée. C'est là un point assez subtil, car les neurones doivent être en mesure de réagir à l’ensemble des possibilités afin de fournir un résultat adéquat. Ceci implique deux choses : soit le programmateur du réseau neuronal connaît toutes les connexions possibles internes au réseau, soit il conçoit le réseau de manière si complexe qu'il couvre « toutes » les possibilités.

Grands ensembles de données

Les réseaux de neurones sont normalement utilisés pour faire face à des problèmes qui présentent une certaine variabilité, à l'instar d'un être humain qui réagit à une image réelle. L'être humain a appris à identifier certaines parties d'une image à partir de son « expérience », c'est-à-dire de son exposition à un grand nombre de données similaires, avec un retour d'info quant au bien-fondé de la décision finale (le résultat). Il en va de même pour les réseaux de neurones artificiels.

Google, par exemple, a accès à un énorme stock de données (images, traductions etc) ainsi qu’à une immense puissance de calcul. Fin 2016, Google annonçait avoir testé les techniques de l'apprentissage automatique pour son moteur de traduction. Il a alors constaté que les réseaux de neurones entraînés avec des quantités relativement faibles de données fournissaient des résultats de traduction similaires à ceux de traductions basées sur une recherche lexicale (dictionnaires) et de règles syntaxiques. Grâce à d'autres tests et à un apprentissage non supervisé, les erreurs de traduction ont été réduites de 55 à 85 %. Google a également mis son kit de développement logiciel (SDK) interne « TensorFlow » à la disposition du public sous forme de logiciel libre.

Selon le groupe d'intelligence artificielle (IA) de Facebook, environ 1000 objets d'une catégorie sont nécessaires pour arriver à identifier une marque de voiture, une espèce végétale ou une race de chien.

Quelques raccourcis sont possibles, par exemple en générant des données synthétiques à partir de données d'entraînement réelles (on modifie la mise à l'échelle d’une image par exemple ou on la fait pivoter), ou en définissant à l’avance un postulat de départ, comme le nombre de caractéristiques auxquelles les neurones devraient prêter attention ou le nombre de couches cachées du réseau.

Au-delà des réseaux de neurones

Les réseaux de neurones ne sont pas les seuls algorithmes d'apprentissage automatique, mais ils sont les plus répandus. Ce chapitre décrit d’autres méthodes existantes et s’appuie pour cela en partie sur ce guide pratique. Cette playlist YouTube établie par des développeurs de Google sera aussi utile : elle constitue une introduction à l'apprentissage automatique et donne aperçu des freeware disponibles.

Apprentissage supervisé

L'apprentissage supervisé utilise des images étiquetées, à partir desquelles l'algorithme doit générer une fonction qui délivre le résultat désiré. Cependant, cette méthode ne permet de dire quelles variables d'entrée doivent être utilisées pour programmer l'algorithme ! Ainsi, avant l'"apprentissage" proprement dit, une approche itérative de l'apprentissage est nécessaire afin de se faire une idée de la « pertinence » des résultats.

Régression

Dans sa forme la plus simple, il s'agit d'une ligne droite qui traverse un ensemble de points de données (régression linéaire). Il montre la relation supposée linéaire entre deux variables, de sorte qu’à partir d’une variable, il est possible de déduire la suivante. Cette méthode permet également de calculer des valeurs d'erreur qui permettent de spécifier un intervalle de confiance pour les résultats. Il est ainsi aisément possible de passer d'une régression linéaire à une régression linéaire multiple ou polynomiale. Avec ces méthodes, les ajustements sont habituellement effectués en utilisant l'approximation des moindres carrés afin de minimiser la distance de la courbe par rapport aux points de données.

Une autre technique d'ajustement souvent utilisée est la régression logistique. Elle ajuste les données à une courbe sigmoïde (en forme de S) et émet une probabilité (0 à 1). En tant que probabilité, il s'agit d'un problème à deux classes (appartenant à la classe x ou non). Fondamentalement, il s'agit d'une relation statistique de la compacité d'une classe dans l'espace caractéristique et de sa proximité avec d'autres classes.

Régularisation de Tikhonov / régression d'arête

Contrairement aux méthodes de régression mentionnées ci-dessus, cette méthode convient aux cas de figure où l’on ne dispose d’aucunes informations parfaites – ce que l'on appelle un « problème mal posé ». Par rapport aux réseaux de neurones, on dispose ici d’un petit nombre seulement de données d’entraînement du système. A partir de ces données, on n’obtient aucune droite ou courbe « satisfaisante » qui classe les données de manière adéquate. L'application de l'une des méthodes ci-dessus conduirait à un sur-apprentissage ou un sous-apprentissage (c’est-à-dire à une mauvaise classification). Une généralisation est par conséquent nécessaire.

Cette régularisation est connue sous le nom de matrice de Tikhonov (le contenu dépend du résultat désiré). Pour trouver la matrice de Tikhonov (pour l'apprentissage ou la programmation de l'algorithme), il est nécessaire de faire quelques hypothèses au sujet des données d'entrée. On peut supposer par exemple que les données font partie d'une distribution statistique « normale » (gaussienne) et qu’elles contiennent suffisamment d'écarts pour pouvoir déterminer approximativement l'écart moyen et l'écart-type, ou encore que toutes les variables ont le même écart-type.

L’outil CVB Polimago utilise ce type d'algorithme : il est utilisé comme un outil de recherche d'objets variables, ou comme un classificateur en cas d'écarts dans les classes d’objets – dans les deux cas, les classes ne sont pas complètement définies et il faut donc généraliser. Les cas marginaux sont utiles pour l’apprentissage dans l'algorithme afin de séparer les classes les unes des autres.

Arbre de décision

Un arbre de décision ressemble à un petit réseau neuronal à cette différence près que les nœuds de décision sont généralement connus. L'outil CVB Minos en est un exemple, chaque nœud de décision représentant une décision binaire. Ceci débouche sur un classificateur très rapide puisqu'il est possible d'exclure 50% des résultats possibles à chaque décision (pour autant que le classificateur soit un arbre équilibré). CVB Minos permet ainsi d’être très rapide dans les tâches de reconnaissance optique de caractères (OCR) et de recherche basée sur les caractéristiques apprises.

Machine à vecteurs de support

Dans un cas simple, il s'agit d'un tracé de caractéristiques (variables) dont les coordonnées sont appelées « vecteurs de support ». Dans le cas d’un problème à deux classes, le SVM sépare les deux groupes de points en définissant une ligne séparatrice à marge maximale, c’est-à-dire avec une distance maximale entre la ligne et les points les plus proches. La configuration du SVM définit le type de ligne - linéaire, polynôme, logarithmique. CVB Manto est un exemple de SVM.

Les graphiques suivants montrent que les groupes de points peuvent être séparés les uns des autres avec des lignes de différents types. En fixant des limites aux résultats autorisés (surface de décision lisse par exemple), les caractéristiques de la solution peuvent changer (généralisation du résultat ou très grande précision).

Classificateur bayésien naïf

Le terme « bayésien » se rapporte à la probabilité. Dans ce cas, l'hypothèse est qu'une classe possède un certain nombre de propriétés sans relation (par ex. couleur, forme, taille) et qu'il est probable qu'une valeur soit reliée à un ensemble idéal de valeurs pour une classe donnée. En combinant les probabilités, vous obtenez une probabilité selon laquelle une mesure donnée de couleur, forme et taille est reliée à une certaine classe. Dans un exemple simple, un objet sphérique blanc d'environ 250 mm de rayon pourrait correspondre à la classe « ballon de foot ». En changeant un de ces mots-clés, il est moins probable que l'objet soit un ballon de foot.

Ensemble K des plus proches voisins

Il s'agit d'un système de vote qui utilise les plus proches voisins au sein d'un espace de caractéristiques (ensemble « K » des plus proches voisins) afin de déterminer la classe à laquelle une propriété test appartient. La définition du nombre K est une partie extrêmement difficile du concept.

Apprentissage non supervisé

Il n'y a pas ici de données préalablement connues ou étiquetées. C'est la signification usuelle de l'« apprentissage profond », l'algorithme est en quelque sorte autodidacte. Les outils tentent d'une certaine manière de trouver les classifications au sein des données sans aucune connaissance préalable.

K-Moyennes

Par rapport aux K plus proches voisins, cette méthode crée « automatiquement » K clusters de données : les clusters sont assez homogènes alors qu'ils affichent entre eux de grandes différences. Il peut s'agir d'un simple problème itératif de centroïde. Il est toutefois entièrement dépendant des propriétés mesurées – les clusters en résultant peuvent n'avoir aucune relation avec la perception humaine.

Forêt aléatoire

Il s'agit d'une extension du système à arbre de décision, elle comporte seulement plusieurs arbres (et forme ainsi une « forêt »). Ici, le nombre d'arbres qui votent pour un résultat donne une probabilité statistique qu'une une variable d'entrée est liée à une variable de sortie. Dans les forêts plus complexes, les algorithmes internes peuvent être n'importe lesquels de ceux qui sont mentionnés ailleurs ! Il s'agit donc d'une méthode de vote basée sur l'hypothèse que « la plupart des méthodes sont correctes la plupart du temps ». Contrairement aux arbres de décision, les forêts aléatoires sont moins susceptibles de s'adapter de façon excessive aux données de formation.

Résumé

L'apprentissage supervisé implique une connaissance préalable au sein de l'ensemble de formation, le problème réside dans la création de la fonction permettant de relier les entrées aux sorties souhaitées. La sélection et la combinaison des propriétés jouent sur le succès de la procédure, celles-ci étant donc essentielles.

L'apprentissage non supervisé signifie qu'il n'y a aucune connaissance préalable, toutes les connaissances découlent de l'ensemble de formation. Ceci peut impliquer le regroupement de points de données dans un espace de caractéristiques, mais ne peut se produire que si les propriétés choisies et les fonctions potentielles sont correctement sélectionnées. Cela suggère que l'apprentissage non supervisé fonctionne dans deux cas :

  1. une réponse sensée est déjà prévue (ce qui implique une connaissance préalable et en fait un apprentissage en quelque sorte supervisé), ou bien
  2. le jeu de données et les possibilités sont si larges que statistiquement parlant, il y aura forcément une solution. Il faudra peut-être beaucoup d'apprentissage pour y parvenir, avec beaucoup d'« impasses ». Dans le domaine de la vision industrielle, il serait judicieux qu'un outil d'apprentissage non supervisé regroupe en une classe tous les pixels en-deçà du niveau de gris 10, cela si la caméra présente un bruit à ce niveau. Il s'agit ici d'un regroupement purement logique.

Dans tous les cas, le problème majeur réside dans la conception de solutions possibles (affectations) et la définition de la complexité (nombre de couches cachées) afin que les caractéristiques puissent être filtrées et regroupées. L'algorithme seul n'est pas la solution.

 
Avec quatre paramètres, je vous ajuste un éléphant. Avec un cinquième, je peux même lui faire agiter la trompe.
Attribué à John von Neumann