Comprendre facilement la Backpropagation

Publié par Auguste Hoang le

Backpropagation
Partagez sur les réseaux sociaux !

La Backpropagation, est une technique qui peut sembler compliquĂ©e Ă  comprendre mais qui est indispensable pour entraĂźner un rĂ©seau de neurones. Si ce mot te paraĂźt encore obscure, alors dans cet article je vais t’aider pas Ă  pas Ă  bien le comprendre.

Dans cette article, tu verras :

  • A quoi sert la Backpropagation. ✔
  • Les graphes de calcul, qui est le cadre dans lequel on utilise la Backpropagation. ✔
  • L’algorithme Backpropation sur les graphes de calcul pour calculer un gradient. ✔

Pourquoi utiliser la Backpropagation ?

La Backpropagation sert Ă  calculer le gradient d’une fonction. Mais sais-tu pourquoi on a besoin de cette technique pour calculer le gradient ? đŸ€”

Tu devrais dĂ©jĂ  savoir que pour entraĂźner un rĂ©seau de neurones, on utilise l’algorithme du gradient. Pour rappel, cette mĂ©thode Ă  pour but, Ă  partir d’une fonction f de variable x Ă  valeurs rĂ©elles, de trouver une valeur de x telle que f(x) soit la plus petite possible. Elle consiste Ă  construire une suite de paramĂštres (x_0, x_1, x_2, \dots) telle que :

    \[x_{n+1} = x_n - \eta \cdot \operatorname{grad} f(x_n),\]

oĂč \eta est un nombre appelĂ© le coefficient d’apprentissage (« learning rate » en anglais) et oĂč \operatorname{grad} f (x_n), est le gradient de f en x_n.

Ainsi la question est : comment calcule-t-on ce gradient lorsque que f est la fonction de coĂ»t d’un rĂ©seau de neurones ?

La mĂ©thode qu’on apprend aux Ă©tudiants Ă  l’Ă©cole pour Ă©valuer des gradients est la suivante :

  1. Calculer les fonctions dérivées partielles.
  2. Évaluer les dĂ©rivĂ©es partielles.

Cette mĂ©thode marche trĂšs bien sur des fonctions simples, mais elle devient trĂšs mauvaise Ă  appliquer sur des exemples compliquĂ©s (surtout dans le cas d’un rĂ©seau de neurones), car :

  • Calculer les fonctions dĂ©rivĂ©es partielles est trĂšs coĂ»teux si la fonction est compliquĂ©e. Et dans un rĂ©seau de neurones, la complexitĂ© de la fonction est proportionnelle au nombre de couches du rĂ©seau.
  • Il y a autant de dĂ©rivĂ©es partielles que de paramĂštres. Or dans un rĂ©seau de neurones, il peut y avoir des millions de paramĂštres 😬.

La Backpropagation est alors une mĂ©thode pour Ă©valuer le gradient de maniĂšre beaucoup moins coĂ»teuses 👍.
La diffĂ©rence majeure avec la mĂ©thode prĂ©cĂ©dente est que lorsqu’on Ă©value le gradient, on ne calcule que la valeur de la dĂ©rivĂ©e partielle au point considĂ©rĂ© et non pas la fonction dĂ©rivĂ©e partielle.

Les graphes de calcul

Pour comprendre la Backpropagation, il est nĂ©cessaire de connaĂźtre la notion de graphe de calcul (pas d’inquiĂ©tude ce n’est pas compliquĂ© 🙂). En effet le graphe de calcul est le cadre gĂ©nĂ©ral pour utiliser la Backpropagation. On pourra d’ailleurs remarquer qu’un rĂ©seau de neurones s’interprĂšte naturellement comme un graphe de calcul.

Qu’est-ce qu’un graphe de calcul ?

Un graphe de calcul est un graphe orientĂ© oĂč les nƓuds sont soit des variables soit des opĂ©rations, et les arĂȘtes indiquent les membres des opĂ©rations. Un tel graphe peut ĂȘtre interprĂ©tĂ© comme une fonction.

Le plus simple pour comprendre est de considĂ©rer un exemple 👍. Prenons la fonction f de trois variables dĂ©finie par :

    \[f(x,a,b) = (x \times a+b)^2,\]

oĂč les variables x, a et b sont des nombres rĂ©els. Alors on peut dĂ©composer la fonction f en opĂ©rations Ă©lĂ©mentaires Ă  savoir :

  • Un produit P = x \times a.
  • Une somme S = P + b.
  • Un carrĂ© C = S^2.

Ainsi, on peut schĂ©matiser la fonction f par le graphe de calcul suivant :

Rendered by QuickLaTeX.com

Fig. 1 : Graphe de calcul de la fonction f(x,a,b) = (x \times a+b)^2.

L’algorithme Feedforward

Pour Ă©valuer une fonction Ă  l’aide du graphe de calcul, on utilise l’algorithme Feedforward. Cet algorithme est trĂšs intuitif : il consiste Ă  Ă©valuer le rĂ©sultat de chaque nƓud, et de noter le rĂ©sultat, en parcourant le graphe dans le sens direct.

Par exemple sur la fonction f, si on veut l’Ă©valuer en x=2, a=4 et b=7, alors l’algorithme s’applique comme suit :

  1. On commence par noter les valeurs des nƓuds x, a et b.
  2. Ensuite, on calcule la valeur du nƓud P Ă  l’aide des valeurs de x et a. Ce qui donne P= 4 \times 2 = 8.
  3. Puis, on calcule la valeur du nƓud S Ă  l’aide des valeurs de P et b. Ce qui donne S = 8 + 7 = 15.
  4. Enfin, on calcule la valeur du nƓud C Ă  l’aide de S. Ce qui donne C = 15^2 = 225.

Sur la figure suivante, note Ă  cĂŽtĂ© de chaque nƓud le rĂ©sultat de son Ă©valuation.

Rendered by QuickLaTeX.com

Fig. 2 : Algorithme Feedforward sur la fonction f(x,a,b) = (x \times a+b)^2 pour Ă©valuer en x=2, a=4 et b=7.

Jusqu’ici rien de bien compliquĂ© 👍.

Comment calculer un gradient par Feedforward

Je vais t’expliquer comment calculer le gradient avec l’algorithme Feedforward. Tu te dis sĂ»rement « quoi ? Je croyais qu’il fallait utiliser la Backpropagation pour calculer le gradient ! » đŸ€š. Effectivement, dans un rĂ©seau de neurones on calcule le gradient par Backpropagation. Mais la Backpropagation n’est pas la seule mĂ©thode pour calculer un gradient. On peut aussi le faire lĂ  l’aide de Feedforward. Cependant la mĂ©thode Feedforward est inutilisable en pratique sur des fonctions avec beaucoup de variables, comme on le verra.

Pourquoi est-ce je prĂ©sente cette mĂ©thode ? Parce que je trouve cette mĂ©thode plus intuitive et plus facile Ă  comprendre que la Backpropagation. Et une fois que tu auras compris cette mĂ©thode, tu comprendras plus facilement la mĂ©thode Backpropagation 👍.

La procĂ©dure est la suivante. En parcourant chaque nƓud dans le sens directe, on calcule les deux valeurs suivantes :

  1. Le rĂ©sultat du nƓud.
  2. Le gradient du rĂ©sultat du nƓud par rapport aux paramĂštres de la fonction.

Si on prend toujours l’exemple sur la fonction f prĂ©cĂ©dent, pour Ă©valuer son gradient en x=2, a=4 et b=7, alors l’algorithme se dĂ©roule comme suit :

  1. On commence par noter la valeur x ainsi que son gradient par rapport aux trois variables. Ce qui donne :

        \begin{align*}x &= 2, \\\frac{\partial x}{\partial (x,a,b)} &= (1, 0, 0).\end{align*}


    On fait pareil pour les nƓuds a et b. Ce qui donne :

        \begin{align*}a & =4, \\b & =7, \\\frac{\partial a}{\partial (x,a,b)} & = (0, 1, 0), \\\frac{\partial b}{\partial (x,a,b)} & = (0, 0, 1).\end{align*}

  2. Ensuite, on calcule pour le nƓud P sa valeur et son gradient par rapport au trois variables :

        \begin{align*}P & = a \times x = 8, \\\frac{\partial P}{\partial (x,a,b)} & = a \times \frac{\partial x}{\partial (x,a,b)} + x \times \frac{\partial a}{\partial (x,a,b)} = (4,2,0).\end{align*}

  3. Puis, on passe au nƓud S :

        \begin{align*}S & = P + b =15, \\\frac{\partial S}{\partial (x,a,b)} & = \frac{\partial P}{\partial (x,a,b)} + \frac{\partial b}{\partial (x,a,b)} = (4,2,1).\end{align*}

  4. Enfin, pour le nƓud C :

        \begin{align*}C & = S^2 =225, \\\frac{\partial C}{\partial (x,a,b)} &= 2 \times S \times \frac{\partial S}{\partial (x,a,b)} = (120,60,30).\end{align*}

Ce qui permet d’en dĂ©duire le gradient :

    \[\frac{\partial f}{\partial x} (2,4,7) = 120, \quad \frac{\partial f}{\partial a} (2,4,7) = 60, \quad \frac{\partial f}{\partial b} = 30.\]

Le schémas suivant résume les calculs.

Rendered by QuickLaTeX.com

Fig. 3 : Illustration de l’algorithme Feedforward sur la fonction f(x,a,b) = (x \times a+b)^2 pour calculer le gradient en x=2, a=4 et b=7.

Voilà, comment calculer un gradient par Feedforward👍.

Comment calculer le gradient avec la Backpropagation

Tu viens de voir comment calculer un gradient par Feedforward. Mais cette mĂ©thode n’est pas optimale et est plus coĂ»teuse que la Backpropagation. En effet dans la mĂ©thode Feedforward, pour chaque nƓud on doit calculer un gradient, qui est un vecteur de taille Ă©gale au nombre de paramĂštres. Alors que dans Backpropagation, il suffit seulement de calculer la dĂ©rivĂ©e partielle par rapport Ă  une seule valeur, ce qui donne un nombre et non pas un vecteur !

L’algorithme Backpropagation se dĂ©roule de la maniĂšre suivante :

  1. On applique l’algorithme Feedforward pour calculer la valeur de tous les nƓuds (seulement la valeur, et non pas le gradient).
  2. Ensuite on parcourt les nƓuds dans le sens inverse, pour calculer la dĂ©rivĂ©e partielle de f par rapport au nƓud.

Illustrons cette algorithme toujours sur l’exemple f prĂ©cĂ©dent.

  1. On applique l’algorithme Feedforward. Ce qui donne x=2, a=4, b=7, P=8, S=15, C=225.
  2. Ensuite on parcourt les nƓuds Ă  partir de la fin pour calculer la dĂ©rivĂ©e partielle de f par rapport au nƓud. Ce qui donne en commençant par C, puique C = f :

        \[\frac{\partial f}{\partial C} = 1.\]

  3. Ensuite, passe au nƓud S:

        \[\frac{\partial f}{\partial S} = \frac{\partial f}{\partial C} \times \frac{\partial C}{\partial S} = \frac{\partial f}{\partial C} \times 2 S = 30.\]

  4. Ensuite on passe aux nƓuds b et P :

        \begin{align*}\frac{\partial f}{\partial b}  & = \frac{\partial f}{\partial S} \times \frac{\partial S}{\partial b} = \frac{\partial f}{\partial S} \times  1 = 30,\\\frac{\partial f}{\partial P}  & = \frac{\partial f}{\partial S} \times \frac{\partial S}{\partial P} = \frac{\partial f}{\partial S} \times  1 = 30.\end{align*}

  5. Enfin on passe aux nƓuds x et a :

        \begin{align*}\frac{\partial f}{\partial x}  & = \frac{\partial f}{\partial P} \times \frac{\partial P}{\partial x} = \frac{\partial f}{\partial P} \times a = 120,\\ \frac{\partial f}{\partial a}  & = \frac{\partial f}{\partial P} \times \frac{\partial P}{\partial a} = \frac{\partial f}{\partial P} \times x = 60.\end{align*}

Ainsi on retrouve bien mĂȘmes valeurs qu’avec la mĂ©thode Feedforward 😋.

A noter que pour calculer les valeurs des dĂ©rivĂ©es partielles de chaque nƓud, on a besoin des valeurs des nƓuds parents, d’oĂč la nĂ©cessitĂ© de faire Feedforward.

Rendered by QuickLaTeX.com

Fig. 4 : Backpropagation sur la fonction f(x,a,b) = (x \times a+b)^2 pour calculer le gradient en x=2, a=4 et b=7.

Pour finir, le calcul est illustré par le schémas suivant.

VoilĂ  maintenant tu es capable de calculer un gradient Ă  l’aide de la Backpropagation😀.

Mot de la fin

Si cette article t’a aidĂ© ou bien si tu as des questions n’hĂ©site pas Ă  le dire en commentaire 👌.

Concernant son utilisation sur les rĂ©seaux de neurones, il y a une chose Ă  savoir. Dans cette prĂ©sentation, j’ai traitĂ© le cas oĂč les rĂ©sultats des nƓuds sont des nombres. Or on peut gĂ©nĂ©raliser au cas oĂč les rĂ©sultats des nƓuds sont des vecteurs (ou mĂȘme des tenseurs). Tout se passe de la mĂȘme maniĂšre, Ă  part que les valeurs et les dĂ©rivĂ©es partielles ne sont plus des nombres mais des vecteurs. C’est le cas de l’implĂ©mentation par Tensorflow et PyTorch: chaque nƓud est une couche du rĂ©seau (c-Ă -d une liste de neurones) et les opĂ©rations entre les nƓuds sont des opĂ©rations matricielles.

Catégories : Deep LearningMathématiques

2 commentaires

Pascal · 27 fĂ©vrier 2023 Ă  19h21

Merci pour ces explications trĂšs pĂ©dagogiques ! Je suis arrivĂ© sur votre site en faisant une recherche sur l’intĂ©rĂȘt de la back propagation par rapport Ă  la forward propagation. C’est clair maintenant.

Je pense qu’il y a une petite erreur dans le dessin sur la forward-propagation oĂč le rĂ©sultat final (60, 30, 15) n’est pas celui indiquĂ© dans le texte (120, 60, 30).

    Auguste Hoang · 13 mars 2023 Ă  0h29

    Bonjour Pascal,
    Il y a effectivement une erreur sur le dessin.
    Je l’ai corrigĂ©.
    Merci beaucoup pour ton commentaire !

Laisser un commentaire

Le guide du calcul différentiel pour le Deep-Learning

En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning.

Merci pour votre demande de recevoir le cadeau ! Vous allez tout de suite recevoir le lien de téléchargement dans votre boßte email. Si vous n'avez pas reçu l'email d'ici quelques minutes, pensez à regarder vos "spams".

Le guide du calcul différentiel pour le Deep-Learning

En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning.

Merci pour votre demande de recevoir le cadeau ! Vous allez tout de suite recevoir le lien de téléchargement dans votre boßte email. Si vous n'avez pas reçu l'email d'ici quelques minutes, pensez à regarder vos "spams".

Le guide du calcul différentiel pour le Deep-Learning

En cadeau, recevez par email le guide du calcul différentiel pour apprendre du Deep-Learning.

Merci pour votre demande de recevoir le cadeau ! Vous allez tout de suite recevoir le lien de téléchargement dans votre boßte email. Si vous n'avez pas reçu l'email d'ici quelques minutes, pensez à regarder vos "spams".