E-infectious Diseases

Deep Learning vs. COVID-19 – (1) quelques bases

écrit par Paul, relu par Diane et Erwan

Cet article sur le deep learning se compose de deux parties qui peuvent se lire indépendamment :

– la première présente les principes mathématiques qui sous-tendent le fonctionnement des réseaux de neurones [ici]

– la seconde présente des applications concrètes du deep learning pour la lutte contre la COVID-19 ainsi que les défis de cette technique [article frère].

Imaginez que vous triez les photos de votre téléphone. Il y a des photos de l’entreprise que vous vous préparez à envoyer à votre chef, que vous rangez dans le dossier ‘A envoyer’. Dans votre téléphone, il y a également des photos plus privées, que vous rangez dans le dossier ‘Privé’. Quand il y a une dizaine de photos, c’est facile. Mais lorsqu’il y a plusieurs milliers de photos, difficile d’y voir clair. Un champ particulier de l’intelligence artificielle, appelé apprentissage profond (deep learning en anglais) est une approche très prometteuse pour le traitement de très grands jeux de données (langage, images, …). Grâce à ses algorithmes sous-jacents, un ordinateur peut apprendre à effectuer une tâche répétitive , souvent chronophage et « pénible ».

Dans ce double article, nous verrons l’immense potentiel de l’apprentissage profond pour la lutte contre la COVID-19 : diagnostic automatisé à partir de radiographies ou de vidéos obtenues avec de simples smartphones, prédictions épidémiologiques ou encore analyse de tweets et lutte contre la désinformation. Mais commençons par découvrir les principes mathématiques qui sous-tendent ces outils puissants, ainsi que certains défis. Certains détails ont volontairement été cachés pour avoir différents niveaux de lectures, vous pouvez cliquer sur les champs ‘Pour aller plus loin’ pour en savoir plus.

Si vous ne souhaitez lire que la partie sur les applications et lire cette partie mathématique plus tard, vous pouvez cliquer ici.

Partie 2 : Applications

Partie 1 : Qu’est ce que le Deep Learning ?

A) Qu’est ce qu’un réseau de neurones artificiel ?

a. Qu’est ce qu’un neurone, élément de base du deep learning ?

C’est un simple opérateur mathématique, une petite « boîte » qui réalise un calcul. Il reçoit plusieurs valeurs en entrée et retourne une valeur en sortie y. Les valeurs en entrée du neurone sont données au neurone via des synapses, caractérisées par un poids.

Figure 1.1 - Le neurone  artificiel réalise une somme pondérée et applique une fonction d'activation

Figure 1.1 : Le neurone artificiel réalise une somme pondérée et applique une fonction d’activation

Par exemple, le neurone sur la figure ci dessus réalise alors :

1) Une somme pondérée de ses entrées

2) Puis il applique une fonction d’activation f. Dans notre exemple, le neurone retourne en sortie la valeur 0,5.

Les neurones artificiels sont inspirés des neurones biologiques. Tout comme eux, ils reçoivent des signaux de plusieurs autres neurones, pondèrent et émettent une unique réponse sous forme de potentiel d’action. 

Figure 1.2 : Comparaison entre neurone biologique et artificiel

b. Qu’est ce qu’un réseau de neurones ?

Un réseau de neurones multicouches est constitué de plusieurs couches de neurones reliées les unes aux autres.

– Une couche d’entrée reçoit les valeurs du problème. 

– Puis des couches cachées,

– Enfin, on trouve une couche de sortie comportant autant de valeurs que de possibilités de résultat. 

Les sorties d’une couche de neurone sont les entrées de la couche suivante. La complexité du réseau (nombre de neurones, …) dépend de l’application que l’on veut en faire.

Figure 1.3 : Réseau de neurones et calcul séquentiel de sa réponse

Le calcul de la réponse du réseau de neurone est séquentielle. Pour calculer la réponse d’un réseau de neurones, on calcule la réponse des neurones de la couche d’entrée (t1), puis la réponse des neurones des couches cachées (t2), puis la réposne des neurones de la couche de sortie (t3)

c. Entraîner un réseau de neurones

Que signifie “entraîner un réseau de neurones” ?

Les poids des synapses (flèches reliant les neurones) sont les seuls éléments du réseau de neurones que l’on peut modifier. Au départ, les poids des synapses sont initialisés avec des valeurs aléatoires. On présente au réseau un couple (entrée, sortie attendue). Le réseau fournit une réponse (fausse au départ). A partir de l’erreur sur la réponse fournie et celle attendue, on calcule les nouvelles valeurs des poids synaptiques. L’apprentissage s’arrête lorsqu’on estime que le réseau n’apprend plus (la mise à jour des poids devient très faible). Il faut savoir que le réseau n’apprenne pas de caractéristiques utiles et qu’il ne donne pas que des réponses correctes. L’entraînement d’un réseau de neurone n’est pas une tâche facile !

Figure 1.4 : Passe en avant (calcul de la réponse du neurone) et en arrière (mise à jour des poids à partir de l’erreur). (Forward, Backward)

De manière plus formelle, l’objectif de l’apprentissage est de trouver les paramètres w qui minimisent une fonction de perte L(w) qui évalue la correspondance (erreur) entre les données d’entrées et de sorties. Par exemple, on peut prendre le carré de la différence entre la prédiction et le résultat (Mean Squared Error). Pour cela on utilise l’algorithme de descente de gradient avec rétropropagation de l’erreur.

Descente de gradient

Figure 1.5 : Mise à jour des poids par descente de gradient avec rétropropagation de l’erreur

La descente de gradient est un algorithme d’optimisation consistant à corriger petit à petit les paramètres pour minimiser une fonction d’Erreur L(w). Supposons que vous soyez perdus en montagne et qu’un épais brouillard vous empêche de voir. Pour descendre dans une vallée, on peut marcher dans la direction de la plus grande pente jusqu’à ce qu’il n’y ait plus de pente (on est arrivé en bas de la vallée). La descente de gradient fait exactement la même chose : elle calcule les gradients de la fonction de perte pour chaque paramètre du modèle (comment la fonction de perte évolue lorsque l’on modifie tel ou tel paramètre, autrement dit quelle est la pente si je me tourne vers le nord, puis l’est, …). On parle de dérivée partielle. C’est l’algorithme de rétropropagation de l’erreur qui permet de calculer toutes les dérivées partielles de la fonction d’erreur pour tous les paramètres. On le représente par une flèche.

Pour aller plus loin : mise à jour des poids, hyperparamètres, mini-batch

d. Phase de généralisation

Les poids du réseau sont maintenant figés, on regarde comment se comporte le réseau pour des entrées quelconques : on lui présente maintenant des couples (donnée d’entrée;annotation) qu’il n’a jamais vus lors de l’apprentissage. On calcule sa sortie (inférence) et on la compare avec la sortie attendue.

Figure 1.6 : Inférence lors de la phase de généralisation

Regardons l’exemple dans la Figure 1.6. Nous avons un jeu de données qui est un ensemble de photos annotées représentant soit des virus soit des ballons. On utilise des photos pour l’entraînement, et d’autres pour l’inférence. Lors de l’entraînement, on calcule la sortie du réseau de neurone « Ballon », ce qui est faux si l’on compare avec l’annotation (« on attendait « Virus »). A partir de l’erreur, on met à jour les poids synaptiques pour minimiser l’erreur. Lors de l’inférence, on regarde la capacité du réseau de neurone à généraliser ce qu’il a appris. Les poids sont figés, on lui présente de nouvelles images et on regarde si sa sortie est en adéquation avec l’annotation. Si le réseau fait trop d’erreurs, alors il faut souvent revoir la complexité du modèle (nombre de neurones), les hyperparamètres, … et recommencer l’entraînement avec ce nouveau réseau.

e. Évaluation des performances d’un modèle de deep learning

– Les réseaux de neurones artificiels s’inspirent des réseaux de neurones biologiques

– Les neurones, unités de calcul, sont assemblés en réseau.

– Ce sont des outils puissants pour trouver une fonction qui associe une donnée d’entrée à une étiquette.

Bilan Partie I-A : Les réseaux de neurones artificiels

Nous allons maintenant voir brièvement le fonctionnement de deux variantes du réseau de neurones décrit ci-dessus, l’un pour les images, l’autre pour les séries temporelles.

B) Variante : Analyse d’images avec des réseaux de neurones convolutifs

a. Les images, ces gros tableaux

On peut citer deux exemples d’applications (parmi d’autres) :

  • classifier des photos : par exemple, nous avons des images de radiographie des poumons annotées ‘Patient infecté’ / ‘Patient non infecté’ . On souhaite créer un programme qui, étant donné une nouvelle radiographie de poumon, prédit si elle correspond à un patient infecté ou non.
  • comptage d’élément sur une photo. Certaines photographies contiennent plusieurs éléments d’intérêt. On peut imaginer par exemple une photo d’une foule, où l’on souhaiterait compter le nombre de piétons. Ici, on utilise des algorithmes de détection d’objet qui apprennent à détecter un piéton, puis délimitent un rectangle autour de ce dernier.

Les images peuvent être représentées par des tableaux [hauteur, largeur], où chaque case contient 3 valeurs (R,G,B). Une image haute-résolution représente plusieurs millions de valeurs, et rend l’apprentissage très difficile, étant donné le nombre immense de paramètres à trouver. Si l’on a une couche d’entrée de 10 000 neurones (une simple image en niveaux de gris de 100*100 pixels seulement) et une couche cachée contenant 1000 neurones, il faut trouver 10 000 x 1000 = 10 millions de paramètres !

Figure 1.8 : Représentation d’une image sous la forme d’un tableau. Pour une image d’entrée en niveau de gris (1 valeur par case) de 10×10 pixels, et une couche cachée de 16 neurones, il y aurait en théorie 1600 paramètres à trouver.

Les réseaux de neurones convolutifs (CNNs en anglais) sont adaptés à ce type de données en réduisant le nombre de paramètres nécessaires. Ils sont composés de couches de convolution, de couches de pooling, et se terminent souvent par un réseau entièrement connecté décrit précédemment (cf Partie 1-A).

b. Couches de convolution : détecter des caractéristiques (features)

Dans une couche de convolution, on applique plusieurs opérations de filtrage, appelées convolution, pour obtenir des cartes de caractéristiques (features map) et identifier des caractéristiques dans une image.

Figure 1.9 : A) Quels sont les motifs communs à ces deux images ? B) On repère des motifs communs (rouge, bleu, vert) dans ces deux images.

Dans une couche de convolution, chaque neurone n’est connecté qu’à un petit patch de pixels, appelé champ récepteur. Par exemple, imaginons une photographie d’arbre. Un neurone de la première couche du réseau ne reçoit pas tous les pixels de l’image d’entrée, il reçoit seulement quelques pixels (les pixels correspondant à une feuille par exemple). Un autre neurone de la première couche recevrait les pixels correspondant à un bout de tronc. Notons que tous les neurones d’une même couche possèdent les mêmes paramètres. Tous les neurones d’une même carte recherchent la même caractéristique dans une image, mais à un emplacement différent de l’image.

Figure 1.10 : A) Chaque neurone de la couche de convolution n’est connecté qu’à un patch de pixels. On obtient des cartes de caractéristiques. B) Comment obtenir une carte de caractéristiques ?

Pour finir, on applique une fonction d’activation.

Dans un premier temps, le réseau de neurones se concentre sur des caractéristiques de bas niveau : détecter des bords par exemple. Les neurones des couches de convolution supérieures apprennent à combiner les champs récepteurs des neurones des couches précédentes et à reconnaître des représentations d’ordre supérieur (des objets).

c. Couches de pooling : compression d’information.

Souvent, la position exacte d’une caractéristique importe peu. Par exemple, si l’on veut savoir si il y a un piéton ou non dans une image, le fait qu’il soit en haut à droite ou en bas à gauche importe peu. On sous-échantillonne alors l’image avec grâce aux couches de pooling, permettant ainsi de réduire le nombre de paramètres. Elles font la moyenne de l’activité de neurones adjacents, ou prennent la valeur maximale d’activité de neurones adjacents.

Figure 1.11 : Architecture simplifiée d’un CNN : couches de convolution et de pooling, d’après Angermuller et al. (2016)

d. Architectures célèbres, Apprentissage par transfert, Hyperparamètres (**)

– Avec les réseaux entièrement connectés de la Partie 1-A, le traitement de photos nécessiterait un nombre démesuré de paramètres

– Les réseaux de neurones à convolution, composés d’une succession de blocs de traitements, sont utilisés pour l’analyse d’images.

– Les neurones ne sont pas connectés avec l’image entière mais seulement avec un petit morceau de l’image

– Dans les couches de convolution, on recherche des caractéristiques (ex: bords)

– Dans les couches de pooling, on sous-échantillonne l’image.

Bilan Partie I-B : Les CNNS (Réseaux de Neurones à Convolution)

C) Variante : Analyse de séquences avec des réseaux de neurones récurrents (RNR)

Les réseaux de neurones récurrents (RNR en français, RNNs en anglais) traitent des séries temporelles, ou séquences. Ils peuvent prédire le futur, traiter du texte. Quel sera le nombre de cas COVID dans 10 jours étant donné les données épidémiologiques passées? 

a. L’architecture des RNR

Dans les réseaux décrits précédemment, le calcul de la réponse des neurones se faisait dans un seul sens : des couches d’entrée vers les couches de sortie sans jamais revenir en arrière. Ici, certaines connexions reviennent en arrière (voir Partie 1-A). L’entrée de notre réseau est par exemple un mot, qui est une séquence de lettres. A chaque étape temporelle, le neurone d’un RNR reçoit une entrée ainsi que sa propre sortie produite à l’étape temporelle t-1. Pour représenter ce neurone graphiquement, nous pouvons le déplier dans le temps (voir Figure 1.11). La sortie d’un neurone récurrent à l’étape t dépend donc de toutes les entrées précédentes. L’entraînement des RNR est réalisé par un algorithme appelé rétropropagation dans le temps.

Figure 1.12 : Architecture d’un RNR et encodage one-hot d’une séquence nucléique

b. Traitement de texte (NLP, Natural Language Processing)

Pour traiter du texte, on commence par réaliser une étape de Tokenisation, c’est-à-dire encoder chaque caractère sous la forme d’un entier. On peut par exemple utiliser la technique de l’encodage one-hot (one-hot encoding) : chaque lettre est encodée en un vecteur qui contient des zéros partout sauf à une position. Par exemple pour une molécule d’ADN, une séquence de nucléotides ATGC, A s’encode (1000), T donne (0100), G donne (0010) et C donne (0001).

c. Défis : mémoire et instabilité des gradients

– Les Réseaux de Neurones Récurrents (RNR) sont utilisés principalement pour le traitement de séries temporelles

– Pour analyser des textes, séquences ordonnées de mots, on réalise une conversion en valeurs numériques, appelée tokénisation

– Certaines variantes des RNR intègrent une mémoire à long terme, pour éviter l’effet « Dory »

Bilan Partie I-C : Les RNNs

D) Défis : l’entraînement est difficile et le réseau n’apprend pas toujours.

1) Apprentissage lent ou infructueux

Problème : L’entraînement n’est pas toujours facile… L’entraînement peut être extrêmement lent, prendre des semaines voire des mois, et ne pas être couronné de succès. 

‘Solutions’ : Il existe des algorithmes pour accélérer la convergence et il faut en général tester empiriquement différents hyper-paramètres (taux d’apprentissage, complexité du réseau). On entraîne souvent les modèles sur des puces informatiques spécifiques (les GPUs), qui permettent de diviser par 10 ou plus le temps d’apprentissage.

2) Surajustement

Problème : le surajustement (overfitting) : le réseau n’apprend rien d’utile.

Figure 1.13 : Le modèle final est un compromis entre sous-ajustement et généralisation.

‘Solutions’ : On peut diminuer la complexité du modèle ou augmenter son jeu de données. Il existe également des algorithmes pour éviter le surajustement comme le Dropout.

3) Coût énergétique

Problème : l’entraînement est également très coûteux en énergie, étant donné l’architecture (dite de Von Neumann) des ordinateurs classiques. Le processeur (calcul) est physiquement séparé de la mémoire. Pour entraîner un réseau de neurones, il faut faire un grand nombre de produits matriciels et plein d’aller retours entre la mémoire et le calcul, ce qui est extrêmement coûteux en énergie. Ce coût empêche l’edge computing, l’apprentissage du réseau ne peut pas se faire sur smartphone et on est obligé de le faire sur des serveurs en ligne, ce qui pose des questions concernant la confidentialité des données. Même l’inférence simple peut être impossible sur smartphone pour des modèles trop complexes.

Solutions’ : Un champ de recherche cherche à s’inspirer des neurones biologiques, qui font du calcul en mémoire, pour repenser l’architecture des ordinateurs actuels !

4) Petits jeux de données

Problème : Les performances de l’apprentissage profond augmentent avec la taille du jeu de données. Mais il est difficile d’obtenir de larges jeux de données pour des raisons de confidentialité, et l’annotation manuelle est très chronophage. Les jeux de données doivent nécessairement être équilibrés pour ne pas biaiser l’analyse (par exemple, pour une classification ‘Infecté’/’Non Infecté’, il faut qu’il y ait 50/50% de chaque catégorie.

‘Solutions’ : Pour des images, on peut par exemple augmenter artificiellement le jeu de données en incluant des rotations des images. Cela rend le réseau moins sensible à l’orientation. On pourrait également mentionner les algorithmes d’apprentissage semi-supervisé, l’apprentissage ‘méta’ ou le sur-échantillonage SMOTE.

Les problèmes liés à la confidentialité et à la collecte des jeux de données utilisés seront abordés dans la suite de cet article.

Conclusion Partie 1

Le deep learning est un outil puissant pour automatiser le traitement de jeux de données conséquents et chronophages pour l’homme. L’émergence du deep learning aujourd’hui résulte de nombreux facteurs, comme l’implication de géants du numériques, l’accessibilité en ligne de grands jeux de données annotés, la création d’interfaces plus faciles à prendre en main, la présence d’une grande communauté de développeurs ou encore le développement de structures informatiques pour accélérer considérablement les calculs (processeurs graphiques). Les applications pour la lutte contre la COVID-19 sont variées et prometteuses, et nous vous invitons à lire la suite de cet article ici.

Apprentissage automatique supervisé : Tout commence par un jeu de données d’entraînement (exemple : photos), que l’on annote souvent manuellement (exemple : photos de plage vs. photos de montagne). A partir d’un jeu de données d’entraînement (images et leur annotations/étiquettes respectives), on souhaite créer un modèle pour automatiser l’annotation d’images nouvelles. Pour créer ce modèle, on peut par exemple utiliser les algorithmes du deep learning, mais il faut garder à l’esprit que ce n’est pas l’unique solution.

Réseau de neurone artificiel : Il est composé de petites boîtes de calcul, les neurones, qui sont assemblés en réseau via des synapses. On distingue les neurones des couches d’entrées, des couches cachées et des couches de sortie. Au cours de l’apprentissage, le réseau modifie les paramètres, poids synaptiques, (connexions entre neurones) pour minimiser l’erreur entre sa prédiction et l’annotation attendue.

Apprentissage profond (deep learning) : une approche très prometteuse pour le traitement de très grands jeux de données (langage, images, …). C’est une technique d’apprentissage automatique qui utilise plusieurs niveaux de traitements (les couches cachées), d’où l’adverbe ‘profond’

Convolutionnal Neural Network :
Modèle mathématique du deep learning particulièrement adapté (mais pas que) pour le traitement d’images. Il utilise notamment des couches de convolution et des couches de pooling pour réduire le nombre de paramètres à trouver.

Recurrent Neural Network : Modèle mathématique du deep learning particulièrement adapté (mais pas que) pour le traitement de séquences temporelles, comme des textes ou la courbe du nombre de cas COVID journaliers. Il utilise des neurones récurrents, qui reçoivent en entrée leur propre sortie. Mentionnons une variante des RNNs, les LSTMs, qui ‘possèdent’ une mémoire.

ROC-AUC : Un score pour évaluer les performances d’un modèle de classification. On représente en abscisse le taux de vrais positifs (sélectivité) en fonction du taux de faux positif (spécificité)

Sources:

  • Ramasubramanian K., Singh A. (2019) Deep Learning Using Keras and TensorFlow. In: Machine Learning Using R. Apress, Berkeley, CA. https://doi.org/10.1007/978-1-4842-4215-5_11
  • https://d2l.ai/

Ajouter un commentaire

Un petit commentaire :) ?

A NE PAS RATER !

Notre FAQ sur les vaccins Moderna, Pfizer, …

 

Ne manquez pas notre magazine sur le VIH !

%d blogueurs aiment cette page :