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

Sto provando a build una rete neurale da zero. In tutta la letteratura sulla IA esiste un consenso sul fatto che i pesi debbano essere inizializzati su numeri casuali affinché la rete converga più velocemente.

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

Ho letto da qualche parte che questo è fatto per “rompere la simmetria” e questo rende la rete neurale più veloce. In che modo rompere la simmetria fa sì che apprenda più velocemente?

Non inizializzare i pesi a 0 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 del randomizzare i pesi oltre a sperare che si avvicinino ai loro valori ottimali una volta inizializzati?

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

inserisci la descrizione dell'immagine qui

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

inserisci la descrizione dell'immagine qui

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

Ora immagina di inizializzare tutti i pesi con lo stesso valore (ad es. Zero o uno). In questo caso, ogni unità nascosta otterrà esattamente lo stesso segnale . Ad esempio, se tutti i pesi sono inizializzati su 1, ogni unità riceve un segnale uguale alla sum degli input (e genera sigmoid(sum(inputs)) ). Se tutti i pesi sono zero, il che è anche peggiore, ogni unità nascosta otterrà il segnale zero. Non importa quale sia stato l’input – se tutti i pesi sono uguali, anche tutte le unità nel livello nascosto saranno uguali .

Questo è il problema principale con la simmetria e il motivo per cui è necessario inizializzare i pesi casualmente (o, almeno, con valori diversi). Si noti che questo problema interessa tutte le architetture che utilizzano ciascuna connessione.

Analogia:

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

Immagina che qualcuno ti abbia fatto cadere da un elicottero a una cima di una montagna sconosciuta e tu sei intrappolato lì. Ovunque è appannato. L’unica cosa che sai è che dovresti scendere al livello del mare in qualche modo. Quale direzione dovresti prendere per arrivare al punto più basso ansible?

Se non riuscissi a trovare un modo per raggiungere il livello del mare, l’elicottero ti porterebbe di nuovo e ti lascerebbe sulla stessa cima della montagna. Dovresti riprendere le stesse indicazioni perché “inizializzi” te stesso alle stesse posizioni di partenza .

Tuttavia, ogni volta che l’elicottero ti lascia cadere in un punto casuale sulla montagna, potresti prendere diverse direzioni e passi. Quindi, ci sarebbe una migliore possibilità di raggiungere il punto più basso ansible.

Questo è ciò che si intende per rompere la 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 più basso ).

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

inserisci la descrizione dell'immagine qui

La risposta è molto semplice. Gli algoritmi di addestramento di base sono avidi di natura – non trovano l’optimum globale, ma piuttosto – la soluzione locale “più vicina”. Come risultato, partendo da qualsiasi inizializzazione fissa, la tua soluzione è orientata verso un particolare set di pesi. Se lo fai in modo casuale (e possibilmente molte volte), allora è molto meno probabile che rimarrai bloccato in qualche parte strana della superficie dell’errore.

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