Comprendre les réseaux de neurones avec Tensorflow Playground

Introduction

Quand on se lance dans le Deep Learning, on est forcément confronté à une difficulté de compréhension par rapport au concept même de réseau de neurones mais aussi par rapport à son paramétrage. Difficile en effet de bien appréhender chaque levier d’ajustement d’un tel mécanisme qui parait si abstrait!

Personnellement j’ai toujours trouvé magique l’idée que l’on puisse modéliser presque n’importe quoi avec un tel système d’apparence si simple (d’un point de vue unitaire, neuronal). Mais quel est impact réel sur l’ensemble de système si:

  • On ajoute des couches cachées
  • On ajoute des neurones sur telle ou telle couche
  • On change le taux d’apprentissage
  • On change le nombre d’époques (epochs) ou de cycle de propagation-rétropropagation
  • On change les fonctions d’activation des neurones
  • On utilise des fonctions de régulation
  • On change la taille des lots (batchs)
  • etc.

Tensorflow Playground

Bien sur on peut utiliser Tensorboard (pour ceux qui utilisent l’API de Google et non un autre comme PyTorch). Mais celà voudrait dire prendre du temps à faire plein d’essais et voir comment est le rendu. A la place, une équipe (lancée par Daniel Smilkov & Shan Carter) à créé un outil pédagogique génial qui permet de tester en quelques clics tout un ensemble de configuration possibles et surtout de voir leur résultat en direct: Tensorflow Playground. Cet outil est un outil web basé sur javascript et d3.js.

Vous allez maintenant voir de manière concrête et graphique les changements des principales configuration de votre réseau de neurones. Bien sur Cet outil ne vous permet pas de concevoir tout type de réseau de neurones. Il est à vrai dire limité en la matière car vous ne pouvez créer que des réseaux séquentiels, mais en matière d’apprentissage je trouve que l’approche est vraiment très ludique. Alors on y va ?

Vous pouvez télécharger et installer cet outil directement via Github ou aller sur un instance toute prête ici. Bien sur nous allons dans un premier temps utiliser la version en ligne et jouer un peu avec pour mieux comprendre les réseaux de neurones.

Présentation de l’interface

L’interface est plutôt simple et épurée, détaillons là par partie.

Le bandeau supérieur vous permet :

  • De démarrer l’apprentissage ou le réinitialiser
  • devoir le nombre d’époque (epochs) réalisée (une fois qu’on a lancé l’apprentissage)
  • Le taux d’apprentissage (pour la descente de gradient)
  • Les fonctions d’activation de nos neurones
  • Les fonctions de régularisation (seulement L1 & L2)
  • Le type de problème (est-ce un problème de classification ou de régularisation ?)

Ensuite nous avons les entrées du réseau de neurones :

  • On peut choir le type de répartition de données
  • Le ratio données d’entraînement / données de test.
  • Ajouter des outliers (bruits) afin de pertuber un peu l’apprentissage du réseau en y insérant des données plus réaliste.
  • La taille des batchs (lots) d’apprentissage du réseau de neurones.

Note: Les points orange ont une valeur de -1 alors que les points bleus on une valeur de +1

Nous avons ensuite la sortie :

Le graphique de sortie montre le résultat du réseau de neurones. Ce qui est particulièrement intéressant à ce niveau là c’est que l’on a au dessus du résultat les courbes des fonctions de coûts (loss) par époque (epochs). C’est l’un des aspects les plus important qu’il faudra surveiller quand vous allez lancer l’apprentissage pour voir si votre réseau est performant ou non. La courbe de coût d’entraînement est en gris alors que celle de test est en noir.

Le plus intéressant (pour la fin) maintenant la conception du réseau de manière graphique au milieu:

Le réseau est présenté bien sur par couche verticales. Vous pouvez ajouter jusque 8 couches cachées en cliquant sur le + (ou en en retirant par le -). Sur chaque couche vous pouvez ajouter aussi ou retirer des neurones avec les + et – au dessus des couches.

Ce qui est à noter ici (une fois que vous aurez lancé votre apprentissage) :

  • Vous allez voir par neurone comment sur cette étape commence à se matérialiser le résultat. Vous remarquerez que plus vous ajouter de couches plus le réseau affine son résultat: en dégrossissant dans les premières couches cachées pour faire un travail plus spécialisé dans les dernières.
  • Passez la souris sur les liens entre les neurones, vous pourrez voir aussi les valeurs des poids et pourquoi pas détecter les neurones morts par exemple. L’épaisseur du trait vous donne aussi une indication sur l’importance du poids.

Quelques essais

Nous sommes prêts à nous lancer dans quelques essais maintenant. Faites plusieurs essais en changeant paramètre par parametre pour voir son impact. Regardez particulièrement les courbes de coûts, il faut bien sur qu’elle soient le plus basses possible ensemble. Attention à ce qu’elle ne divergent pas ce qui signifierait que vous êtes par exemple en sur apprentissage (courbe d’entraînement en bas et courbe de test plus haut).

Pour aller plus loi et par exemple détecter une disparition de gradient, essayez la répartition des données en forme de spirale:

Déjà vous allez voir que l’apprentissage est vraiment beaucoup plus long. Il sera même sans doute très instable dans la mesure où parfois il aura stagnation (plateaux) puis reprise, etc. Si vous avez mis plus de 3 couches cachées remarquez aussi l’évolution des poids sur les couches de gauche par rapport à celles de droite.

Conclusion

Cet outil est avant tout un outil ludique mais qui permet vraiment de palper l’importance des grands leviers de réglages d’un réseau de neurones. Donc si vous vous lancer dans cette aventure du Deep Learning je vous recommande chaudement de jouer avec ce simulateur.

Partager cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.