Pourquoi devons-nous normaliser l'entrée d'un réseau de neurones artificiels?


151

C'est une question principale, concernant la théorie des réseaux de neurones:

Pourquoi devons-nous normaliser l'entrée d'un réseau de neurones?

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

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


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

Réponses:


101

C'est bien expliqué ici .

Si les variables d'entrée sont combinées linéairement, comme dans un MLP [perceptron multicouche], alors il est rarement strictement nécessaire de normaliser les entrées, du moins en théorie. La raison en est que toute remise à l'échelle d'un vecteur d'entrée peut être efficacement annulée en modifiant les poids et biais correspondants, vous laissant exactement les mêmes résultats que vous aviez auparavant. Cependant, il existe une variété de raisons pratiques pour lesquelles la normalisation des intrants peut accélérer la formation et réduire les risques de rester coincé dans les optima locaux. En outre, la décroissance du poids et l'estimation bayésienne peuvent être effectuées plus facilement avec des entrées standardisées.


2
Salut, Dans les MLP, la standardisation des fonctionnalités tout en utilisant un taux d'apprentissage constant ne peut-elle pas entraîner une sur / sous-compensation dans les corrections de rétropropagation pour différentes dimensions? Je me demande à partir du post suivant si cela est exclusif aux CNN, ou si les MLP pourraient partager ce problème: stats.stackexchange.com/questions/185853
Austin

Problème: Option de descente de gradient. le processus peut prendre beaucoup plus de temps. Pourquoi? Lorsque les caractéristiques sont d'échelle différente (x1 = 0-1 et x2 = 0..1000), la surface de la fonction d'erreur peut devenir allongée. Signification: différentes échelles pour différentes gradations (w1, w2). Mais le taux d'apprentissage est le MÊME pour tous les dims -> les pas de dim allongé (w2) sont très petits jusqu'à ce qu'ils atteignent le minimum local. Problème: Impossible d'incorporer LR, car il sautera le min local dans l'autre dim (w1). Voir la démo sur youtube.com/watch?reload=9&v=UIp2CMI0748
Dekel

Voici un exemple linéaire, où les choses vont très mal sans mise à l'échelle: stackoverflow.com/q/59319643 . Une idée pourquoi?
AlwaysLearning

62

Dans les réseaux de neurones, il est judicieux non seulement de normaliser les données, mais également de les mettre à l'échelle. Ceci est destiné à une approche plus rapide des minima globaux à la surface d'erreur. Voir les images suivantes: surface d'erreur avant et après normalisation

surface d'erreur avant et après la mise à l'échelle

Les photos sont tirées du cours sur les réseaux de neurones. L'auteur du cours est Geoffrey Hinton.


14
Il aurait été gentil de votre part de créditer l'auteur du graphique que vous avez publié. Le graphique était clairement tiré du cours de coursera de Geoffrey Hinton .
Ricardo Cruz

5
J'ai trouvé cette vidéo très utile pour expliquer le diagramme ci-dessus, ce qui en soi n'était pas évident pour moi.
chris838

21

Certaines entrées de NN peuvent ne pas avoir une plage de valeurs «naturellement définie». Par exemple, la valeur moyenne peut être lente, mais en augmentation continue avec le temps (par exemple, un certain nombre d'enregistrements dans la base de données).

Dans ce cas, l'introduction de cette valeur brute dans votre réseau ne fonctionnera pas très bien. Vous apprendrez à votre réseau les valeurs de la partie inférieure de la plage, tandis que les entrées réelles proviendront de la partie supérieure de cette plage (et très probablement au-dessus de la plage, avec laquelle le réseau a appris à travailler).

Vous devez normaliser cette valeur. Vous pouvez par exemple indiquer au réseau de combien la valeur a changé depuis l'entrée précédente. Cet incrément peut généralement être défini avec une probabilité élevée dans une plage spécifique, ce qui en fait une bonne entrée pour le réseau.


Belle astuce sur la normalisation sur l'ensemble d'entrées précédent. Cela évite à l'utilisateur de définir un facteur de normalisation arbitraire. Cependant, je soupçonne que le réseau s'entraînera plus précisément si le facteur de normalisation est une constante globale appliquée à chaque vecteur d'entrée.
davide

11

En regardant le réseau neuronal de l'extérieur, c'est juste une fonction qui prend quelques arguments et produit un résultat. Comme pour toutes les fonctions, il a un domaine (c'est-à-dire un ensemble d'arguments juridiques). Vous devez normaliser les valeurs que vous souhaitez transmettre au réseau neuronal afin de vous assurer qu'il se trouve dans le domaine. Comme pour toutes les fonctions, si les arguments ne sont pas dans le domaine, le résultat n'est pas garanti approprié.

Le comportement exact du réseau de neurones sur des arguments en dehors du domaine dépend de la mise en œuvre du réseau de neurones. Mais globalement, le résultat est inutile si les arguments ne sont pas dans le domaine.


16
Si vous prenez une fonction d'activation habituelle (ReLu ou Sigmoid), le domaine est toujours tout l'espace R ^ n. Cela ne peut donc pas être la raison de normaliser les données.
Joker123

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

4

Il y a 2 raisons pour lesquelles nous devons normaliser les caractéristiques d'entrée avant de les alimenter au réseau neuronal:

Raison 1 : Si un Featuredans le Datasetest à grande échelle par rapport aux autres, alors cette fonctionnalité à grande échelle devient dominante et en conséquence, les prédictions du réseau neuronal ne seront pas exactes.

Exemple : Dans le cas des données sur les employés, si nous considérons l'âge et le salaire, l'âge sera un nombre à deux chiffres tandis que le salaire peut être de 7 ou 8 chiffres (1 million, etc.). Dans ce cas, le salaire dominera la prédiction du réseau neuronal. Mais si nous normalisons ces caractéristiques, les valeurs des deux entités se situeront dans la plage de (0 à 1).

Raison 2 : La propagation frontale des réseaux de neurones implique le produit scalaire de poids avec des caractéristiques d'entrée. Ainsi, si les valeurs sont très élevées (pour les données d'image et non-image), le calcul de la sortie prend beaucoup de temps de calcul ainsi que de mémoire. Il en va de même lors de la propagation arrière. Par conséquent, le modèle converge lentement, si les entrées ne sont pas normalisées.

Exemple : Si nous effectuons une classification d'image, la taille de l'image sera très énorme, car la valeur de chaque pixel va de 0 à 255. La normalisation dans ce cas est très importante.

Ci-dessous sont mentionnés les exemples où la normalisation est très importante:

  1. K-Means
  2. K-plus proches-voisins
  3. Analyse en composantes principales (ACP)
  4. Descente graduelle

2

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

Considérez 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 / sortie non normalisée dans leurs formes brutes, soit de normaliser les deux pour éliminer A. Évidemment, cette hypothèse de linéarité est violé dans les tâches de classification, ou presque n'importe quelle tâche qui génère 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 / de l'algorithme du réseau, mais également du préalable statistique pour l'entrée et la sortie.

De plus, NN est souvent implémenté pour résoudre des problèmes très difficiles à la manière d'une boîte noire, ce qui signifie que le problème sous-jacent peut avoir une formulation statistique très médiocre, ce qui rend difficile l'évaluation de l'impact de la normalisation, provoquant l'avantage technique (devenir adaptable) dominer son impact sur les statistiques.

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


2

Lorsque vous utilisez des entités d'entrée non normalisées, la fonction de perte est susceptible d'avoir des vallées très allongées. Lors de l'optimisation avec la descente de gradient, cela devient un problème car la pente sera raide par rapport à certains des paramètres. Cela conduit à de grandes oscillations dans l'espace de recherche, car vous rebondissez entre des pentes raides. Pour compenser, vous devez stabiliser l'optimisation avec de faibles taux d'apprentissage.

Considérez les fonctionnalités x1 et x2, où vont respectivement de 0 à 1 et de 0 à 1 million. Il s'avère que les rapports pour les paramètres correspondants (par exemple, w1 et w2) seront également grands.

La normalisation tend à rendre la fonction de perte plus symétrique / sphérique. Celles-ci sont plus faciles à optimiser car les dégradés ont tendance à pointer vers le minimum global et vous pouvez faire des pas plus importants.


1

La raison pour laquelle la normalisation est nécessaire est que si vous regardez comment une étape adaptative se déroule à un endroit dans le 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 direction dans le 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 bouger sans tourner et combien doit-elle tourner en réponse à ce point d'entraînement? Cela n'a aucun sens d'avoir une procédure d'adaptation modifiée dans différentes parties du domaine! Une normalisation est donc nécessaire pour réduire la différence dans le résultat de l'entraînement. Je n'ai pas écrit cela, mais vous pouvez simplement regarder les mathématiques pour une fonction linéaire simple et comment elle est entraînée par un point d'entraînement à deux endroits différents. Ce problème a peut-être été corrigé à certains endroits, mais je ne les connais pas. Dans les ALN, le problème a été corrigé et je peux vous envoyer un article si vous écrivez à wwarmstrong AT shaw.ca


-9

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 de couche cachée, par exemple une porte OU, mais si nous avons des données non séparables linéairement, nous devons utiliser une couche cachée, par exemple une porte logique ExOR. Le nombre de nœuds pris à n'importe quelle couche dépend du degré de validation croisée de notre sortie.

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.