Vidéo : Qu’est-ce que la rétropropagation de gradient fait vraiment ? Le deep learning

Grant Sanderson • 3Blue1Brown • Boclips

Qu’est-ce que la rétropropagation de gradient fait vraiment ? Le deep learning

12:27

Transcription de vidéo

Ici, nous abordons la rétropropagation de gradient, l’algorithme derrière la façon d’apprentissage des réseaux de neurones. Après une brève récapitulation pour où nous en sommes, la première chose que je ferai est une révision intuitive de ce que fait réellement l’algorithme, sans aucune référence aux formules. Ensuite, pour ceux d’entre vous qui veulent plonger dans le calcul, la vidéo suivante aborde l’analyse qui est à l’origine de tout cela.

Si vous avez regardé les deux dernières vidéos ou si vous intervenez avec la bonne formation, alors vous saurez ce qu’est un réseau de neurones, et comment il transmet les informations. Ici nous faisons l’exemple classique de reconnaissance des chiffres manuscrits dont les valeurs de pixels sont introduites dans la première couche du réseau avec 784 neurones. Et j’ai montré un réseau avec deux couches cachées comportant chacune 16 neurones, et une couche de sortie de 10 neurones, indiquant le chiffre que le réseau choisit comme réponse. Je m’attends également à ce que vous compreniez la descente de gradient décrite dans la dernière vidéo. Et comment- ce que nous entendons par apprentissage c’est que nous voulons trouver quels poids et biais minimisent une fonction de coût donnée.

Un petit rappel, pour le coût d’un exemple d’entraînement unique, vous devez utiliser le résultat obtenu par le réseau avec le résultat que vous souhaitiez qu’il vous donne. Et vous ajoutez simplement les carrés des différences entre chaque composant. En faisant cela pour vos dizaines de milliers d’exemples d’entraînement, et en calculant la moyenne des résultats, vous obtenez le coût total du réseau. Et comme si cela ne suffisait pas, comme décrit dans la dernière vidéo, ce que nous cherchons c’est le gradient négatif de cette fonction de coût, qui vous indique comment modifier tous les poids et biais, de toutes ces connexions, afin de réduire le coût le plus efficacement possible.

La rétropropagation de gradient, qui est le sujet de cette vidéo, est un algorithme permettant de calculer ce gradient follement compliqué. Et l’idée principale de la dernière vidéo que je veux vraiment que vous reteniez bien en ce moment est que, puisque penser au vecteur de gradient en tant que direction en 13000 dimensions est, disons-le clairement, au-delà de notre imagination, il y a une autre façon pour y penser. L’importance de chaque composante ici vous indique la sensibilité de la fonction de coût à chaque poids et à chaque biais.

Par exemple, disons que vous suivez le processus que je vais décrire et que vous calculez le gradient négatif. Et la composante associée au poids sur cette arête ici est de 3.2, tandis que la composante associée à cette arête est de 0.1. Selon votre interprétation, le coût de la fonction est 32 fois plus sensible aux changements de ce premier poids. Donc, si vous deviez modifier légèrement cette valeur, cela entraînerait une modification du coût, et ce changement est 32 fois plus grand que ce que donnerait le même changement à ce second poids.

Personnellement, lorsque j’ai découvert la rétropropagation de gradient pour la première fois, je pense que l’aspect le plus déroutant était simplement la notation et l’indexation de tout cela. Mais une fois que vous découvrez ce que chaque partie de cet algorithme est réellement en train de faire, chaque effet individuel qu’il a est assez intuitif. C’est juste que de nombreux petits ajustements se superposent. Je vais donc commencer les choses ici par négliger totalement la notation, et passer à ces effets de chaque exemple d’entraînement sur les poids et les biais.

Étant donné que la fonction de coût implique la moyenne d’un coût par exemple sur des dizaines de milliers d’exemples d’entraînement, la manière dont nous ajustons les poids et les biais pour une seule étape de descente de gradient dépend également de chaque exemple. Ou plutôt, en principe il le faut. Mais pour des raisons d’efficacité informatique, nous allons voir plus tard une petite astuce pour vous éviter d’avoir besoin de consulter chaque exemple à chaque étape. Dans d’autres cas, pour l’instant, tout ce que nous allons faire est de centrer notre attention sur un seul exemple, cette image d’un deux. Quel effet cet exemple d’entraînement devrait-il avoir sur la manière dont les poids et les biais sont ajustés ?

Disons que nous sommes à un point où le réseau n’est pas encore bien formé. Donc, les activations dans la sortie vont paraître plutôt aléatoires, peut-être quelque chose comme 0.5 ; 0.8 ; 0.2, etc. Maintenant, nous ne pouvons pas changer directement ces activations. Nous n’avons d’influence que sur les poids et les biais. Mais il est utile de garder trace des ajustements que nous souhaitons avoir sur cette couche de sortie. Et puisque nous voulons que l’image soit classée comme un deux, nous voulons que cette troisième valeur soit poussée vers le haut, tandis que toutes les autres soient poussées vers le bas. De plus, la taille de ces coups de pouce devrait être proportionnelle à la distance qui sépare chaque valeur actuelle de sa valeur cible.

Par exemple, l’augmentation de l’activation du neurone numéro deux est en un sens plus importante que la diminution de l’activation du neurone numéro huit, ce qui est déjà assez proche de ce qui devrait être. Alors, zoomons davantage et concentrons-nous uniquement sur ce neurone, celui dont nous souhaitons augmenter l’activation. Rappelez-vous que cette activation est définie comme une somme pondérée de toutes les activations de la couche précédente, plus un biais, le tout remplacé en une fonction telle que la fonction Sigmoïde ou une fonction ReLU. Il existe donc trois voies différentes qui peuvent s’associer pour aider à augmenter cette activation. Vous pouvez augmenter le biais, les poids et les activations de la couche précédente.

En vous concentrant uniquement sur la manière dont les poids doivent être ajustés, remarquez comment les poids ont des niveaux d’influence différents. Les connexions avec les neurones les plus brillants de la couche précédente ont le plus grand effet, puisque ces poids sont multipliés par des valeurs d’activation plus grandes. Donc, si vous augmentiez l’un de ces poids, cela aurait une influence plus forte sur la fonction de coût ultime que d’augmenter les poids des connexions avec les neurones à gradateur, du moins en ce qui concerne cet exemple d’entraînement. N’oubliez pas que lorsque nous parlons de descente de gradient, nous ne nous intéressons pas seulement à savoir si chaque composant doit être poussé vers le haut ou vers le bas, mais nous nous intéressons à ceux qui donneront le maximum pour l’argent.

Cela rappelle d’ailleurs au moins quelque peu la théorie des neurosciences sur la façon d’apprentissage des réseaux biologiques de neurones. La théorie de Hebb, souvent résumée dans la phrase « des neurones qui s’excitent ensemble se lient entre eux ». Ici, les plus fortes augmentations de poids, le plus grand renforcement des connexions se produit entre les neurones les plus actifs et ceux dont nous souhaitons devenir plus actifs. En un sens, les neurones qui s’excitent en voyant un deux sont plus fortement liés à ceux qui s’excitent en pensant à un deux.

Pour être clair, je ne suis vraiment pas en mesure de dire, d’une manière ou d’autre, si les réseaux artificiels de neurones se comportent de la même manière que les cerveaux biologiques. Et cette idée qui unit les neurones qui s’excitent ensemble vient avec quelques astérisques significatifs. Mais, en la prenant comme une analogie très vague, je la trouve intéressante à noter. Bref, la troisième façon d’augmenter l’activation de ce neurone consiste à modifier toutes les activations de la couche précédente. À savoir, si tout ce qui est connecté à ce neurone de chiffre deux ayant un poids positif est devenu plus clair, et si tout ce qui est lié à un poids négatif est devenu plus sombre, alors ce neurone de chiffre deux deviendrait plus actif.

Et comme pour les changements de poids, vous obtiendrez le maximum pour votre argent en recherchant des changements proportionnels à la taille des poids correspondants. Bien entendu, nous ne pouvons pas influencer directement ces activations. Nous ne contrôlons que les poids et les biais. Mais comme pour la dernière couche, il est utile de tenir une note sur les modifications souhaitées. Mais rappelez-vous, en faisant un zoom arrière d’une étape, c’est ce que souhaite ce neurone de chiffre deux obtenu en sortie. N’oubliez pas que nous voulons également que tous les autres neurones de la dernière couche deviennent moins actifs. Et chacun de ces autres neurones de sortie a ses propres idées sur ce qui devrait arriver à l’avant-dernière couche.

Ainsi, le désir de ce neurone de chiffre deux s’ajoute aux désirs de tous les autres neurones de sortie quant à ce qui devrait arriver à cette avant-dernière couche, là encore, proportionnellement aux poids correspondants et proportionnellement à combien chacun de ces neurones doit changer. C’est ici que l’idée de propager en arrière entre en jeu. En additionnant tous ces effets souhaités, vous obtenez une liste des coups de pouce que vous voulez appliquer à l’avant-dernière couche. Et une fois que vous les avez, vous pouvez appliquer récursivement le même processus aux poids et biais correspondants qui déterminent ces valeurs, en répétant le même processus que je viens d’expliquer et en revenant en arrière sur le réseau.

Et en zoomant un peu plus en arrière, rappelez-vous qu’il s’agit de la façon dont un seul exemple d’entraînement souhaite pousser chacun de ces poids et biais. Si nous n’écoutions que ce que ce chiffre deux voulait, le réseau serait finalement incité à simplement classer toutes les images comme un deux. Donc, ce que vous faites est de suivre la même procédure de rétropropagation pour tous les autres exemples d’entraînement, en enregistrant comment chacun voudrait changer les poids et les biais. Et vous faites la moyenne de ces changements souhaités.

Cette collection ici de la moyenne des coups de pouce pour chaque poids et biais est, de façon générale, le gradient négatif de la fonction de coût mentionnée dans la dernière vidéo, ou au moins lui est proportionnelle. Je dis de façon générale parce que je dois encore être quantitativement précis sur ces coups de pouce. Mais si vous comprenez chacun des changements que je viens de mentionner, pourquoi certains sont proportionnellement plus grands que d’autres, et pourquoi ils doivent tous être additionnés ensemble, vous comprendrez les mécanismes de ce que la rétropropagation de gradient fait réellement.

En fait, dans la pratique, il faut beaucoup de temps aux ordinateurs pour additionner l’influence de chaque exemple d’entraînement, de chaque étape de descente de gradient. Donc, voici ce qui est couramment fait à la place. Vous mélangez de manière aléatoire vos données d’entraînement, puis vous les divisez en un ensemble de mini-groupes, chacun comportant disons 100 exemples d’entraînement. Ensuite, vous calculez une étape en fonction du mini-groupe. Ce ne sera pas le gradient réel de la fonction de coût, qui dépend de toutes les données d’entraînement, pas ce tout petit sous-ensemble. Ce n’est donc pas la descente la plus efficace. Mais chaque mini-groupe vous donne une assez bonne approximation. Et plus important encore, cela vous donne une vitesse de calcul significative.

Si vous deviez tracer la trajectoire de votre réseau sous la surface de coût correspondante, cela ressemblerait un peu à un homme ivre trébuchant sans but vers le bas d’une colline mais avec des pas rapides, plutôt qu’à un homme calculant minutieusement la direction exacte de chaque pas de descente vers le bas de la colline, avant de faire des pas très lents et très prudents dans cette direction. Cette technique est appelée descente de gradient stochastique. Il se passe beaucoup de choses ici. Alors, résumons nous-mêmes, d’accord ?

La rétropropagation est l’algorithme permettant de déterminer la manière dont un seul exemple d’entraînement veut pousser les poids et les biais, non seulement en termes de hausse ou de baisse, mais en termes des proportions relatives à ces changements qui entraîneront la diminution la plus rapide du coût. Une vraie étape de descente de gradient impliquerait de faire cela pour tous vos dizaines et milliers d’exemples d’entraînement, et de calculer la moyenne des changements souhaités. Mais c’est lent sur le plan informatique. Au lieu de cela, vous subdivisez les données de manière aléatoire en ces mini-groupes et calculez chaque étape par rapport à un mini-groupe. En parcourant à plusieurs reprises tous les mini-groupes, et en effectuant ces ajustements, vous convergerez vers un minimum local de la fonction de coût, ce qui signifie que votre réseau finira par faire un très bon travail sur les exemples d’entraînement.

Cela dit, chaque ligne de code nécessaire à la mise en œuvre de la rétropropagation de gradient correspond en réalité à quelque chose que vous avez vue, au moins de manière informelle. Mais parfois, savoir ce que fait le calcul ne représente que la moitié de la bataille, et la simple représentation de la notion est où tout devient déroutant et confus. Donc, pour ceux d’entre vous qui veulent aller plus loin, la vidéo suivante reprend les mêmes idées que celles présentées ici, mais en termes d’analyse de base, ce qui devrait, espérons-le, rendre le sujet un peu plus familier alors que vous le voyez dans d’autres ressources.

Avant cela, il convient de souligner que pour que cet algorithme fonctionne, et cela pour toutes sortes d’apprentissage automatique au-delà des réseaux neuronaux, il faut beaucoup de données d’entraînement. Dans notre cas, une chose qui fait des chiffres manuscrits un si bel exemple est l’existence de la base de données MNIST, avec tant d’exemples étiquetés par des humains. Donc un défi usuel pour ceux d’entre vous qui travaillent en apprentissage automatique est d’obtenir les données d’entraînement étiquetées dont vous avez réellement besoin, qu’il s’agisse de faire étiqueter des dizaines de milliers d’images ou d’autres types de données auxquelles vous pourriez avoir affaire.

Nagwa utilise des cookies pour vous garantir la meilleure expérience sur notre site. En savoir plus sur notre Politique de Confidentialité.