Qu'est-ce que le Deep Learning? Algorithmes qui imitent le cerveau humain

Définition de l'apprentissage profond

L'apprentissage en profondeur est une forme d'apprentissage automatique qui modélise des modèles de données sous forme de réseaux complexes et multicouches. L'apprentissage en profondeur étant le moyen le plus général de modéliser un problème, il a le potentiel de résoudre des problèmes 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 en profondeur peut non seulement produire des résultats utiles là où d'autres méthodes échouent, mais également créer des modèles plus précis que d'autres méthodes et réduire le temps nécessaire pour créer un modèle utile. Cependant, la formation de modèles d'apprentissage en profondeur nécessite une grande puissance de calcul. Un autre inconvénient de l'apprentissage profond est la difficulté d'interpréter les modèles d'apprentissage profond. 

La caractéristique déterminante de l'apprentissage en profondeur est que le modèle en cours d'entraînement a plus d'une couche cachée entre l'entrée et la sortie. Dans la plupart des discussions, l'apprentissage en profondeur signifie l'utilisation de réseaux de neurones profonds. Il existe cependant quelques algorithmes qui implémentent l'apprentissage en profondeur en utilisant d'autres types de couches cachées en plus des réseaux de neurones.

Apprentissage en profondeur vs apprentissage automatique

J'ai mentionné que l'apprentissage en profondeur est une forme d' apprentissage automatique. Je ferai référence à l'apprentissage automatique non profond en tant qu'apprentissage automatique classique , pour me conformer à l'utilisation courante.

En général, les algorithmes d'apprentissage automatique classiques fonctionnent beaucoup plus rapidement que les algorithmes d'apprentissage profond; un ou plusieurs processeurs seront souvent suffisants pour entraîner un modèle classique. Les modèles d'apprentissage en profondeur ont souvent besoin d'accélérateurs matériels tels que des GPU, des TPU ou des FPGA pour la formation, ainsi que pour le déploiement à grande échelle. Sans eux, les modèles prendraient des mois à s'entraîner.

Pour de nombreux problèmes, certains algorithmes d'apprentissage automatique classiques produiront un modèle «assez bon». Pour d'autres problèmes, les algorithmes d'apprentissage automatique classiques n'ont pas très bien fonctionné dans le passé.

Applications d'apprentissage en profondeur

Il existe de nombreux exemples de problèmes qui nécessitent actuellement un apprentissage en profondeur pour produire les meilleurs modèles. Le traitement du langage naturel (PNL) est un bon.

À l'automne 2016, la qualité de la sortie de Google Translate pour les paires de langues anglais-français, anglais-chinois et anglais-japonais s'est soudainement améliorée de façon spectaculaire, de la création d'une salade de mots à la production de phrases proches de la qualité d'une traduction professionnelle par un humain. Ce qui s'est passé dans les coulisses, c'est que les équipes de Google Brain et de Google Translate ont réorganisé Google Translate, passant de ses anciens algorithmes de traduction automatique statistique basés sur des phrases (un type d'apprentissage automatique classique) à l'utilisation d'un réseau de neurones profond formé avec des embeddings de mots à l'aide du framework TensorFlow de Google .

Ce n'était pas un projet facile. Il a fallu à de nombreux chercheurs de doctorat des mois de travail sur les modèles et des milliers de semaines GPU pour former les modèles. Cela a également incité Google à créer un nouveau type de puce, une unité de traitement Tensor (TPU), pour exécuter des réseaux de neurones à grande échelle pour Google Translate.

En plus du problème de traduction linguistique abordé par Google Translate, les principales tâches de la PNL comprennent la synthèse automatique, la résolution de co-référence, l'analyse du discours, la segmentation morphologique, la reconnaissance d'entités nommées, la génération du langage naturel, la compréhension du langage naturel, le marquage d'une partie du discours, le sentiment analyse et reconnaissance vocale.

Un autre bon exemple de l'application de l'apprentissage profond est la classification d'images. Parce 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'image. La recherche biologique remonte aux années 50.

La percée dans le domaine des réseaux neuronaux pour la vision a été LeNet-5 de Yann LeCun en 1998, un réseau neuronal convolutif (CNN) à sept niveaux pour la reconnaissance de chiffres manuscrits numérisés dans des images 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 en profondeur d'aujourd'hui peuvent identifier divers catalogues d'objets à une résolution HD en couleur. En plus des réseaux de neurones profonds purs (DNN), les gens utilisent parfois des modèles de vision hybrides, qui combinent l'apprentissage en profondeur avec des algorithmes d'apprentissage automatique classiques qui exécutent des sous-tâches spécifiques.

D'autres problèmes de vision en plus de la classification d'image de base qui ont été résolus avec l'apprentissage en profondeur incluent la classification d'image avec localisation, détection d'objet, segmentation d'objet, transfert de style d'image, colorisation d'image, reconstruction d'image, super-résolution d'image et synthèse d'image.

La classification d'image peut être étendue à la classification vidéo 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 en profondeur a été utilisé avec succès pour prédire comment les molécules interagiront afin d'aider les sociétés pharmaceutiques à concevoir de nouveaux médicaments, à rechercher des particules subatomiques et à analyser automatiquement les images de microscope utilisées pour construire une carte 3D du cerveau humain.

Réseaux de neurones d'apprentissage profond

Les idées de réseaux de neurones «artificiels» remontent aux années 1940. Le concept essentiel est qu'un réseau de neurones artificiels construit à partir de commutateurs de seuil interconnectés peut apprendre à reconnaître des modèles de la même manière qu'un cerveau et un système nerveux animal (y compris la rétine).

Rétropropagation

L'apprentissage dans les réseaux de neurones profonds se produit en renforçant la connexion entre deux neurones lorsque les deux sont actifs en même temps pendant l'entraînement. Dans les logiciels de réseau de neurones modernes, il s'agit le plus souvent d'augmenter les valeurs de poids pour les connexions entre les neurones à l'aide d'une règle appelée rétropropagation d'erreur , backprop ou BP.

Les 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 se déclenche 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 par étapes et étaient appelés perceptrons . Les réseaux de neurones modernes peuvent dire qu'ils utilisent des perceptrons, mais ils ont en fait 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 pose un problème de «mort» des neurones 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 une mise en forme supplémentaire. Souvent, cependant, la fonction de sortie est la fonction d'identité, ce qui signifie que la sortie de la fonction d'activation est transmise aux neurones connectés en aval.

Topologies de réseau neuronal

Maintenant que nous connaissons les neurones, nous devons en apprendre davantage sur les topologies de réseau neuronal courantes. Dans un réseau à réaction directe, les neurones sont organisés en couches distinctes: une couche d'entrée, un nombre quelconque 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 à action directe avec des connexions de raccourci, certaines connexions peuvent sauter par-dessus une ou plusieurs couches intermédiaires. Dans les réseaux de neurones récurrents, les neurones peuvent s'influencer eux-mêmes, soit directement, soit indirectement via la couche suivante.

Entraînement

L'apprentissage supervisé d'un réseau de neurones se fait comme tout autre apprentissage automatique. Vous présentez le réseau avec des groupes de données d'apprentissage, comparez la sortie réseau avec 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 de coût) par rapport aux poids et biais du modèle pour découvrir la bonne direction afin de 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 provoquer la mort des neurones ReLU.

Optimiseurs

Les optimiseurs pour les réseaux de neurones utilisent généralement une forme d'algorithme de descente de gradient pour piloter la rétropropagation, souvent avec un mécanisme pour éviter de rester coincé dans les minima locaux, comme l'optimisation de mini-lots sélectionnés au hasard (Stochastic Gradient Descent) et l'application de corrections de dynamique au gradient . Certains algorithmes d'optimisation adaptent également les taux d'apprentissage des paramètres du modèle en examinant l'historique des gradients (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 distinct. Sans cela, vous risquez de créer des réseaux de neurones qui ne mémorisent que leurs entrées au lieu d'apprendre à être des prédicteurs généralisés.

DNN réels

Un réseau neuronal profond pour un problème réel peut avoir plus de 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 je l'ai mentionné précédemment, la plupart des apprentissages profonds se font avec des réseaux de neurones profonds. Les réseaux de neurones convolutifs (CNN) sont souvent utilisés pour la vision industrielle. Les réseaux de neurones récurrents (RNN) sont souvent utilisés pour le langage naturel et d'autres traitements de séquences, tout comme les réseaux de mémoire à long court terme (LSTM) et les réseaux de neurones axés sur l'attention. Les forêts aléatoires, également connues sous le nom de forêts à décision aléatoire, qui ne sont pas des réseaux de neurones, sont utiles pour une gamme de problèmes de classification et de régression.

Réseaux de neurones CNN

Les réseaux de neurones convolutifs utilisent généralement des couches convolutives, regroupées, 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 regroupement 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 sont connectés à toutes les activations de la couche précédente. Une couche de perte calcule comment la formation du réseau pénalise l'écart entre les étiquettes prédites et vraies, 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 de neurones axés sur l'attention

Dans les réseaux de neurones à réaction directe, les informations circulent de l'entrée, à travers les couches cachées, à la sortie. Cela limite le réseau à traiter un seul état à la fois.

Dans les réseaux neuronaux récurrents, les informations passent par une boucle, ce qui permet au réseau de se souvenir des sorties précédentes récentes. Cela permet l'analyse des séquences et des séries chronologiques. Les RNN ont deux problèmes communs: les gradients explosifs (facilement corrigés en serrant les gradients) et les gradients disparaissant (pas si facile à 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 du gradient de fuite. Les LSTM peuvent traiter des séquences de centaines d'entrées passées.

Les modules Attention sont des portes généralisées qui appliquent des poids à un vecteur d'entrées. Un codeur d'attention neuronale 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 - pas un réseau neuronal profond - est la forêt aléatoire, ou forêt de décision aléatoire. 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 de classification ou moyenne de 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 (aka ensachage ) 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 en profondeur à partir des premiers principes, il est beaucoup plus efficace d'utiliser des cadres d'apprentissage en profondeur, d'autant plus qu'ils ont été optimisés pour une utilisation avec des GPU et d'autres accélérateurs. Le framework prééminent est TensorFlow, qui est originaire de Google. L'API de haut niveau préférée pour TensorFlow est Keras, qui peut également être utilisée avec d'autres frameworks back-end.

PyTorch, de Facebook et d'autres, est une alternative puissante à TensorFlow, et a la particularité de prendre en charge les réseaux de neurones dynamiques, dans lesquels la topologie du réseau peut changer d'époque en époque. 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, d'Intel et d'autres, a été à certains égards l'inspiration de PyTorch, étant donné qu'il définit le réseau neuronal par exécution et prend en charge les réseaux neuronaux dynamiques.

Alors que tous les frameworks mentionnés ci-dessus sont principalement Python, Deeplearning4j (DL4J), originaire de Skymind et maintenant un projet Apache, est principalement Java et Scala. DL4J est compatible avec Apache Spark et Hadoop.

ONNX a été initialement proposé comme un écosystème ouvert pour les modèles d'IA interchangeables. ONNX a maintenant un runtime en plus du format de fichier d'échange.