Elles alimentent presque toutes les applications modernes de réseaux de neurones. Toutefois, il existe des variations intéressantes et puissantes sur le même thème, qui ont conduit à de grandes avancées en matière d’apprentissage profond, dans de nombreux domaines.
L’un des domaines où l’apprentissage profond a connu un succès spectaculaire est celui du traitement de l’image. Le simple classifieur que nous avons étudié en détail dans la section précédente est très limité — comme vous l’avez remarqué, il n’était même pas en mesure de classer tous les smileys correctement. L’ajout de couches supplémentaires dans le réseau et l’utilisation de la rétropropagation pour apprendre les pondérations sont en principe de nature à résoudre le problème, mais un autre apparaît : le nombre de pondérations devient extrêmement important et, par conséquent, la quantité de données d’entraînement nécessaires pour obtenir une précision satisfaisante peut devenir trop élevée pour être réaliste.
Heureusement, il existe une solution très élégante au problème des pondérations trop nombreuses : un type particulier de réseau de neurone, ou plutôt, un type particulier de couche, qui peut être intégrée dans un réseau de neurone profond. Ce type particulier de couche est qualifié de couche de convolution. Les réseaux comportant des couches de convolution sont appelés réseaux de neurones convolutifs (CNN). Leur propriété clé est qu’ils peuvent détecter des éléments d’image tels que des points clairs ou foncés (ou de couleur spécifique), des angles selon différentes orientations, des schémas, etc. Cela sert de base à la détection de caractéristiques plus abstraites, telles que les oreilles d’un chat, le museau d’un chien, l’œil d’une personne ou la forme octogonale d’un panneau stop. Il serait normalement difficile d’entraîner un réseau de neurone à détecter ces éléments sur la base des pixels de l’image d’entrée, parce que ces caractéristiques peuvent apparaître dans des positions différentes, des orientations différentes et des dimensions différentes dans l’image : déplacer l’objet ou l’angle de la caméra modifierait radicalement les valeurs des pixels, même si l’objet lui-même ne nous paraît pas avoir changé du tout. Pour apprendre à détecter un panneau stop dans ces différentes conditions, il faudrait disposer d’une très grande quantité de données d’entraînement, parce que le réseau ne pourrait détecter le panneau que dans les conditions dans lesquelles il serait apparu dans les données d’entraînement. Ainsi, par exemple, un panneau stop dans le coin supérieur droit de l’image ne serait détecté que si les données d’entraînement comprenaient une image affichant un panneau stop dans le coin supérieur droit. Les CNN peuvent reconnaître l’objet n’importe où dans l’image, quel que soit l’endroit où il a été observé dans les images d’entraînement.
Note
Les CNN utilisent une solution astucieuse pour réduire la quantité de données d’entraînement nécessaires à la détection d’objets dans différentes conditions. L’astuce revient essentiellement à utiliser les mêmes pondérations d’entrée pour de nombreux neurones — de sorte que tous ces neurones sont activés selon le même schéma — mais avec des pixels d’entrée différents. On peut, par exemple, disposer d’un jeu de neurones qui sont activés par l’oreille pointue du chat. Lorsque l’entrée est une photo de chat, deux neurones sont activés, un pour l’oreille gauche et l’autre pour la droite. On peut aussi prendre les pixels d’entrée du neurone sur une superficie plus petite ou plus grande, de façon à ce que différents neurones soient activés par l’oreille apparaissant à différentes échelles (tailles), de sorte qu’on puisse détecter une petite oreille de chat, même si les données d’entraînement ne contenaient que des images de grands félins.
Les neurones convolutifs sont généralement placés dans les couches inférieures du réseau, qui traitent les pixels d’entrée bruts. Les neurones de base (comme le neurone perceptron évoqué plus tôt) sont placés dans les couches supérieures, qui transforment les sorties des couches inférieures. Les couches inférieures peuvent généralement être entraînées à l’aide d’un apprentissage non supervisé, sans tâche de prédiction particulière à l’esprit. Leur pondération sera ajustée de façon à détecter les caractéristiques qui apparaissent fréquemment dans les données d’entrée. Ainsi, avec des photos d’animaux, les caractéristiques typiques seront les oreilles et le museau, alors que dans les images des bâtiments, les caractéristiques sont les éléments architecturaux tels que murs, toits, fenêtres, etc. Si un mélange d’objets et de scènes est utilisé comme données d’entrée, les caractéristiques apprises par les couches inférieures seront plus ou moins génériques. En d’autres termes, les couches de convolution préentraînées peuvent être réutilisées dans de nombreuses autres tâches de traitement d’image. Ceci est extrêmement important, étant donné qu’il est facile d’obtenir des quantités virtuellement illimitées de données d’entraînement non étiquetées — des images sans étiquettes — qui peuvent être utilisées pour entraîner les couches inférieures. Les couches supérieures sont toujours entraînées par des techniques d’apprentissage automatique supervisé telles que la rétropropagation.
Une fois le réseau de neurone créé à partir de données, il peut être utilisé pour la prédiction. Étant donné que les couches supérieures du réseau ont été entraînées de manière supervisée afin d’exécuter une tâche de classification ou de prédiction particulière, elles ne sont réellement utiles que pour cette tâche. Un réseau entraîné pour détecter les panneaux «stop» ne sert à rien pour détecter les chiffres manuscrits ou les chats.
On obtient un résultat fascinant lorsqu’on prend les couches inférieures préentraînées et qu’on étudie à quoi ressemblent les caractéristiques qu’elles ont apprises. Pour y parvenir, on génère des images qui activent un certain jeu de neurones dans les couches inférieures. En observant les images produites, on peut voir à quoi le réseau de neurone «pense» qu’une caractéristique particulière ressemble, ou à quoi ressemblerait une image possédant un certain nombre de caractéristiques sélectionnées. Certains disent même que les réseaux «rêvent» ou «hallucinent» des images (voir le système DeepDream de Google).
Note
Nous aimerions souligner une fois de plus le problème des métaphores telles que «le rêve» pour désigner une simple optimisation de l’image d’entrée : souvenez-vous des mots-valises évoqués au chapitre 1. Le réseau de neurone ne rêve pas réellement, et il ne possède pas le concept de chat qu’il comprendrait comme pourrait le faire un être humain. Il est simplement entraîné à reconnaître des objets et peut générer des images similaires aux données d’entrée dont on l’a alimenté.
Afin de produire réellement des chats, des visages humains ou d’autres objets d’aspect réel (selon ce que vous aurez utilisé comme données d’entraînement), Ian Goodfellow, qui travaille actuellement pour Google Brain, a proposé une astucieuse combinaison de deux réseaux de neurones. L’idée est de permettre aux deux réseaux de se faire concurrence. L’un des réseaux est entraîné pour générer des images telles que celles contenues dans les données d’entraînement. La tâche de l’autre réseau consiste à séparer les images générées par le premier réseau des images réelles issues des données d’entraînement : on l’appelle réseau antagoniste, et l’ensemble du système est appelé réseau antagoniste génératif ou GAN.
Le système entraîne les deux modèles côte à côte. Au début de l’entraînement, le modèle antagoniste a pour tâche simple de distinguer les images réelles des données d’entraînement et les tentatives maladroites du modèle génératif. Toutefois, alors que le réseau génératif s’améliore petit à petit, le modèle antagoniste doit lui aussi s’améliorer et le cycle se poursuit jusqu’à ce que les images produites soient presque impossibles à distinguer des images réelles. Le GAN tente de reproduire les images des données d’entraînement : mais ce serait une stratégie trop simple pour battre le réseau antagoniste. Le système est donc entraîné de façon à être en mesure de générer également des images nouvelles et réalistes.
Les images ci-dessus ont été générées par un GAN développé par NVIDIA dans un projet dirigé par le professeur Jaakko Lehtinen (pour plus de détails, consulter cet article).
Auriez-vous vu qu’elles étaient fausses ?