Rétropropagation expliquée pas à pas
Le gradient calculé entièrement à la main sur un réseau de deux neurones, avec les nombres, puis vérifié par autograd et par différences finies.
Rétropropagation expliquée pas à pas
perte.backward(). Un appel, aucun argument, et les dérivées de plusieurs millions de paramètres apparaissent. C'est la ligne la plus utile de PyTorch et c'est aussi celle que le plus grand nombre de gens écrivent sans savoir ce qu'elle fait. Tant que tout fonctionne, l'ignorance est confortable.
Elle cesse de l'être au premier problème sérieux. Pourquoi le gradient de la première couche est-il un million de fois plus petit que celui de la dernière ? Pourquoi ce nan apparaît-il à la troisième itération et pas à la première ? Pourquoi ce modèle qui partage un encodeur entre deux têtes lève-t-il « Trying to backward through the graph a second time » ? Aucune de ces questions ne se résout par essais et erreurs. Elles se résolvent en sachant quelle quantité circule, dans quel sens, et ce qui la multiplie à chaque étape.
Cette leçon fait donc quelque chose d'inhabituel : elle calcule un gradient entièrement à la main, avec des nombres décimaux, sur un réseau assez petit pour qu'aucune étape ne soit cachée — une entrée, un neurone caché, un neurone de sortie, quatre paramètres. Ensuite elle demande à autograd de refaire le même calcul et compare les chiffres. Puis elle vérifie une troisième fois par différences finies, une technique de contrôle que les praticiens utilisent réellement pour valider une couche écrite à la main.