Aller au contenu principal

Leçon 3 — Calcul différentiel

Si l'algèbre linéaire dit comment les données sont écrites, le calcul différentiel dit comment on apprend. Une seule notion suffit à comprendre l'entraînement de n'importe quel modèle moderne : la dérivée, comprise comme une pente.

La dérivée est une pente

Oubliez les règles de dérivation apprises à l'école. Retenez ceci : la dérivée d'une fonction en un point répond à la question « si j'augmente légèrement l'entrée, la sortie monte-t-elle ou descend-elle, et à quelle vitesse ? »

  • Dérivée positive et grande : la sortie monte fort.
  • Dérivée négative : la sortie descend.
  • Dérivée nulle : vous êtes sur un plat — un sommet, un fond, ou un palier.

C'est exactement l'information dont on a besoin pour apprendre. Voici pourquoi.

Le problème de l'entraînement, reformulé

Un modèle possède des paramètres — les nombres dans les matrices de la leçon 2. Pour un réglage donné de ces paramètres, on peut calculer une erreur : la fonction de perte, qui mesure d'un seul nombre à quel point le modèle se trompe sur les exemples d'entraînement.

L'entraînement consiste donc à répondre à une question d'optimisation : quel réglage des paramètres rend cette erreur la plus petite possible ?

Une recherche exhaustive est hors de question. Avec seulement dix paramètres et dix valeurs testées pour chacun, il y aurait dix milliards de combinaisons. Un réseau moderne en compte des milliards, de paramètres.

La dérivée résout le problème sans exploration : elle indique, pour chaque paramètre, dans quel sens le déplacer pour que l'erreur diminue. On applique un petit déplacement dans ce sens, on recalcule, on recommence.

Le gradient : toutes les pentes à la fois

Quand la fonction dépend de plusieurs paramètres — c'est toujours le cas — on calcule une dérivée par paramètre. La collection de toutes ces dérivées s'appelle le gradient.

Le gradient est donc un vecteur, de même longueur que le nombre de paramètres, et il possède une propriété remarquable : il pointe dans la direction où l'erreur augmente le plus vite. Pour apprendre, on va donc exactement dans le sens opposé. D'où le nom : descente de gradient.

L'analogie du brouillard

Vous êtes à flanc de colline dans un brouillard épais. Vous voulez rejoindre le fond de la vallée et vous ne voyez rien. Ce que vous pouvez faire, c'est sentir la pente sous vos pieds et faire un pas dans la direction descendante la plus forte. Puis tâter à nouveau, et recommencer.

Cette analogie est fidèle, y compris dans ses défauts, qui sont exactement les difficultés réelles de l'entraînement.

Le taux d'apprentissage, et les deux façons d'échouer

La taille du pas s'appelle le taux d'apprentissage, et c'est le réglage le plus important de tout l'entraînement.

Pas trop petits : vous descendez, mais si lentement que l'entraînement prendrait des semaines. On croit alors que le modèle ne fonctionne pas, alors qu'il est simplement trop prudent.

Pas trop grands : vous enjambez la vallée à chaque enjambée et vous vous retrouvez plus haut sur le versant opposé. L'erreur oscille, ou explose vers l'infini. C'est le symptôme le plus courant chez les débutants, et le premier réflexe correct est de diviser le taux d'apprentissage par dix.

Symptôme observéCause probableRéaction
La perte ne bouge presque pastaux trop petitl'augmenter
La perte oscille sans descendretaux trop grandle diviser par dix
La perte devient « NaN »taux beaucoup trop grand, ou instabilité numériquele réduire fortement
La perte descend puis remontesurapprentissage qui commencearrêter plus tôt, régulariser
Ce que font les optimiseurs modernes

Adam, AdamW et leurs variantes automatisent une partie de cet arbitrage : ils adaptent la taille du pas paramètre par paramètre en fonction de l'historique récent des gradients. Cela rend l'entraînement beaucoup plus robuste, et c'est pourquoi on n'utilise presque jamais la descente de gradient dans sa forme la plus simple. Le taux d'apprentissage reste malgré tout à choisir.

Le brouillard, et les minima locaux

Dans l'analogie, vous ne voyez pas le paysage entier. Vous ne connaissez que la pente à l'endroit où vous êtes. Vous pouvez donc parfaitement atterrir dans un petit creux au flanc de la colline, où la pente est nulle dans toutes les directions, sans être au fond de la vallée. C'est un minimum local.

Ce point inquiétait beaucoup les chercheurs dans les années 1990. En pratique, sur les réseaux de très grande dimension, le problème s'est révélé bien moins grave que redouté : en dimension énorme, il est rare qu'un point soit un creux dans toutes les directions à la fois, et les creux rencontrés donnent le plus souvent des performances comparables. On ne cherche pas l'optimum absolu, on cherche une solution assez bonne, et il y en a beaucoup.

Deux conséquences pratiques cependant : deux entraînements identiques peuvent aboutir à des modèles différents, et l'initialisation aléatoire des paramètres a une influence réelle sur le résultat.

La rétropropagation, en une phrase

Reste une question technique : dans un réseau à cinquante couches, comment calcule-t-on la dérivée de l'erreur par rapport à un paramètre situé dans la première couche, alors que son effet traverse toutes les suivantes ?

La réponse est la règle de dérivation en chaîne, qui dit comment composer les pentes le long d'une chaîne de fonctions. Appliquée à un réseau, elle donne la rétropropagation : on calcule l'erreur à la sortie, puis on remonte couche par couche en distribuant à chacune sa part de responsabilité, jusqu'à l'entrée.

L'algorithme a été popularisé en 1986 et il est resté le socle de tout l'apprentissage profond depuis. Ce qui a changé en 2012, ce n'est pas lui, ce sont les données et le matériel.

Ce que vous n'aurez jamais à faire

Écrire ces dérivées. Les bibliothèques modernes pratiquent la dérivation automatique : elles enregistrent les opérations que vous effectuez et savent les remonter toutes seules. En PyTorch, un unique appel déclenche le calcul de tous les gradients. Comprendre ce qui se passe reste utile pour diagnostiquer ; le calculer soi-même, jamais.

Les gradients qui disparaissent

Un dernier effet, parce qu'il explique une partie de l'histoire du domaine. En remontant à travers de nombreuses couches, les pentes se multiplient entre elles. Si chaque facteur est inférieur à un, le produit devient minuscule : les premières couches reçoivent un gradient quasi nul et n'apprennent plus. C'est le problème du gradient qui s'évanouit.

Il a bloqué les réseaux profonds pendant des années. Trois inventions l'ont largement résolu : la fonction d'activation ReLU, la normalisation par lots, et les connexions résiduelles qui offrent au gradient un chemin direct vers les premières couches. C'est ce qui a rendu possibles les réseaux à cent couches et plus.


En trois phrases

Une dérivée indique dans quel sens et à quelle vitesse la sortie d'une fonction change quand on modifie son entrée, ce qui donne exactement l'information nécessaire pour réduire une erreur. Le gradient rassemble ces pentes pour tous les paramètres, et l'entraînement consiste à faire de petits pas dans le sens opposé, la taille du pas étant le réglage le plus critique. La rétropropagation applique la règle de dérivation en chaîne pour distribuer la responsabilité de l'erreur couche par couche, et les bibliothèques modernes s'en chargent entièrement à votre place.


SuiteLeçon 4 : les probabilités, ou ce que la réponse signifie →