dimanche, septembre 15, 2019

Comprendre le Deep Learning



Une introduction aux réseaux de neurones
Prédicteurs et classifieurs

  • Un prédicteur est une machine capable d’approximer un processus dont on ne connaît pas à priori le modèle. Le calcul de la sortie en fonction des données présentées en entrée est appelé une régression.
  • Une fonction linéaire peut servir de prédicteur mais aussi de classifieur pour différencier des éléments appartenant à des catégories différentes lorsque ces catégories sont clairement séparables.
  • Nous avons mis au point une méthode itérative, autrement dit un algorithme, pour ajuster le paramètre d’un classifieur linéaire en fonction de l’erreur qu’il commet entre la sortie souhaitée et la sortie obtenue grâce à des exemples : les données d’apprentissage.
  • Georges Boole cherchait en fait à établir une théorie mathématique permettant d’expliquer la pensée humaine.
  • Un classifieur linéaire n’est pas suffisant pour séparer des données qui ne sont pas elles-mêmes régies par un processus linéaire. L’exemple le plus simple est l’opérateur booléen “OU Exclusif” (XOR)
  • Une solution possible pour contourner cette difficulté consiste à utiliser plusieurs classificateurs.
Les réseaux de neurones
  • On estime que le cerveau humain comprend 100 milliards de neurones avec une moyenne de 7000 connexions par neurone.
  • Modèle de neurone formel avec une fonction d’activation sigmoïde : McCulloch et Pitts.
  • Construire un réseau de neurones formels est simple : il suffit de créer des couches de neurones tous identiques et de relier entièrement les sorties de neurones de la couche précédente aux entrées de la couche suivante.
  • Le produit matriciel est très utile pour les réseaux de neurones.
  • L’application de la fonction sigmoïde correspond à une unique opération.
L’apprentissage
  • L’apprentissage dans un réseau de neurones à couche est réalisé grâce à une méthode appelée la rétro propagation de l’erreur.
  • L’ensemble des équations nécessaires se résume à la fonction sigmoïde et quatre équations matricielles élémentaires.
  • La procédure d’apprentissage pour un réseau de neurones à couches est effectuée en ajustant les poids synaptiques en propageant le gradient de l’erreur en sens inverse.
  • Les formules donnant l’ajustement à effectuer sur les poids synaptiques restent simples.
  • Il faut toutefois un jeu de données d’apprentissage adéquat pour le problème à traiter et régler empiriquement le taux d’apprentissage afin d’éviter des surajustements (overfittings)
Programmer un réseau de neurones
  • Le problème : il s'agit de reconnaître certaines configurations d'une image réduite à la composition de quatre carrés noirs ou blancs. 00 pour les images n'ayant aucun ou tous les pixels noirs, 01 pour celles comprenant un pixel noir, 10 pour celles ayant deux pixels noirs, et 11 pour celles ayant trois pixels noirs.
  • Le code: SimpleNet.html
  • En résumé, un réseau de neurones est simple à comprendre et à programmer.
L’apprentissage profond

  • Tout a commencé par une publication de l'équipe de Geoffrey Hinton en 2006. Celle-ci montrait comment préentraîner un réseau de plusieurs couches avec une approche non supervisée et progressive, c'est à dire en procédant couche par couche, puis en terminant l'apprentissage par une procédure de rétro propagation, supervisée cette fois.
  • D'une part, il apparaissait qu'il valait mieux entrainer les réseaux sur de très grands jeux de données plutôt que de pratiquer des retraitements sur des jeux de données plus réduits.
  • Google a embauché Geoffrey Hinton, et Facebook le français Yann LeCun, les deux chercheurs précurseurs et parmi les plus réputés du domaine.
  • Ce n’est pas forcément celui qui a le meilleur algorithme qui gagne, c’est celui qui a le plus de données.
  • Il vaut mieux multiplier les données afin de réduire la complexité des prétraitements.
  • Sur des tâches très spécifiques, les réseaux de neurones profonds surpassent déjà une majorité de la population, pour ne pas dire tous les humains, ou presque.
  • Nous sommes en pratique à des années lumière de la création d’un cerveau artificiel capable des mêmes prouesses que notre cerveau organique : apprendre sans cesse, effectuer un nombre incroyable de tâches différentes, s'adapter aux situations nouvelles, imaginer et créer, ressentir des émotions.
Le deep learning en pratique
  • La librairie ConvNet.js
  • Les classes de ConvNet.js :
    • les couches d'entrée
    • les couches totalement connectées
    • les couches de sortie
    • les couches de convolution: pour les applications de reconnaissance d'images, les couches de convolutions sont indispensables.
    • les entraîneurs : le paramètre principal d'un entraineur est la méthode d'apprentissage. Les trois principales fournies par la librairie sont : sgd (stochastique gradient descent), adagrad, et adadelta.
  • La régression consiste à faire calculer, prédire, au réseau de neurones des valeurs numériques réelles.
  • Un réseau de neurones pour faire de la classification, autrement dit un classifier, est très proche d'un réseau pour faire de la prédiction. La différence essentielle réside dans la couche de sortie qui calcule des probabilités d'appartenance à des classes au lieu de valeurs numériques.
  • Pour aller plus loin, une bonne approche consiste à expérimenter la libraire ConvNet.js avec les autres exemples proposés par son concepteur et ses contributeurs.
  • Pour effectuer ces tâches de sauvegarde, le plus simple est d'utiliser les fonctions Javascript toJSON() et fromJSON(). Ainsi on transforme l'état courant du réseau en une chaîne de caractères qui peut être ensuite sauvegardée de multiples façons.
  • Les outils et les librairies mis à dispositions par le laboratoire de recherche de Facebook : Torch, ou bien celui de Google : TensorFlow. Toutefois, auparavant, il vous sera nécessaire de vous initier au langage Python.

Aucun commentaire: