Réponses:
Première note: vous devriez également diviser également par l'écart-type de chaque valeur de caractéristique (pixel). La soustraction de la moyenne centre l'entrée à 0 et la division par l'écart-type fait que toute valeur d'entité mise à l'échelle le nombre d'écarts-types loin de la moyenne.
Pour répondre à votre question: considérez comment un réseau de neurones apprend ses poids. Les C (NN) apprennent en ajoutant continuellement des vecteurs d'erreur de gradient (multipliés par un taux d'apprentissage) calculés à partir de la rétropropagation vers diverses matrices de poids à travers le réseau au fur et à mesure que des exemples d'apprentissage sont passés.
La chose à noter ici est le "multiplié par un taux d'apprentissage".
Si nous n'échelonnions pas nos vecteurs d'apprentissage d'entrée, les plages de nos distributions de valeurs d'entités seraient probablement différentes pour chaque entité, et donc le taux d'apprentissage entraînerait des corrections dans chaque dimension qui différeraient (proportionnellement parlant) les unes des autres. Nous pourrions être en train de trop compenser une correction dans une dimension de poids tout en sous-compensant dans une autre.
Ceci n'est pas idéal car nous pourrions nous retrouver dans un état oscillant (incapable de se concentrer sur un meilleur maximum dans l'espace des coûts (poids)) ou dans un état lent (se déplaçant trop lentement pour atteindre un meilleur maximum).
Il est bien sûr possible d'avoir un taux d'apprentissage par poids, mais c'est encore plus d'hyperparamètres à introduire dans un réseau déjà compliqué qu'il faudrait aussi optimiser pour trouver. Les taux d'apprentissage sont généralement des scalaires.
Ainsi, nous essayons de normaliser les images avant de les utiliser comme entrée dans l'algorithme NN (ou tout autre gradient).
(image - image.mean()) / (image.std() + 1e-8)