Pourquoi devons-nous normaliser les images avant de les mettre dans CNN?


Réponses:


34

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).


1
qu'en est-il des images en couleur? dois-je le faire pour chaque canal de couleur? cela ne gâcherait-il pas la distribution des couleurs?
user10024395

2
Croyez que vous êtes censé oui. Vous pouvez simplement faire quelque chose comme:(image - image.mean()) / (image.std() + 1e-8)
JohnAllen

Est-ce vraiment utile pour la formation? J'entraîne le détecteur d'objets, et à l'aide de ces fitlers, les images sont vraiment déroutantes, il est difficile de voir les objets que je détecte
Darlyn

C'est très utile pour la formation en termes d'apprentissage et de précision - ce n'est pas pour vous, c'est pour le modèle :) Vous voudrez peut-être sortir l'image non normalisée lorsque vous déboguez afin qu'elle apparaisse normale à vos yeux humains.
lollercoaster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.