Perché un neurone saturo sarebbe un problema?
Il problema della saturazione dei neuroni ha principalmente a che fare con l'apprendimento dei parametri delle reti neurali durante l'allenamento. Da quando è stata sviluppata la back propagation, il tipo più comune di neurone artificiale nell'apprendimento automatico applica una funzione di attivazione non lineare e differenziabile a una combinazione lineare di ingressi, in modo che un neurone [math]y_j[/math] con neuroni di ingresso [math]x_i[/math] assume un valore
[math]y_j = g\left(b_j + \sum_i w_{i,j} x_j\right)[/math]
dove [math]g[/math] è la funzione di attivazione differenziabile.
Fino a poco tempo fa, le funzioni di attivazione più comuni erano la funzione logistica e la tangente iperbolica. Queste funzioni hanno un range compatto, cioè comprimono la risposta neurale in un sottoinsieme delimitato dei numeri reali. La logistica ha uscite tra 0 e 1, la tangente iperbolica tra -1 e 1. Queste funzioni devono comprimere un intervallo infinito in un intervallo finito, e quindi mostrano un comportamento limitante ai confini. Per raggiungere questi limiti, gli ingressi o i pesi devono avere una grandezza positiva o negativa estremamente grande. Diciamo che un neurone è saturo per queste funzioni di attivazione quando assume valori che sono vicini ai confini di questo intervallo.
Come sottolinea il PO, il gradiente dell'uscita rispetto all'ingresso [math]\frac{\parziale y_j}{\parziale x_j}[/math] è piccolo in questo caso. Matematicamente, questa è una conseguenza della compressione dell'intervallo, perché come la funzione di attivazione si avvicina ad un limite deve avere una pendenza sempre più piccola (la pendenza va a zero nel limite).
Se la rete è assolutamente corretta su tutti gli input e non ha bisogno di cambiare, allora la saturazione non sarebbe un grosso problema; questo è il punto dell'OP. Ma questo ignora due punti chiave. In primo luogo, di solito siamo interessati a cambiare l'output di una rete neurale per un motivo o per un altro (ad esempio, abbiamo appena inizializzato la rete o abbiamo ricevuto nuovi dati), e in questo caso, i neuroni saturi cambiano i loro valori lentamente. Anche se era bello che mantenessero i loro valori quando i neuroni erano giusti, diventa un grosso problema quando i neuroni sono sbagliati. Questo è particolarmente rilevante al momento dell'inizializzazione. Allora vogliamo che le reti abbiano attivazioni casuali vicine allo zero, perché questi valori sono più facilmente trasformati dal gradiente in valori che risolvono il problema (che saranno necessariamente più saturi).
In secondo luogo e, a parte l'inizializzazione, più importante, la saturazione tende a compromettere le prestazioni di generalizzazione. di solito si distingue tra un set di training di esempi usato in allenamento e un set di test di esempi usato in test. Quando una rete neurale viene impiegata nel mondo reale, il set di test è costituito da tutte le informazioni che i nostri futuri utenti finiranno per inviarci. Più ci alleniamo sul nostro set di allenamento, più i neuroni diventeranno saturi. Questo rappresenta la rete che sviluppa un'alta fiducia di essere corretta. Ma ora questo lavorerà contro di voi sul test set, perché invariabilmente il test set conterrà esempi che sono diversi da quelli incontrati nel training set. Se la rete non è così satura, allora si comporta correttamente su questi casi limite. Ma se la rete è satura, allora molto probabilmente commetterà un errore.
Si potrebbe entrare più nel dettaglio; quello che succede è che la rete impara a fare molto affidamento sui singoli neuroni che sono collegati con grandi pesi. Se qualche neurone interno fosse sempre uguale a 1 per tutti gli esempi di una certa classe c nel set di allenamento, allora i neuroni a valle potrebbero accendersi o spegnersi basandosi interamente su questo 1, al quale sarebbero collegati da un grande peso. Se sul test set questo unico neurone si accende vicino allo zero su un esempio che dovrebbe avere la classe c, allora tutti i neuroni a valle faranno previsioni sicure ma errate, e la rete non prevederà c.
Tipicamente, si usa la regolarizzazione per prevenire questo tipo di dipendenza da un neurone, ma queste tecniche di regolarizzazione (dropout, l2, sparsità, ecc.) tendono anche a sopprimere la saturazione.
Infine, vorrei sottolineare che anche se l'apprendimento profondo moderno tende a utilizzare funzioni di attivazione alternative come la ReLU che non hanno domini compatti e tendono a non avere problemi di saturazione allo stesso grado. Ma anche con queste, grandi pesi e grandi attivazioni sono ancora difficili da disimparare attraverso l'allenamento, e quindi tutta la discussione di cui sopra è ancora valida.
Quindi, in sintesi, la saturazione è un problema perché erode la plasticità delle reti neurali e di solito si traduce in prestazioni di test peggiori.
Articoli simili
- È ancora possibile sviluppare una nuova app di successo o il mercato è troppo saturo?
- Ho ricevuto il mio Sony Xperia E1 oggi e ho scoperto che c'è un problema con il display. Mostra linee orizzontali. Quale potrebbe essere il problema?
- Ho un problema con il mio PUBG. Gioco sulla versione Android, ma ogni volta che sparo con il mirino, si alza. Come posso risolvere il problema?
- Cosa può fare Huawei per superare il problema attuale e come possono risolvere il problema con il dipartimento di stato?