Graphes de calcul

Calcul multivarié depuis les premiers principes

Une seule structure de données organise tout ce qui précède dans les deux dernières leçons : le graphe de calcul. Chaque opération arithmétique d'un modèle (addition, multiplication, produit matriciel, activation) devient un nœud dans un graphe orienté. C'est grâce à ce graphe que PyTorch, JAX et TensorFlow calculent les gradients automatiquement.

L'entraînement parcourt le graphe en deux balayages. La passe avant s'écoule de gauche à droite, calculant et mettant en cache la valeur de chaque nœud. La passe arrière s'écoule de droite à gauche, utilisant la règle de dérivation en chaîne pour pousser le gradient de la perte vers chaque entrée, un nœud à la fois.

L'idée qui rend cela évolutif : chaque nœud n'a besoin de connaître que sa propre dérivée locale. Pour envoyer le gradient en arrière à travers un nœud, multipliez le gradient entrant (venu d'au-dessus) par la jacobienne locale du nœud (comment sa sortie dépend de ses entrées). Aucun nœud n'a jamais besoin de la vue globale ; des règles locales enchaînées produisent le gradient total exact.

Où cela apparaît en MLUn graphe de calcul est la différentiation automatique. Quand vous écrivez un modèle en PyTorch, chaque opération enregistre silencieusement un nœud ; appeler loss.backward() parcourt le graphe à l'envers, multipliant les jacobiennes locales via la règle de dérivation en chaîne, et dépose ∂loss/∂w sur chaque paramètre. Vous n'écrivez jamais une dérivée à la main, et cette seule commodité, des…
▶ Graphes de calcul
← Règle de dérivation en chaîne : forme matriciellePoints critiques dans Rⁿ →