Visuels de l’apprentissage des réseaux de neurones

Modification des représentations internes d’un réseau de neurones en cours d’entrainement

1. Le formalisme de l’apprentissage automatique

L’apprentissage automatique est la science regroupant les algorithmes ayant la capacité d’apprendre des données. Cette notion d’apprentissage est représentée mathématiquement de la façon suivante:

Équation f_w(x_i) = y_i

Ici, x représente un ensemble de données. Pour chaque donnée x_i (un scalaire, un vecteur, une matrice ou un tenseur), il existe une valeur associée y_i à apprendre. L’apprentissage automatique avec la fonction f revient à trouver ses paramètres w tels que le résultat ŷ_i estimé par la fonction soit le plus proche possible de la vérité y_i pour l’ensemble des x possibles.

Par exemple, si f est une fonction linéaire simple, on a w = [a,b] et donc f_[a,b](x_i) = a*x_i+b = ŷ_i. Il existe de nombreuses fonctions d’apprentissage automatique.

2. L’apprentissage des réseaux de neurones

Les réseaux de neurones font partis des algorithmes d’apprentissage profond qui sont une sous-catégorie des algorithmes d’apprentissage automatique. Un réseau de neurones est donc une fonction d’apprentissage automatique.

Pour apprendre des données, les réseaux de neurones effectuent une prédiction à partir de leur structure interne. Cette prédiction (qui a également la forme d’un scalaire, vecteur, d’une matrice ou d’un tenseur) dépend des paramètres (poids) du réseau, et de la donnée d’entrée.

Le réseau de neurones compare ensuite cette prédiction/estimation ŷ_i avec la vraie valeur à prédire y_i. En effectuant la différence, il connait son erreur. En apprentissage profond, l’ensemble des calculs permettant de calculer cette erreur sont différentiables, cela permet de calculer le gradient (la dérivée en un point) de sorte à modifier les paramètres w du réseaux dans la direction qui abaisse l’erreur.

Pour faire simple, le réseau voit des données, il fait une prédiction, il regarde son erreur et on a un algorithme pour le modifier et corriger cette erreur.

3. Une visualisation en pratique

Code utilisé: https://github.com/Whiax/NeuralDatavizTF

Pour faire de l’apprentissage, il nous faut une tâche. La voici:

Tâche d’apprentissage automatique

La tâche est d’apprendre la couleur à donner à une croix à partir de sa position (a,b). On a donc x_i = [a,b] et y_i = [0] ou [1], avec 0 le jaune et 1 le bleu.

Le réseau de neurones est composé de deux couches cachées. Les données (un vecteur de dimension 2 pour a et b) sont en entrée, puis passent par un perceptron à 100 neurones (100 fonctions linéaires), puis par une fonction non-linéaire ReLU, c’est la première couche cachée, nous avons un vecteur de dimension 100 en sortie.

La 2ème est identique mais n’est composée que de 2 neurones, on a donc un vecteur de dimension 2 en sortie.

Enfin, le réseau prédit sa sortie avec la couche de sortie (un scalaire entre 0 et 1), qui sera remis à 0 ou à 1 avec un arrondi. Si le réseau prédit au dessus de 0.5, ŷ_i = 1, sinon ŷ_i = 0.

Si la prédiction est à 0.6 et que la vérité est à 1, le réseau doit se corriger de 0.4. Dans les faits, ce processus est incrémental, le réseau se corrigera d’une fraction de 0.4, par exemple de 0.01 * 0.4 = 0.004. On appelle alors ce facteur 0.01 le learning rate. Le réseau considère qu’il doit se corriger de 0.004 sur un paramètre et ajustera ses poids plus progressivement. Il effectue alors une itération. Un réseau nécessite de nombreuses itérations pour finir un entrainement.

Voici comment évolue le pourcentage de bonnes prédictions en fonction des itérations:

Pourcentage de bonnes prédictions en fonction du nombre d’itération

On voit que le réseau passe de 36% de bonnes prédictions à 82%. L’apprentissage fonctionne. Mais que s’est-t-il passé?

Les visuels

Et bien le réseau a modifié ses poids à partir de son erreur. Les détails de ces opérations sont expliqués à plusieurs endroits, mais peu de visuels existent.

En modifiant ses poids, le réseau modifie la représentation interne qu’il a des données. Ainsi, dans notre réseau de neurone, l’algorithme passe de la représentation initiale en entrée de dimension [2], à un vecteur de dimension [100], puis un autre de dimension [2] puis à sa sortie en dimension [1].

Voici des visuels, pour 3 entraînements différents, de l’évolution de l’avant dernière représentation, en fonction des itérations:

Avant dernière représentation interne du réseau de neurones en fonction des itérations (3 entrainement)

Sur ces visuels, chaque point correspond à une donnée d’entrée. Si le réseau de neurones était une fonction identité, nous retomberions sur des points aux positions de ceux de la tâche. Un point vert est une bonne classification, un point rouge est mal classifié.

Durant son apprentissage, le réseau de neurones a besoin de voir ces points autrement afin de pouvoir les classifier. La dernière fonction d’un réseau de neurones étant généralement simple, la complexité de création de cette représentation interne réside dans les couches qui précèdent. Ici, la couche de 100 neurones contient toute la complexité, et la couche de 2 neurones qui la suit sert à visualiser cette complexité. Les différentes lignes droites qui apparaissent représentent les droites partant de (0,0) et allant dans les coins de la tâche (5,5), (5,-5), (-5,5), (-5,-5).

Le réseau isole d’abord la zone (0,0) contenant le premier groupement de point de la classe bleue, puis essaie d’isoler la zone (3,3) qui contient le second groupement.

Les réseaux de neurones opèrent de façon cachée. Puisque leur erreur dépend de centaines de paramètres, il n’est pas possible de dire pourquoi ils progressent d’une façon plutôt que d’une autre sans faire une analyse longue, complexe et peu utile car elle n’est valide que pour une seule itération d’un seul entrainement donné. Ainsi il n’est pas possible d’aller plus loin dans le détail de l’évolution des visuels donnés sans faire de suppositions générales sur l’ensemble de ces paramètres.

Ici, l’idée est que le réseau de neurones cherche à transformer la représentation initiale en une représentation facile à traiter pour sa couche finale, c’est à dire une représentation qui permette de donner une forte valeur (proche de 1) à une des couleurs et une faible valeur à l’autre. L’idéal est donc de mettre les points bleus à un bout d’une droite ou d’un plan, et les points oranges à un autre bout.

C’est ce que nous pouvons imaginer voir sur ce dernier visuel qui cette fois utilise les couleurs de la tâche d’origine:

Représentation 2D de la tâche d’apprentissage, à l’intérieur du réseau, en fonction des itérations, afin d’adapter ses paramètres à la tâche traitée

Les deux groupements de points bleus sont progressivement isolés par le réseau durant son apprentissage.

Conclusion

L’objectif de cette étude était d’analyser visuellement un apprentissage automatique. Ici, la tâche était très aisée, les données d’entrée n’était qu’en deux dimensions.

Si nous devons traiter des images de dimensions 1000*1000*3, la dimension d’entrée est alors de 3 millions. Si d’autant plus nous avons non pas deux mais 1000 classes à l’arrivée, il est illusoire de vouloir représenter efficacement cette complexité.

Néanmoins, le principe général demeure, les algorithmes d’apprentissage profond sont des algorithmes avec une forte capacité de représentation interne. Cette caractéristique fait partie de celles qui ont fait d’eux les fers de lance de la nouvelle génération d’algorithmes d’intelligence artificielle depuis les années 2010.

C’est cette capacité à internaliser une forte complexité qui les a rendu si puissants: il n’y a pas besoin de les diriger ni de les comprendre en profondeur pour qu’ils fonctionnent.

____________________________________________

Cet article a été rédigé dans le cadre d’une étude réalisée par et pour https://www.hyugen.com

Support us 💙

You can follow us on Twitter to show support and to see all news (no tweet-spam, only news), or here on Medium.

Return to Blog
All our articles are available on Medium

News

  • Card image
    Transformers in Pytorch from scratch for NLP Beginners

    Everything you need in one python file, without extra libraries Two weeks ago, I wanted to understand Transformers. I read the original paper, I read articles I could find online, I listened to podcas...

    Wed, 17 Feb 2021 21:12:46 GMT

    Read

    Wed, 17 Feb 2021 21:12:46 GMT

    Read
  • Card image
    Why do we close nuclear reactors?

    Nuclear reactors may be closed for four main reasons: they reached their end of life, they had an accident, they had technical problems and couldn’t be repaired, or a political decision made them cl...

    Sun, 02 Apr 2023 22:23:52 GMT

    Read

    Sun, 02 Apr 2023 22:23:52 GMT

    Read
  • Card image
    How many people died because of the Chernobyl disaster?

    Several studies and organizations investigated deaths related to the Chernobyl accident. I present their results. This article is part of a series on the DEC Report. The DEC report is a 200+ pages fr...

    Sun, 02 Apr 2023 18:29:33 GMT

    Read

    Sun, 02 Apr 2023 18:29:33 GMT

    Read
  • Card image
    Energy, EROI and limits to growth

    What is the limit to the amount of energy we can produce? Is EROI the best metric for future constraints? Let’s see! In this article, I provide a simple algorithm to evaluate if a strategy is credi...

    Sun, 02 Apr 2023 14:07:27 GMT

    Read

    Sun, 02 Apr 2023 14:07:27 GMT

    Read
  • Card image
    How much fossil fuel do we consume each year?

    Can we really grasp how much fossil fuels we consume each year? Is it a lot? Not that much? Can we easily do an energy transition for climate change? Or is our consumption of fossil fuel so fundamenta...

    Sun, 02 Apr 2023 11:58:25 GMT

    Read

    Sun, 02 Apr 2023 11:58:25 GMT

    Read
  • Card image
    How I assessed the global potential of nuclear energy

    This article is part of a series on the DEC Report. The DEC report is a 200+ pages freely accessible report I wrote on climate change and energy. It assesses the world’s potential to tackle climate ...

    Sat, 01 Apr 2023 20:08:49 GMT

    Read

    Sat, 01 Apr 2023 20:08:49 GMT

    Read
  • Card image
    How I evaluated the world’s potential for wind energy

    This article is part of a series on the DEC Report. The DEC report is a 200+ pages freely accessible report I wrote on climate change and energy. It assesses the world’s potential to tackle climate ...

    Sat, 01 Apr 2023 17:46:21 GMT

    Read

    Sat, 01 Apr 2023 17:46:21 GMT

    Read
  • Card image
    How I evaluated the world’s potential for solar energy

    This article is part of a series on the DEC Report. The DEC report is a 200+ pages freely accessible report I wrote on climate change and energy. It assesses the world’s potential to tackle climate ...

    Sat, 01 Apr 2023 16:28:55 GMT

    Read

    Sat, 01 Apr 2023 16:28:55 GMT

    Read
  • Card image
    How I evaluated the world’s potential for hydroelectricity

    This article is part of a series on the DEC Report. The DEC report is a 200+ pages freely accessible report I wrote on climate change and energy. It assesses the world’s potential to tackle climate ...

    Sat, 01 Apr 2023 15:09:34 GMT

    Read

    Sat, 01 Apr 2023 15:09:34 GMT

    Read
  • Card image
    How I built an AI Image Enhancer

    What is a great image? It’s just the previous image with more contrast and saturation, right (/s) ? But at some point, the contrast or saturation is too high. And what if the creator of the image d...

    Sat, 01 Apr 2023 02:06:01 GMT

    Read

    Sat, 01 Apr 2023 02:06:01 GMT

    Read
  • Card image
    [Video] A Model for Language Acquisition

    In this video I introduce the prototype for language acquisition in the global Artificial General Intelligence project. https://medium.com/media/9a72c93624362c8105f1406f16ee1817/href The model I used...

    Wed, 26 Jan 2022 22:54:31 GMT

    Read

    Wed, 26 Jan 2022 22:54:31 GMT

    Read
  • Card image
    Simulons des pandémies

    Propagation d’un virus dans une population Cet article a pour but de transmettre un retour d’expérience sur la simulation de pandémies. Objectif? Comprendre les limites et l’intérêt de ces a...

    Thu, 22 Oct 2020 11:56:53 GMT

    Read

    Thu, 22 Oct 2020 11:56:53 GMT

    Read
  • Card image
    Neural Network in C++ From Scratch and Backprop-Free Optimizers

    In this article I’ll present a beginner-oriented framework implementing neural networks in C++. The main goal of this code is to understand the root of neural networks for beginners, it also allows ...

    Tue, 13 Oct 2020 23:03:00 GMT

    Read

    Tue, 13 Oct 2020 23:03:00 GMT

    Read
  • Card image
    A more parameter-efficient SOTA bottleneck! (2020/07)

    Linear Bottleneck with Efficient Channel Attention instead of Squeeze Excitation CNN are great blablabla… Let’s get to the point. SOTA for image classification on Imagenet is EfficientNet with 88....

    Sat, 25 Jul 2020 19:40:43 GMT

    Read

    Sat, 25 Jul 2020 19:40:43 GMT

    Read
  • Card image
    Visuels de l’apprentissage des réseaux de neurones

    Modification des représentations internes d’un réseau de neurones en cours d’entrainement 1. Le formalisme de l’apprentissage automatique L’apprentissage automatique est la science regroupan...

    Wed, 03 Jun 2020 19:07:53 GMT

    Read

    Wed, 03 Jun 2020 19:07:53 GMT

    Read
  • Card image
    Construire un serveur de Deep Learning en 2020

    [UPDATE 2020/10/03: Prise en compte des nouveaux GPUs de Nvidia] L’intelligence artificielle, à travers l’apprentissage profond, est une discipline bien établie. Les algorithmes utilisés progr...

    Sat, 16 May 2020 12:43:19 GMT

    Read

    Sat, 16 May 2020 12:43:19 GMT

    Read