Come scegliere una funzione di attivazione?


13

Scelgo la funzione di attivazione per il livello di output in base all'output di cui ho bisogno e alle proprietà della funzione di attivazione che conosco. Ad esempio, ho scelto la funzione sigmoide quando ho a che fare con le probabilità, una ReLU quando ho a che fare con valori positivi e una funzione lineare quando ho a che fare con valori generali.

In strati nascosti, uso una ReLU che perde per evitare i neuroni morti invece della ReLU e l'abbronzatura invece del sigmoide. Naturalmente, non utilizzo una funzione lineare in unità nascoste.

Tuttavia, la scelta per loro nel livello nascosto è principalmente dovuta a tentativi ed errori.

Esiste una regola empirica per la quale è probabile che la funzione di attivazione funzioni bene in alcune situazioni? Prendi il termine situazioni il più generale possibile: potrebbe riferirsi alla profondità dello strato, alla profondità dell'NN, al numero di neuroni per quello strato, all'ottimizzatore che abbiamo scelto, al numero di caratteristiche di input di quello strato, all'applicazione di questo NN, ecc.

Nella sua risposta , cantordust si riferisce ad altre funzioni di attivazione che non ho menzionato, come ELU e SELU. Queste informazioni sono più che benvenute. Tuttavia, più funzioni di attivazione scopro, più sono confuso nella scelta della funzione da utilizzare nei livelli nascosti. E non penso che lanciare una moneta sia un buon modo di scegliere una funzione di attivazione.

Risposte:


10

Mi sembra che tu capisca già le carenze di ReLU e sigmoidi (come i neuroni morti nel caso di ReLU normale). Suggerirei di esaminare ELU (unità lineari esponenziali) e SELU (versione auto-normalizzante di ELU). Sotto alcuni lievi presupposti, questi ultimi hanno la piacevole proprietà di auto-normalizzazione, che mitiga il problema della scomparsa e dell'esplosione dei gradienti. Inoltre, propagano la normalizzazione, ovvero garantiscono che l'input per il layer successivo abbia media zero e varianza unitaria.

Modificare:


Sarebbe incredibilmente difficile raccomandare una funzione di attivazione che funzioni per tutti i casi d'uso (anche se credo che SELU sia stato progettato in modo che farebbe la cosa giusta praticamente con qualsiasi input). Ci sono molte considerazioni: quanto sia difficile calcolare la derivata (se è affatto differenziabile!), Quanto velocemente converge una rete con il tuo AF scelto, quanto è liscia, se soddisfa le condizioni del teorema di approssimazione universale , se preserva la normalizzazione e così via. Potresti interessarti o meno a qualcuno di questi.

La linea di fondo è che non esiste una regola universale per la scelta di una funzione di attivazione per i livelli nascosti. Personalmente, mi piace usare i sigmoidi (specialmente tanh) perché sono ben delimitati e molto veloci da calcolare, ma soprattutto perché funzionano per i miei casi d'uso . Altri consigliano ReLU che perdono per l'input e i livelli nascosti come funzione di riferimento se la rete non riesce ad apprendere. Puoi persino mescolare e abbinare le funzioni di attivazione per evolvere reti neurali per applicazioni fantasiose .

Alla fine della giornata, avrai probabilmente molte opinioni quante sono le persone sulla scelta giusta della funzione di attivazione, quindi la risposta breve dovrebbe probabilmente essere: iniziare con l'AF del giorno (perdente ReLU / SELU?) e fatti strada attraverso altri AF in ordine di popolarità decrescente se la tua rete fatica ad imparare qualcosa.


1
Bene, ho dimenticato la propagazione della normalizzazione. Grazie per avermi ricordato. Tuttavia, la domanda è ancora senza risposta. C'è una regola o qualcosa da scegliere quali funzioni di attivazione devo inserire nei livelli nascosti? Per semplicità sto parlando solo di livelli semplicemente completamente connessi. Non voglio complicare l'argomento con convoluzioni, pooling, ecc.
gvgramazio,

@gvgramazio Ho modificato la risposta, speriamo che sia un po 'più utile ora.
cantordust,

Con la modifica penso che tu abbia risposto alla mia domanda e fornito collegamenti interessati (in particolare quello relativo al mix and match ). Purtroppo non è la risposta che volevo sentire. Terrò la mia domanda aperta per qualche giorno in più. Se nessuno trova una risposta migliore, contrassegnerò la tua come accettata.
gvgramazio,

-1

Non so su che tipo di reti neurali stai lavorando. Ma si dovrebbe anche considerare le funzioni di attivazione della tanh quando si ha a che fare con una rete neurale ricorrente. Il motivo è evitare di esplodere i problemi del gradiente poiché, ad esempio, la funzione tanh è limitata dalla differenza della funzione RELU.


Nella domanda ho affermato che uso tanh e sigmoid, non solo ReLU. Inoltre, per semplicità, mi riferisco in generale ai classici livelli nascosti completamente connessi. Se ritieni che il fatto che stiamo trattando una rete neurale ricorrente sia significativo per la scelta della funzione di attivazione, ti preghiamo di indicarne il motivo. I fenomeni di esplosione / fuga potrebbero verificarsi anche nella rete neurale non ricorrente.
gvgramazio,
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.