0 votes
par dans Séquence 7
Bonjour !

Est-ce ce que c'est le .backwrad qui calcule les gradients ? Et si oui comment sait-il de quelles variables faut-il calculer le gradient ?

Notamment dans lexemple ou on a

x=x**2 et z=x**3 puis r=y+z et r.backward ce qui nous donne le x.grad

Comment on remonte au x par rapport au r ?

1 Réponse

0 votes
par Vétéran du GPU 🐋 (48.7k points)
sélectionné par
 
Meilleure réponse
Le .backward calcule le gradient et le stocke dans l'attribut .grad. Il calcule le gradient de toutes les variables dont l'attribut requires_grad_ est à True. Il continue reçuejusqu'à n'avoir dans son graphe que des variables qui ne veulent pas de grad, ou l'ont déjà.
par
Merci beaucoup !
Du coup à chaque .backward on écrase les .grad précédents ?
par Vétéran du GPU 🐋 (48.7k points)
Non, à chaque backward, on accumule les gradients (on fait la somme).
Pour pytorch, on supprime en appelant optimizer.zero_grad(). On fait ça entre chaque batch.
Ce système permet de faire du "gradient accumulation". Si on ne fait pas le zero_grad() entre deux mini-batchs alors on somme leurs gradients, comme si ils formaient un gros batch. C'est intéressant lorsqu'un batch ne tient pas entièrement en mémoire, ça permet de le calculer en deux fois.
...