ArticleDonnées & IA
Qu'est-ce que le deep learning ? Des algorithmes qui imitent le cerveau humain
Le deep learning est un sous-ensemble du machine learning (ML), où les réseaux neuronaux artificiels - des algorithmes conçus pour fonctionner comme le cerveau humain - apprennent à partir de grandes quantités de données

L'apprentissage profond ou deep learning est une forme d'apprentissage automatique qui modélise les motifs dans les données sous forme de réseaux neuronaux artificiels - des algorithmes conçus pour fonctionner comme le cerveau humain - à plusieurs couches. Parce que l'apprentissage profond est le moyen le plus général de modéliser un problème, il a le potentiel de résoudre les plus difficiles - tels que la vision par ordinateur et le traitement du langage naturel - qui dépassent à la fois la programmation conventionnelle et les autres techniques d'apprentissage automatique.
L'apprentissage profond peut non seulement produire des résultats utiles là où d'autres méthodes échouent, mais il peut également construire des modèles plus précis et réduire le temps nécessaire à la construction d'un modèle utile. Cependant, l'entraînement des modèles de deep learning nécessite une grande puissance de calcul. Un autre inconvénient de l'apprentissage profond est la difficulté d'interpréter les modèles. La caractéristique définissant l'apprentissage profond est que le modèle entraîné possède plus d'une couche cachée entre l'entrée et la sortie. Dans la plupart des discussions, l'apprentissage profond signifie utiliser des réseaux neuronaux. Il existe cependant quelques algorithmes qui implémentent l'apprentissage profond en utilisant d'autres types de couches cachées que les réseaux neuronaux artificiels.
Apprentissage profond vs apprentissage automatique
L'apprentissage profond est une forme d'apprentissage automatique. Nous nous référerons à l'apprentissage automatique non profond comme apprentissage automatique classique, pour nous conformer à l'usage courant. En général, les algorithmes d'apprentissage automatique classique fonctionnent beaucoup plus rapidement que les algorithmes d'apprentissage profond ; un ou plusieurs CPU suffiront souvent pour entraîner un modèle classique. Les modèles d'apprentissage profond ont souvent besoin d'accélérateurs tels que les GPU, les TPU ou les FPGA pour l'entraînement, ainsi que pour le déploiement à grande échelle. Sans eux, les modèles prendraient des mois à s'entraîner.
Pour de nombreux problèmes, un algorithme d'apprentissage automatique classique produira un modèle "suffisamment bon". Pour d'autres problèmes, les algorithmes d'apprentissage automatique classique n'ont pas très bien fonctionné dans le passé.
Applications de l'apprentissage profond
Il existe de nombreux problèmes qui nécessitent actuellement le deep learning pour produire les meilleurs modèles. Le traitement du langage naturel (NLP) en est un bon exemple. À l'automne 2016, la qualité des traductions de Google Translate pour les paires de langues anglais-français, anglais-chinois et anglais-japonais s'est soudainement améliorée de manière spectaculaire, passant de la création de salades de mots à la production de phrases proches de la qualité d'une traduction professionnelle par un humain. Ce qui s'est passé en coulisses, c'est que les équipes Google Brain et Translate ont remplacé les anciens algorithmes de traduction automatique statistique basés sur des phrases (un type d'apprentissage automatique classique) par un réseau neuronal profond (DNN) entraîné avec des embeddings (vectorisation des données) de mots utilisant le framework TensorFlow de Google. Ce n'était pas un projet facile. Il a fallu des mois de travail à de nombreux chercheurs de niveau doctorat sur les modèles, et des milliers de semaines de GPU pour entraîner les modèles. Cela a également poussé Google à créer un nouveau type de puce, une unité de traitement de tenseurs (TPU), pour exécuter des réseaux neuronaux à grande échelle pour Google Translate.
En plus du problème de la traduction linguistique abordé par Google Translate, les principales tâches de NLP (Natural Language Processing) incluent le résumé automatique, la résolution des coréférences, l'analyse du discours, la segmentation morphologique, la reconnaissance des entités nommées, la génération de langage naturel, la compréhension du langage naturel, le marquage des parties du discours, l'analyse des sentiments, et la reconnaissance vocale.
Classer rapidement des images
Un autre bon exemple de l'application de l'apprentissage profond est la classification d'images. Étant donné que les organismes vivants traitent les images avec leur cortex visuel, de nombreux chercheurs ont pris l'architecture du cortex visuel des mammifères comme modèle pour les réseaux neuronaux conçus pour effectuer la reconnaissance d'images. La recherche biologique remonte quant à elle aux années 1950. La percée dans le domaine des réseaux neuronaux pour la vision a été le LeNet-5 de Yann LeCun en 1998, un réseau neuronal convolutif (CNN) à sept niveaux pour la reconnaissance de chiffres manuscrits numérisés en images de 32x32 pixels. Pour analyser des images à plus haute résolution, le réseau LeNet-5 devrait être étendu à plus de neurones et plus de couches. Les meilleurs modèles de classification d'images profondes d'aujourd'hui peuvent identifier des catalogues divers d'objets en résolution HD en couleur. En plus des réseaux neuronaux profonds (DNN) purs, les gens utilisent parfois des modèles de vision hybrides, qui combinent l'apprentissage profond avec des algorithmes d'apprentissage automatique classiques qui exécutent des sous-tâches spécifiques.
D'autres problèmes de vision, en dehors de la classification d'images de base, qui ont été résolus avec l'apprentissage profond incluent la classification d'images avec localisation, la détection d'objets, la segmentation d'objets, le transfert de style d'image, la colorisation d'images, la reconstruction d'images, la super-résolution d'images et la synthèse d'images. La classification d'images peut être étendue à la classification de vidéos en extrayant les images individuelles d'une vidéo et en classant chaque image. Les objets détectés dans les clips vidéo peuvent être suivis d'une image à l'autre.
Selon Goodfellow, Bengio et Courville, écrivant en 2016, l'apprentissage profond a été utilisé avec succès pour prédire comment les molécules interagiront afin d'aider les entreprises pharmaceutiques à concevoir de nouveaux médicaments, pour rechercher des particules subatomiques, et pour analyser automatiquement des images de microscope utilisées pour construire une carte 3D du cerveau humain.
Réseaux neuronaux d'apprentissage profond
Les idées pour les réseaux neuronaux "artificiels" remontent aux années 1940. Le concept essentiel est qu'un réseau de neurones artificiels construit à partir d'interrupteurs seuils interconnectés peut apprendre à reconnaître des motifs de la même manière que le cerveau et le système nerveux d'un animal (y compris la rétine) le font.
Rétropropagation
L'apprentissage dans les réseaux neuronaux profonds se fait en renforçant la connexion entre deux neurones lorsqu'ils sont tous deux actifs en même temps pendant l'entraînement. Dans les logiciels de réseaux neuronaux modernes, cela consiste généralement à augmenter les valeurs de poids des connexions entre les neurones en utilisant une règle appelée rétropropagation de l'erreur, rétropropagation ou BP. La rétropropagation (backpropagation) est l'algorithme utilisé pour entraîner un réseau de neurones.
Neurones
Comment les neurones sont-ils modélisés ? Chacun a une fonction de propagation qui transforme les sorties des neurones connectés, souvent avec une somme pondérée. La sortie de la fonction de propagation passe à une fonction d'activation, qui s'enclenche lorsque son entrée dépasse une valeur seuil.
Fonctions d'activation
Dans les années 1940 et 1950, les neurones artificiels utilisaient une fonction d'activation en escalier et étaient appelés perceptrons. Les réseaux neuronaux modernes peuvent dire qu'ils utilisent des perceptrons, mais ils ont en réalité des fonctions d'activation lisses, telles que la fonction logistique ou sigmoïde, la tangente hyperbolique et l'unité linéaire rectifiée (ReLU). ReLU est généralement le meilleur choix pour une convergence rapide, bien qu'il ait un problème de neurones "morts" pendant l'entraînement si le taux d'apprentissage est trop élevé.
La sortie de la fonction d'activation peut passer à une fonction de sortie pour un façonnage supplémentaire. Souvent, cependant, la fonction de sortie est la fonction identité, ce qui signifie que la sortie de la fonction d'activation est passée aux neurones connectés en aval.
Topologies des réseaux neuronaux
Maintenant que nous connaissons les neurones, nous devons apprendre les topologies communes des réseaux neuronaux. Dans un réseau feed-forward, les neurones sont organisés en couches distinctes : une couche d'entrée, un certain nombre de couches de traitement cachées et une couche de sortie, et les sorties de chaque couche vont uniquement à la couche suivante.
Dans un réseau feed-forward avec des connexions de raccourci, certaines connexions peuvent sauter une ou plusieurs couches intermédiaires. Dans les réseaux neuronaux récurrents, les neurones peuvent s'influencer eux-mêmes, soit directement, soit indirectement à travers la couche suivante.
Entraînement
L'apprentissage supervisé d'un réseau neuronal se fait comme tout autre apprentissage automatique. Vous présentez au réseau des groupes de données d'entraînement, comparez la sortie du réseau à la sortie souhaitée, générez un vecteur d'erreur et appliquez des corrections au réseau en fonction du vecteur d'erreur. Les lots de données d'entraînement qui sont exécutés ensemble avant d'appliquer des corrections sont appelés époques.
Pour ceux qui s'intéressent aux détails, la rétropropagation utilise le gradient de la fonction d'erreur (ou coût) par rapport aux poids et biais du modèle pour découvrir la direction correcte pour minimiser l'erreur. Deux choses contrôlent l'application des corrections : l'algorithme d'optimisation et la variable de taux d'apprentissage, qui doit généralement être petite pour garantir la convergence et éviter de causer des neurones ReLU morts.
Optimiseurs
Les optimiseurs pour les réseaux neuronaux utilisent généralement une forme d'algorithme de descente de gradient pour entraîner la rétropropagation, souvent avec un mécanisme pour éviter de rester bloqué dans des minima locaux, comme l'optimisation de mini-lots sélectionnés au hasard (descente de gradient stochastique) et l'application de corrections de momentum au gradient. Certains algorithmes d'optimisation adaptent également les taux d'apprentissage des paramètres du modèle en regardant l'historique du gradient (AdaGrad, RMSProp et Adam).
Comme pour tout apprentissage automatique, vous devez vérifier les prédictions du réseau neuronal par rapport à un ensemble de données de validation séparé. Sans cela, vous risquez de créer des réseaux neuronaux qui mémorisent uniquement leurs entrées au lieu d'apprendre à être des prédicteurs généralisés.
DNNs réels
Un réseau neuronal profond pour un problème réel peut avoir jusqu'à 10 couches cachées. Sa topologie peut être simple ou assez complexe. Plus il y a de couches dans le réseau, plus il peut reconnaître de caractéristiques. Malheureusement, plus il y a de couches dans le réseau, plus il faudra de temps pour calculer, et plus il sera difficile de s'entraîner.
Algorithmes d'apprentissage profond
Comme mentionné précédemment, la plupart de l'apprentissage profond se fait avec des réseaux neuronaux profonds. Les réseaux neuronaux convolutifs (CNN) sont souvent utilisés pour la vision artificielle. Les réseaux neuronaux récurrents (RNN) sont souvent utilisés pour le traitement du langage naturel et d'autres séquences, tout comme les réseaux de mémoire à long terme (LSTM) et les réseaux neuronaux basés sur l'attention. Les forêts aléatoires, également appelées forêts de décision aléatoires, qui ne sont pas des réseaux neuronaux, sont utiles pour une gamme de problèmes de classification et de régression.
Réseaux CNN
Les réseaux neuronaux convolutifs utilisent généralement des couches convolutives, de pooling, ReLU, entièrement connectées et de perte pour simuler un cortex visuel. La couche convolutive prend essentiellement les intégrales de nombreuses petites régions qui se chevauchent. La couche de pooling effectue une forme de sous-échantillonnage non linéaire. Les couches ReLU appliquent la fonction d'activation non saturante f(x) = max(0,x). Dans une couche entièrement connectée, les neurones ont des connexions avec toutes les activations de la couche précédente. Une couche de perte calcule comment l'entraînement du réseau pénalise l'écart entre les étiquettes prédites et réelles, en utilisant une fonction de perte Softmax ou d'entropie croisée pour la classification, ou une fonction de perte euclidienne pour la régression.
RNN, LSTM et réseaux neuronaux basés sur l'attention
Dans les réseaux neuronaux feed-forward, l'information circule de l'entrée, à travers les couches cachées, jusqu'à la sortie. Cela limite le réseau à traiter un seul état à la fois.
Dans les réseaux neuronaux récurrents, l'information circule en boucle, ce qui permet au réseau de se souvenir des sorties récentes. Cela permet l'analyse des séquences et des séries temporelles. Les RNN ont deux problèmes courants : les gradients explosifs (facilement corrigés en clampant les gradients) et les gradients qui disparaissent (pas si faciles à corriger).
Dans les LSTM, le réseau est capable d'oublier (gating) les informations précédentes ou de s'en souvenir, dans les deux cas en modifiant les poids. Cela donne effectivement à un LSTM une mémoire à la fois à long terme et à court terme et résout le problème des gradients qui disparaissent. Les LSTM peuvent traiter des séquences de centaines d'entrées passées.
Les modules d'attention sont des portes généralisées qui appliquent des poids à un vecteur d'entrées. Un encodeur d'attention hiérarchique utilise plusieurs couches de modules d'attention pour traiter des dizaines de milliers d'entrées passées.
Forêts aléatoires
Un autre type d'algorithme d'apprentissage profond - qui n'est pas un réseau neuronal profond - est la forêt aléatoire, ou forêt de décision aléatoire couramment utilisée, et brevetée par Leo Breiman et Adele Cutler, qui permet d'assembler les sorties de plusieurs arbres de décision pour atteindre un résultat unique. Sa souplesse d'utilisation et sa flexibilité ont favorisé son adoption, car il gère à la fois les problèmes de classification et de régression. Une forêt aléatoire est construite à partir de nombreuses couches, mais au lieu de neurones, elle est construite à partir d'arbres de décision, et produit une moyenne statistique (mode pour la classification ou moyenne pour la régression) des prédictions des arbres individuels. Les aspects aléatoires des forêts aléatoires sont l'utilisation de l'agrégation bootstrap (a.k.a. bagging) pour les arbres individuels et la prise de sous-ensembles aléatoires des caractéristiques.
Cadres d'apprentissage profond
Bien que vous puissiez écrire des programmes d'apprentissage profond à partir des principes de base, il est beaucoup plus efficace d'utiliser des cadres d'apprentissage profond, d'autant plus qu'ils ont été optimisés pour une utilisation avec des GPU et d'autres accélérateurs. Le cadre prééminent est TensorFlow, qui a été créé chez Google. L'API de haut niveau préférée pour TensorFlow est Keras, qui peut également être utilisée avec d'autres cadres de back-end.
PyTorch, de Facebook et d'autres, est une alternative solide à TensorFlow, et prend en charge les réseaux neuronaux dynamiques, dans lesquels la topologie du réseau peut changer d'une époque à l'autre. Fastai est une API tierce de haut niveau qui utilise PyTorch comme back-end.
MXNet, d'Amazon et d'autres, est une autre alternative solide à TensorFlow, avec une prétention à une meilleure évolutivité. Gluon est l'API impérative de haut niveau préférée pour MXNet.
Chainer, d'IBM, Intel et d'autres, a été en quelque sorte l'inspiration pour PyTorch, étant donné qu'il définit le réseau neuronal par exécution et prend en charge les réseaux neuronaux dynamiques.
Bien que tous les cadres mentionnés ci-dessus soient principalement en Python, Deeplearning4j (DL4J), initialement de Skymind et maintenant un projet Apache, est principalement codé en Java et Scala. DL4J est compatible avec Apache Spark et Hadoop.
ONNX a été initialement proposé comme un écosystème ouvert pour des modèles d'IA interchangeables. ONNX a maintenant un runtime en plus du format de fichier d'échange.
TensorRT, de Nvidia, est un autre runtime pour les modèles d'IA, spécifiquement pour tirer parti des GPU Nvidia. Le runtime ONNX peut utiliser TensorRT comme plug-in.
Apprentissage profond par transfert
L'apprentissage par transfert est le processus d'adaptation d'un modèle entraîné sur un ensemble de données à un autre ensemble de données. L'apprentissage par transfert est beaucoup plus rapide que l'entraînement de modèles à partir de zéro et nécessite beaucoup moins de données pour l'entraînement.
Google Cloud AutoML implémente l'apprentissage profond par transfert pour la vision, la traduction et le langage naturel. Azure Machine Learning Service propose des services similaires d'apprentissage profond par transfert sous forme de vision personnalisée, de discours personnalisable et de traduction, et de recherche personnalisée.
Entraînement distribué en apprentissage profond
Alors que TensorFlow a sa propre manière de coordonner l'entraînement distribué avec des serveurs de paramètres, une approche plus générale utilise Open MPI (interface de passage de messages). Horovod, un cadre d'entraînement distribué pour TensorFlow, Keras et PyTorch créé chez Uber, utilise Open MPI ainsi que Nvidia NCCL. Horovod atteint une efficacité de mise à l'échelle entre 68 % et 90 %, selon le modèle étant entraîné.

