184 votes

Pourquoi devons-nous normaliser l'entrée d'un réseau neuronal artificiel ?

Pourquoi doit-on normaliser l'entrée d'un réseau neuronal ?

Je comprends que parfois, lorsque par exemple les valeurs d'entrée sont non-numériques, une certaine transformation doit être effectuée, mais lorsque nous avons une entrée numérique ? Pourquoi les nombres doivent-ils être dans un certain intervalle ?

Que se passera-t-il si les données ne sont pas normalisées ?

1 votes

Je vote pour fermer cette question comme hors sujet car elle appartient à Stats SE ou AI SE.

9voto

Oswald Points 18625

Vu de l'extérieur, le réseau neuronal n'est qu'une fonction qui prend des arguments et produit un résultat. Comme toutes les fonctions, elle possède un domaine (c'est-à-dire un ensemble d'arguments légaux). Il faut normaliser les valeurs à transmettre au réseau neuronal afin de s'assurer qu'elles sont comprises dans le domaine. Comme pour toutes les fonctions, si les arguments ne sont pas dans le domaine, le résultat n'est pas garanti comme étant approprié.

Le comportement exact du réseau neuronal sur des arguments extérieurs au domaine dépend de l'implémentation du réseau neuronal. Mais globalement, le résultat est inutile si les arguments ne sont pas dans le domaine.

25 votes

Si vous prenez une fonction d'activation habituelle (ReLu ou Sigmoïde), le domaine est toujours l'espace entier R^n. Cela ne peut donc pas être la raison pour laquelle il faut normaliser les données.

3 votes

Cela n'explique pas non plus pourquoi les images sont normalisées, puisqu'elles ont déjà un domaine de 0 à 255.

2voto

shouldsee Points 341

Je crois que la réponse dépend du scénario.

Considérons le NN (réseau neuronal) comme un opérateur F, de sorte que F(entrée) = sortie . Dans le cas où cette relation est linéaire, de sorte que F(A * entrée) = A * sortie alors vous pouvez choisir soit de laisser l'entrée et la sortie non normalisées dans leur forme brute, soit de les normaliser toutes les deux pour éliminer A. Il est évident que cette hypothèse de linéarité est violée dans les tâches de classification, ou dans presque toutes les tâches qui produisent une probabilité, où F(A * entrée) = 1 * sortie

En pratique, la normalisation permet aux réseaux non adaptables d'être adaptables, ce qui est crucial pour les expérimentateurs/programmeurs. Néanmoins, l'impact précis de la normalisation dépendra non seulement de l'architecture/algorithme du réseau, mais aussi de la priorité statistique pour l'entrée et la sortie.

De plus, les réseaux neuronaux sont souvent mis en œuvre pour résoudre des problèmes très difficiles dans une boîte noire, ce qui signifie que le problème sous-jacent peut avoir une formulation statistique très pauvre, ce qui rend difficile l'évaluation de l'impact de la normalisation et fait que l'avantage technique (devenir adaptable) domine sur son impact sur les statistiques.

Au sens statistique, la normalisation supprime la variation qui est considérée comme non causale dans la prédiction de la sortie, afin d'empêcher le NN d'apprendre cette variation comme un prédicteur ( NN ne voit pas cette variation et ne peut donc pas l'utiliser. ).

1voto

La raison pour laquelle la normalisation est nécessaire est que si vous regardez comment une étape adaptative se déroule à un endroit du domaine de la fonction, et que vous transportez simplement le problème à l'équivalent de la même étape traduite par une grande valeur dans une certaine direction du domaine, alors vous obtenez des résultats différents. Cela se résume à la question de l'adaptation d'une pièce linéaire à un point de données. Dans quelle mesure la pièce doit-elle se déplacer sans tourner et dans quelle mesure doit-elle tourner en réponse à ce point d'apprentissage ? Cela n'a aucun sens d'avoir une procédure d'adaptation différente dans différentes parties du domaine ! Une normalisation est donc nécessaire pour réduire la différence dans le résultat de l'apprentissage. Je ne l'ai pas encore écrit, mais il suffit de regarder les mathématiques d'une fonction linéaire simple et la façon dont elle est formée par un point d'apprentissage à deux endroits différents. Ce problème a peut-être été corrigé dans certains endroits, mais je ne les connais pas. Dans les ALN, le problème a été corrigé et je peux vous envoyer un document si vous écrivez à wwarmstrong AT shaw.ca.

0voto

Apurva07 Points 1

À un niveau élevé, si vous observez où la normalisation/standardisation est principalement utilisée, vous remarquerez que, chaque fois qu'il y a une différence de magnitude dans le processus de construction du modèle, il devient nécessaire de standardiser les entrées afin de s'assurer que les entrées importantes de faible magnitude ne perdent pas leur importance à mi-chemin du processus de construction du modèle.

exemple :

(3-1)^2+(1000-900)^2 (1000-900)^2

Ici, (3-1) n'apporte presque rien au résultat et donc l'entrée correspondant à ces valeurs est considérée comme futile par le modèle.

Considérez ce qui suit :

  1. Le clustering utilise la distance euclidienne ou d'autres mesures de distance.
  2. Les NNs utilisent un algorithme d'optimisation pour minimiser la fonction de coût (ex. - MSE).

La mesure de distance (clustering) et la fonction de coût (NNs) utilisent toutes deux la différence de magnitude d'une manière ou d'une autre et, par conséquent, la normalisation garantit que la différence de magnitude ne commande pas des paramètres d'entrée importants et que l'algorithme fonctionne comme prévu.

-14voto

Les couches cachées sont utilisées en fonction de la complexité de nos données. Si nous avons des données d'entrée qui sont linéairement séparables, nous n'avons pas besoin d'utiliser la couche cachée, par exemple la porte OU, mais si nous avons des données non linéairement séparables, nous devons utiliser la couche cachée, par exemple la porte logique ExOR. Le nombre de nœuds pris à chaque couche dépend du degré de validation croisée de notre sortie.

0 votes

La question était de savoir pourquoi les entrées doivent être normalisées, et non pourquoi les réseaux neuronaux ont des couches cachées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X