Perché dobbiamo normalizzare l'input per una rete neurale artificiale?


151

È una domanda principale, per quanto riguarda la teoria delle reti neurali:

Perché dobbiamo normalizzare l'input per una rete neurale?

Capisco che a volte, quando ad esempio i valori di input sono non numerici, deve essere eseguita una certa trasformazione, ma quando abbiamo un input numerico? Perché i numeri devono essere in un certo intervallo?

Cosa succederà se i dati non sono normalizzati?


1
Sto votando per chiudere questa domanda come fuori tema perché appartiene a Stats SE o AI SE.
nbro

Risposte:


101

È spiegato bene qui .

Se le variabili di input sono combinate in modo lineare, come in un MLP [percetron multistrato], raramente è strettamente necessario standardizzare gli input, almeno in teoria. Il motivo è che qualsiasi ridimensionamento di un vettore di input può essere annullato efficacemente modificando i pesi e le inclinazioni corrispondenti, lasciandoti con gli stessi identici output di prima. Tuttavia, ci sono una serie di ragioni pratiche per cui la standardizzazione degli input può rendere più veloce l'allenamento e ridurre le possibilità di rimanere bloccati negli optima locali. Inoltre, la riduzione del peso e la stima bayesiana possono essere eseguite più comodamente con input standardizzati.


2
Salve, nelle MLP, non è possibile standardizzare le caratteristiche mentre si utilizza un tasso di apprendimento costante causare sovracompensazioni / sottocompensazioni nelle correzioni di backpropagation per dimensioni diverse? Mi chiedo dal seguente post se questo è esclusivo delle CNN o se le MLP potrebbero condividere questo problema: stats.stackexchange.com/questions/185853/…
Austin,

Problema: discesa gradiente opt. il processo potrebbe richiedere molto più tempo. Perché? Quando le caratteristiche hanno una scala diversa (x1 = 0-1 e x2 = 0..1000), la superficie della funzione di errore potrebbe allungarsi. Significato: scale diverse per differenti dim (w1, w2). Ma tasso di apprendimento è la STESSA per tutti affievolisce -> passaggi a dim allungata (W2) sono molto piccole fino a quando raggiunge il numero minimo di locale. Problema: impossibile aumentare LR, poiché salterà il minimo locale nell'altro dim (w1). Guarda la demo su youtube.com/watch?reload=9&v=UIp2CMI0748
Dekel

Ecco un esempio lineare, in cui le cose vanno molto male senza ridimensionamento: stackoverflow.com/q/59319643 . Qualche idea sul perché?
AlwaysLearning

62

Nelle reti neurali, è una buona idea non solo normalizzare i dati, ma anche ridimensionarli. Questo è pensato per un approccio più rapido ai minimi globali sulla superficie dell'errore. Vedi le seguenti immagini: superficie di errore prima e dopo la normalizzazione

superficie di errore prima e dopo il ridimensionamento

Le foto sono tratte dal corso di corso sulle reti neurali. L'autore del corso è Geoffrey Hinton.


14
Sarebbe stato carino da parte tua accreditare l'autore della grafica che hai pubblicato. La grafica è stata chiaramente presa dal corso di corso di Geoffrey Hinton .
Ricardo Cruz,

5
Ho trovato questo video molto utile per spiegare il diagramma sopra, che da solo non era ovvio per me.
chris838,

21

Alcuni input per NN potrebbero non avere un intervallo di valori "naturalmente definito". Ad esempio, il valore medio potrebbe essere lento, ma in continuo aumento nel tempo (ad esempio un numero di record nel database).

In tal caso, l'immissione di questo valore grezzo nella rete non funzionerà molto bene. Insegnerai alla tua rete su valori dalla parte inferiore dell'intervallo, mentre gli input effettivi saranno dalla parte superiore di questo intervallo (e molto probabilmente al di sopra dell'intervallo, con cui la rete ha imparato a lavorare).

Dovresti normalizzare questo valore. Ad esempio, potresti dire alla rete di quanto è cambiato il valore dall'input precedente. Questo incremento di solito può essere definito con alta probabilità in un intervallo specifico, il che lo rende un buon input per la rete.


Bel suggerimento sulla normalizzazione sul set precedente di input. Ciò allevia l'utente dalla definizione di un fattore di normalizzazione arbitrario. Tuttavia, sospetto che la rete si allenerà in modo più accurato se il fattore di normalizzazione è una costante globale applicata a ciascun vettore di input.
davide

11

Guardando la rete neurale dall'esterno, è solo una funzione che accetta alcuni argomenti e produce un risultato. Come per tutte le funzioni, ha un dominio (ovvero una serie di argomenti legali). Devi normalizzare i valori che vuoi passare alla rete neurale per assicurarti che sia nel dominio. Come per tutte le funzioni, se gli argomenti non sono nel dominio, il risultato non è garantito.

L'esatto comportamento della rete neurale su argomenti esterni al dominio dipende dall'implementazione della rete neurale. Ma nel complesso, il risultato è inutile se gli argomenti non sono all'interno del dominio.


16
Se si utilizza una normale funzione di attivazione (ReLu o Sigmoid), il dominio è sempre l'intero spazio R ^ n. Quindi questo non può essere il motivo per normalizzare i dati.
Joker123,

1
Anche questo non spiega perché le immagini siano normalizzate, poiché hanno già un dominio 0-255
DollarAkshay

4

Esistono 2 motivi per cui dobbiamo normalizzare le funzionalità di input prima di inviarle alla rete neurale:

Motivo 1 : se a Featurein the Datasetè di grandi dimensioni rispetto ad altri, questa funzionalità su larga scala diventa dominante e, di conseguenza, le previsioni della rete neurale non saranno accurate.

Esempio : nel caso dei dati dei dipendenti, se consideriamo l'età e lo stipendio, l'età sarà un numero di due cifre mentre lo stipendio può essere di 7 o 8 cifre (1 milione, ecc.). In quel caso, lo stipendio dominerà la previsione della rete neurale. Ma se normalizziamo tali funzionalità, i valori di entrambe le funzionalità si trovano nell'intervallo compreso tra (0 e 1).

Motivo 2 : la propagazione frontale delle reti neurali coinvolge il prodotto Dot di pesi con funzionalità di input. Quindi, se i valori sono molto alti (per i dati di immagine e non di immagine), il calcolo dell'output richiede molto tempo di calcolo e memoria. Lo stesso vale per Back Propagation. Di conseguenza, il modello converge lentamente, se gli ingressi non sono normalizzati.

Esempio : se eseguiamo la classificazione delle immagini, la dimensione dell'immagine sarà enorme, poiché il valore di ciascun pixel varia da 0 a 255. In questo caso la normalizzazione è molto importante.

Di seguito sono indicati i casi in cui la normalizzazione è molto importante:

  1. K-Means
  2. K-vicini-vicini di casa
  3. Analisi dei componenti principali (PCA)
  4. Discesa a gradiente

2

Credo che la risposta dipenda dallo scenario.

Considera NN (rete neurale) come un operatore F, in modo che F (input) = output . Nel caso in cui questa relazione sia lineare in modo che F (A * input) = A * output , allora si potrebbe scegliere di lasciare l'input / output non normalizzato nelle loro forme grezze, o normalizzare entrambi per eliminare A. Ovviamente questa ipotesi di linearità è violato nelle attività di classificazione o quasi in qualsiasi attività che genera una probabilità, dove F (A * input) = 1 * output

In pratica, la normalizzazione consente di realizzare reti non compatibili, il che è cruciale per gli sperimentatori / programmatori. Tuttavia, l'impatto preciso della normalizzazione dipenderà non solo dall'architettura / algoritmo di rete, ma anche dal precedente statistico per l'input e l'output.

Inoltre, NN è spesso implementato per risolvere problemi molto difficili in modo black-box, il che significa che il problema di base può avere una formulazione statistica molto scarsa, rendendo difficile valutare l'impatto della normalizzazione, causando il vantaggio tecnico (diventando fattibile) dominare il suo impatto sulle statistiche.

In senso statistico, la normalizzazione rimuove la variazione che si ritiene non sia causale nel prevedere l'output, in modo da impedire a NN di apprendere questa variazione come predittore ( NN non vede questa variazione, quindi non può usarla ).


2

Quando si utilizzano funzionalità di input non normalizzate, è probabile che la funzione di perdita abbia valli molto allungate. Quando si ottimizza con la discesa del gradiente, questo diventa un problema perché il gradiente sarà ripido rispetto ad alcuni dei parametri. Ciò porta a grandi oscillazioni nello spazio di ricerca, mentre rimbalzi tra pendenze ripide. Per compensare, devi stabilizzare l'ottimizzazione con piccoli tassi di apprendimento.

Considera le funzioni x1 e x2, dove vanno rispettivamente da 0 a 1 e da 0 a 1 milione. Si scopre che anche i rapporti per i parametri corrispondenti (diciamo, w1 e w2) saranno grandi.

La normalizzazione tende a rendere la funzione di perdita più simmetrica / sferica. Questi sono più facili da ottimizzare perché i gradienti tendono a puntare verso il minimo globale e puoi fare passi più grandi.


1

Il motivo per cui è necessaria la normalizzazione è perché se osservi come procede un passaggio adattivo in un punto nel dominio della funzione e semplicemente trasferisci il problema all'equivalente dello stesso passaggio tradotto da un valore elevato in una direzione nella dominio, quindi ottieni risultati diversi. Si riduce alla questione dell'adattamento di un pezzo lineare a un punto dati. Quanto dovrebbe muoversi il pezzo senza girare e quanto dovrebbe girare in risposta a quel punto di allenamento? Non ha senso avere una procedura di adattamento modificata in diverse parti del dominio! Quindi è necessaria la normalizzazione per ridurre la differenza nel risultato dell'allenamento. Non ho scritto questo, ma puoi solo guardare la matematica per una semplice funzione lineare e come viene allenata da un punto di allenamento in due luoghi diversi. Questo problema potrebbe essere stato corretto in alcuni punti, ma non ho familiarità con essi. In ALN, il problema è stato corretto e posso inviarti un documento se scrivi a wwarmstrong AT shaw.ca


-9

I livelli nascosti vengono utilizzati in conformità con la complessità dei nostri dati. Se abbiamo dati di input che sono separabili linearmente, allora non abbiamo bisogno di usare un layer nascosto, ad esempio OR gate, ma se abbiamo dati non separabili linearmente, allora dobbiamo usare un layer nascosto, ad esempio il gate logico ExOR. Il numero di nodi presi in ogni livello dipende dal grado di convalida incrociata del nostro output.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.