Perché i pesi delle reti neurali dovrebbero essere inizializzati su numeri casuali? [chiuso]


105

Sto cercando di costruire una rete neurale da zero. In tutta la letteratura sull'IA esiste un consenso sul fatto che i pesi dovrebbero essere inizializzati su numeri casuali in modo che la rete converga più velocemente.

Ma perché i pesi iniziali delle reti neurali sono inizializzati come numeri casuali?

Avevo letto da qualche parte che questo viene fatto per "rompere la simmetria" e questo fa sì che la rete neurale apprenda più velocemente. In che modo rompere la simmetria lo fa imparare più velocemente?

Inizializzare i pesi a 0 non sarebbe un'idea migliore? In questo modo i pesi sarebbero in grado di trovare i loro valori (positivi o negativi) più velocemente?

C'è qualche altra filosofia alla base della randomizzazione dei pesi oltre alla speranza che sarebbero vicini ai loro valori ottimali quando inizializzati?


8
Sembra una soluzione migliore per Cross Validated .
Sycorax

2
Voto per chiudere questa domanda perché non si tratta di programmazione come definita nel Centro assistenza ma di teoria e metodologia ML generale.
Desertnaut

Risposte:


140

La rottura della simmetria è essenziale qui, e non per il motivo della prestazione. Immagina i primi 2 strati di perceptron multistrato (input e strati nascosti):

inserisci qui la descrizione dell'immagine

Durante la propagazione in avanti ogni unità nello strato nascosto riceve il segnale:

inserisci qui la descrizione dell'immagine

Cioè, ogni unità nascosta ottiene la somma degli input moltiplicata per il peso corrispondente.

Ora immagina di inizializzare tutti i pesi sullo stesso valore (es. Zero o uno). In questo caso, ogni unità nascosta riceverà esattamente lo stesso segnale . Ad esempio, se tutti i pesi sono inizializzati a 1, ogni unità riceve un segnale uguale alla somma degli ingressi (e delle uscite sigmoid(sum(inputs))). Se tutti i pesi sono zero, il che è anche peggio, ogni unità nascosta riceverà il segnale zero. Non importa quale sia stato l'input: se tutti i pesi sono gli stessi, anche tutte le unità nello strato nascosto saranno le stesse .

Questo è il problema principale con la simmetria e il motivo per cui dovresti inizializzare i pesi in modo casuale (o, almeno, con valori diversi). Si noti che questo problema riguarda tutte le architetture che utilizzano connessioni ciascuno-a-ciascuno.


1
Ottima spiegazione. Ma perché usare la parola symmetrynon correlation? Chi ha usato per primo la parola?
nn0p

1
@ nn0p: la correlazione implica che 2 segnali cambiano in una direzione simile, ma non sempre e non esattamente della stessa grandezza. Almeno per quanto ne so, la simmetria non ha una definizione formale e viene utilizzata qui per rappresentare esattamente gli stessi segnali su tutti i collegamenti tra i nodi, il che rende inutile l'addestramento.
ffriend

@ amico che nel caso in cui usiamo dropout, la randomizzazione non è più necessaria. Ho sbagliato?
emanuele

1
@emanuele Dropout è di per sé una sorta di randomizzazione, quindi sì, dovrebbe funzionare. Tuttavia, tutte le connessioni che non vengono "interrotte" ad ogni iterazione riceveranno comunque un aggiornamento simmetrico, quindi immagino che l'apprendimento sarà piuttosto lento e quindi si consiglia di utilizzare ancora l'inizializzazione casuale in qualsiasi rete pratica.
ffriend

Questo spiega bene forwardprop, ma per quanto riguarda backprop?
zell

74

Analogia:

Spero sia una buona analogia. Ho cercato di spiegarlo nel modo più semplice possibile.

Immagina che qualcuno ti abbia lasciato cadere da un elicottero sulla cima di una montagna sconosciuta e tu sia intrappolato lì. Ovunque è annebbiato. L'unica cosa che sai è che dovresti scendere in qualche modo al livello del mare. Quale direzione dovresti prendere per arrivare al punto più basso possibile?

Se non riuscissi a trovare una via per il livello del mare e così l'elicottero ti riprenderebbe e ti lascerebbe cadere nella stessa posizione in cima alla montagna. Dovresti prendere di nuovo le stesse direzioni perché ti stai "inizializzando" sulle stesse posizioni di partenza .

Tuttavia, ogni volta che l'elicottero ti lascia da qualche parte a caso sulla montagna, prenderesti direzioni e passi diversi. Quindi, ci sarebbero maggiori possibilità per te di raggiungere il punto più basso possibile.

Questo è ciò che si intende per rottura della simmetria . L'inizializzazione è asimmetrica ( che è diversa ) in modo da poter trovare diverse soluzioni allo stesso problema.

In questa analogia, dove atterri sono i pesi . Quindi, con pesi diversi, c'è una migliore possibilità di raggiungere il punto più basso ( o inferiore ).

Inoltre, aumenta l' entropia nel sistema in modo che il sistema possa creare più informazioni per aiutarti a trovare i punti inferiori ( minimi locali o globali ).

inserisci qui la descrizione dell'immagine


10
Sembra che l'elicottero ti lasci da qualche parte a caso sulla montagna diverse volte, tuttavia nell'apprendimento profondo iniziamo i pesi in modo casuale solo una volta.
YuFeng Shen

1
Questa è una vera spiegazione intuitiva. Dovremmo anche notare che gli NN non sono quasi mai convessi, quindi la randomizzazione è il modo ideale per andare, ma se hai una funzione di perdita convessa, ovviamente non importa su cosa inizializzi i tuoi pesi.
Kingz

4
È una buona analogia, ma ha più senso presumere che tu ei tuoi amici veniate lasciati cadere sulla montagna (cioè i nodi di una rete), nello stesso punto o persone diverse in punti diversi. E supponi che tu possa comunicare tra loro. Diversi punti con comunicazione consentiranno una discesa più veloce. Stesso punto significa che è probabile che tutti seguano lo stesso percorso.
ahmedhosny

26

La risposta è molto semplice. Gli algoritmi di addestramento di base sono di natura avida - non trovano l'ottimo globale, ma piuttosto - la soluzione locale "più vicina". Di conseguenza, partire da qualsiasi inizializzazione fissa polarizza la soluzione verso un particolare insieme di pesi. Se lo fai in modo casuale (e forse molte volte), è molto meno probabile che rimarrai bloccato in una parte strana della superficie dell'errore.

Lo stesso argomento si applica ad altri algoritmi, che non sono in grado di trovare un ottimo globale (k-mean, EM, ecc.) E non si applica alle tecniche di ottimizzazione globale (come l'algoritmo SMO per SVM).


Quindi, non è garantito che non si blocchi nei minimi locali solo randomizzando? Ma dopo più esecuzioni con pesi randomizzati diversi potrebbe ottenere il minimo globale?
Shayan RC

1
Non vi è alcuna garanzia, ma più inizializzazioni possono aiutare almeno ad avvicinarsi al vero ottimo.
lejlot

Esiste una formula o regola standard per impostare il valore per inizializzare i pesi? Ho una rete neurale di feed-forward, multistrato, di retro propagazione, in cui viene utilizzata la funzione sigmoide.
lkkkk

ci sono alcune regole pratiche nel libro di S. Haykin "reti neurali"
lejlot

3
Questo non è il motivo per cui le persone usano l'inizializzazione casuale poiché la maggior parte delle persone non riavvia l'addestramento molte volte con diverse inizializzazioni casuali e la rete è ancora in grado di ottenere un buon ottimismo locale.
cesarsalgado

4

Come hai detto, il punto chiave è rompere la simmetria . Perché se inizializzi tutti i pesi a zero, tutti i neuroni nascosti (unità) nella tua rete neurale faranno gli stessi identici calcoli. Questo non è qualcosa che desideriamo perché vogliamo diverse unità nascoste per calcolare funzioni diverse. Tuttavia, ciò non è possibile se si inizializzano tutti sullo stesso valore.


2
  1. Inizializzare i pesi a 0 non sarebbe un'idea migliore? In questo modo i pesi sarebbero in grado di trovare i loro valori (positivi o negativi) più velocemente?

  2. In che modo rompere la simmetria lo fa imparare più velocemente?

Se si inizializzano tutti i pesi a zero, allora tutti i neuroni di tutti i livelli eseguono lo stesso calcolo, dando lo stesso output e rendendo inutile l' intera rete profonda . Se i pesi fossero zero, la complessità dell'intera rete profonda sarebbe la stessa di quella di un singolo neurone e le previsioni non sarebbero niente di meglio che casuali.

I nodi affiancati in uno strato nascosto connesso agli stessi input devono avere pesi diversi affinché l'algoritmo di apprendimento aggiorni i pesi.

Impostando i pesi come diversi da zero (ma vicini a 0 come 0,1 ecc.), L'algoritmo apprenderà i pesi nelle iterazioni successive e non si bloccherà. In questo modo avviene la rottura della simmetria.

  1. C'è qualche altra filosofia alla base della randomizzazione dei pesi oltre alla speranza che sarebbero vicini ai loro valori ottimali quando inizializzati?

Gli algoritmi di ottimizzazione stocastica come la discesa del gradiente stocastico utilizzano la casualità nella selezione di un punto di partenza per la ricerca e nella progressione della ricerca.

La progressione della ricerca o dell'apprendimento di una rete neurale è nota come convergenza. La scoperta di una soluzione subottimale o di un risultato ottimale locale in una convergenza prematura.

Invece di fare affidamento su un optima locale, se esegui il tuo algoritmo più volte con pesi casuali diversi, c'è la migliore possibilità di trovare un optima globale senza rimanere bloccato in un optima locale.

Dopo il 2015, a causa dei progressi nella ricerca sull'apprendimento automatico, viene introdotta He-et-al Initializatio n per sostituire l'inizializzazione casuale

w=np.random.randn(layer_size[l],layer_size[l-1])*np.sqrt(2/layer_size[l-1])

I pesi sono ancora casuali ma differiscono nel range a seconda delle dimensioni del precedente strato di neuroni.

In sintesi, i pesi casuali diversi da zero ci aiutano

  1. Esci dall'ottimo locale
  2. Rompere la simmetria
  3. Raggiungi l'ottimo globale in ulteriori iterazioni

1

Oltre all'inizializzazione con valori casuali, i pesi iniziali non dovrebbero iniziare con valori grandi. Questo perché spesso usiamo le funzioni tanh e sigmoide negli strati nascosti e negli strati di output. Se si guardano i grafici delle due funzioni, dopo la propagazione in avanti alla prima iterazione si ottengono valori più alti, e questi valori corrispondono alle posizioni nelle funzioni sigmoide e tanh che convergono la derivata a zero. Ciò porta ad un avvio a freddo del processo di apprendimento e ad un aumento del tempo di apprendimento. Di conseguenza, se inizi i pesi in modo casuale, puoi evitare questi problemi moltiplicando questi valori per valori come "0,01" o "0,001".


1

Innanzitutto alcuni algoritmi convergono anche con ponderazioni iniziali nulle. Un semplice esempio è una rete Perceptron lineare. Naturalmente, molte reti di apprendimento richiedono una ponderazione iniziale casuale (sebbene questa non sia una garanzia di ottenere la risposta più rapida e migliore ).

Le reti neurali utilizzano la propagazione posteriore per apprendere e aggiornare i pesi e il problema è che in questo metodo i pesi convergono all'ottimo locale (costo / perdita minimo locale), non all'ottimale globale.

La ponderazione casuale aiuta la rete a cogliere le opportunità per ciascuna direzione nello spazio disponibile e a migliorarle gradualmente per arrivare a una risposta migliore e non limitarsi a una direzione o risposta.

[L'immagine sotto mostra un esempio unidimensionale di come la convergenza. Data la posizione iniziale, si ottiene un'ottimizzazione locale ma non un'ottimizzazione globale. A dimensioni maggiori, la ponderazione casuale può aumentare le possibilità di trovarsi nel posto giusto o di iniziare meglio, con il risultato di far convergere i pesi verso valori migliori.] [1]

[1]: https://i.stack.imgur.com/2dioT.png [Kalhor, A. (2020). Classificazione e regressione NN. Conferenza.]

Nel caso più semplice, il nuovo peso è il seguente:

W_new = W_old + D_loss

Qui il gradiente della funzione di costo viene aggiunto al peso precedente per ottenere un nuovo peso. Se tutti i pesi precedenti sono uguali, nel passaggio successivo tutti i pesi potrebbero essere uguali. Di conseguenza, in questo caso, da un punto di vista geometrico, la rete neurale è inclinata in una direzione e tutti i pesi sono gli stessi. Ma se i pesi sono diversi, è possibile aggiornare i pesi in base a quantità diverse. (a seconda del fattore di impatto che ogni peso ha sul risultato, influisce sul costo e sugli aggiornamenti dei pesi. Quindi anche un piccolo errore nella ponderazione casuale iniziale può essere risolto).

Questo era un esempio molto semplice, ma mostra l'effetto dell'inizializzazione della ponderazione casuale sull'apprendimento. Ciò consente alla rete neurale di andare in spazi diversi invece di andare da un lato. Di conseguenza, nel processo di apprendimento, vai al meglio di questi spazi


0

Cerchiamo di essere più matematici. In effetti, la ragione per cui rispondo è che ho trovato questo bit mancante nelle altre risposte. Supponi di avere 2 livelli. Se guardiamo all'algoritmo di propagazione inversa, il calcolo di

dZ2 = A2 - Y

dW2 = (1 / m) * dZ2 * A2.T

Ignoriamo db2. (Scusa, non mi dispiace;))

dZ1 = W2.T * dZ2. * g1 '(Z1)

...

Il problema che vedi è in grassetto. Il calcolo di dZ1 (che è richiesto per calcolare dW1) contiene W2 che è 0. Non abbiamo mai avuto la possibilità di cambiare i pesi a qualcosa oltre 0 e non lo faremo mai. Quindi, in sostanza, la rete neurale non apprende nulla. Penso che sia peggio della regressione logistica (singola unità). Nel caso della regressione logistica, impari con più iterazioni poiché ottieni input diversi grazie a X. In questo caso, gli altri livelli danno sempre lo stesso output quindi non impari affatto.


0

Ho imparato una cosa: se si inizializza il peso a zero, è ovvio che le unità di attivazione nello stesso livello saranno le stesse, significa che avranno gli stessi valori. Quando si esegue il backbrop, troverete che anche tutte le righe del gradiente dW sono uguali, quindi tutte le righe della matrice dei pesi W sono le stesse dopo l'aggiornamento della discesa del gradiente. In generale, l'inizializzazione di tutti i pesi a zero fa sì che la rete non riesca a rompere la simmetria. Ciò significa che ogni neurone in ogni livello imparerà la stessa cosa, e potresti anche allenare una rete neurale con n[l]=1n[l]=1per ogni livello, e la rete non è più potente di un classificatore lineare come la regressione logistica. Corso Andrew Ng:

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.