La descente en pente ne fonctionne pas tout à fait comme vous l'avez suggéré, mais un problème similaire peut se produire.
Nous ne calculons pas la perte moyenne du lot, nous calculons les gradients moyens de la fonction de perte. Les gradients sont la dérivée de la perte par rapport au poids et dans un réseau neuronal, le gradient pour un poids dépend des entrées de cet exemple spécifique et il dépend également de nombreux autres poids dans le modèle.
Si votre modèle a 5 poids et que vous avez une taille de mini-lot de 2, vous pouvez obtenir ceci:
Exemple 1. Perte = 2, gradients=(1.5,−2.0,1.1,0.4,−0.9)
Exemple 2. Perte = 3, gradients=(1.2,2.3,−1.1,−0.8,−0.7)
La moyenne des gradients de ce mini-lot est calculée, ils sont (1.35,0.15,0,−0.2,−0.8)
L'avantage de la moyenne sur plusieurs exemples est que la variation du gradient est plus faible, de sorte que l'apprentissage est plus cohérent et moins dépendant des spécificités d'un exemple. Remarquez comment le gradient moyen pour le troisième poids est , ce poids ne changera pas cette mise à jour de poids, mais il sera probablement non nul pour les prochains exemples choisis qui sont calculés avec des poids différents.0
modifier en réponse aux commentaires:
Dans mon exemple ci-dessus, la moyenne des gradients est calculée. Pour une taille de mini-lot de où nous calculons la perte L i pour chaque exemple we et visons à obtenir le gradient moyen de la perte par rapport à un poids w j .kLjewj
∂L∂wj= 1k∑ki = 1∂Lje∂wj
Le code du didacticiel auquel vous avez lié dans les commentaires utilise Tensorflow pour minimiser la perte moyenne.
1k∑ki = 1Lje
Pour minimiser cela, il calcule les gradients de la perte moyenne par rapport à chaque poids et utilise la descente de gradient pour mettre à jour les poids:
∂L∂wj= ∂∂wj1k∑ki = 1Lje
La différenciation peut être apportée à l'intérieur de la somme, c'est donc la même chose que l'expression de l'approche dans mon exemple.
∂∂wj1k∑ki = 1Lje= 1k∑ki = 1∂Lje∂wj