Differenza delle funzioni di attivazione nelle reti neurali in generale


15

Ho studiato i tipi di funzione di attivazione per le reti neurali. Le funzioni stesse sono piuttosto semplici, ma la differenza tra le applicazioni non è del tutto chiara.

È ragionevole distinguere tra funzioni di tipo logico e lineare, a seconda dell'output binario / continuo desiderato, ma qual è il vantaggio della funzione sigmoid rispetto a quella lineare semplice?

ReLU è particolarmente difficile da capire per me, ad esempio: qual è il punto di usare una funzione che si comporta come lineare in caso di input positivi ma è "piatta" in caso di negativi? Qual è l'intuizione dietro questo? O è solo una semplice cosa di errore di prova, niente di più?

Risposte:


15

Una domanda simile è stata posta sul CV: Elenco completo delle funzioni di attivazione nelle reti neurali con pro / contro .

Copio di seguito una delle risposte:

Uno di questi elenchi, anche se non molto esaustivo: http://cs231n.github.io/neural-networks-1/

Funzioni di attivazione comunemente utilizzate

Ogni funzione di attivazione (o non linearità ) accetta un singolo numero ed esegue una determinata operazione matematica fissa su di esso. Esistono diverse funzioni di attivazione che potresti incontrare in pratica:

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine

Sinistra: la non linearità del sigmoide schiaccia i numeri reali per variare tra [0,1] Destra: la non linearità tanh schiaccia i numeri reali tra [-1,1].

Sigma. La non linearità sigmoidea ha la forma matematica σ(X)=1/(1+e-X)e viene mostrato nell'immagine sopra a sinistra. Come accennato nella sezione precedente, prende un valore reale e lo "schiaccia" nell'intervallo tra 0 e 1. In particolare, i numeri negativi grandi diventano 0 e i numeri positivi grandi diventano 1. La funzione sigmoid ha visto storicamente un uso frequente poiché ha una buona interpretazione come la frequenza di sparo di un neurone: dal non sparare affatto (0) allo sparo completamente saturo alla frequenza massima presunta (1). In pratica, la non linearità sigmoidea è recentemente caduta in disgrazia e raramente viene mai utilizzata. Ha due principali inconvenienti:

  • I sigmoidi saturano e uccidono i gradienti . Una proprietà molto indesiderabile del neurone sigmoideo è che quando l'attivazione del neurone si satura a una coda di 0 o 1, il gradiente in queste regioni è quasi zero. Ricordiamo che durante la backpropagation, questo gradiente (locale) verrà moltiplicato per il gradiente dell'output di questo gate per l'intero obiettivo. Pertanto, se il gradiente locale è molto piccolo, "ucciderà" effettivamente il gradiente e quasi nessun segnale fluirà attraverso il neurone fino ai suoi pesi e ricorsivamente ai suoi dati. Inoltre, è necessario prestare particolare attenzione quando si inizializzano i pesi dei neuroni sigmoidi per prevenire la saturazione. Ad esempio, se i pesi iniziali sono troppo grandi, la maggior parte dei neuroni si satura e la rete imparerà a malapena.
  • X>0f=wTX+Bwf). Ciò potrebbe introdurre dinamiche a zig-zag indesiderabili negli aggiornamenti del gradiente per i pesi. Tuttavia, si noti che una volta sommati questi gradienti attraverso una serie di dati, l'aggiornamento finale per i pesi può avere segni variabili, mitigando in qualche modo questo problema. Pertanto, questo è un inconveniente, ma ha conseguenze meno gravi rispetto al problema di attivazione saturo sopra riportato.

tanh(X)=2σ(2X)-1.

inserisci qui la descrizione dell'immagineinserisci qui la descrizione dell'immagine

Sinistra: funzione di attivazione Unità lineare rettificata (ReLU), che è zero quando x <0 e quindi lineare con pendenza 1 quando x> 0. A destra: un diagramma di Krizhevsky et al. (pdf) documento che indica il miglioramento 6x della convergenza con l'unità ReLU rispetto all'unità tanh.

Relu. L'unità lineare rettificata è diventata molto popolare negli ultimi anni. Calcola la funzionef(X)=max(0,X). In altre parole, l'attivazione è semplicemente a soglia zero (vedi immagine sopra a sinistra). Esistono diversi pro e contro nell'uso delle ReLU:

  • (+) Si è scoperto che accelera notevolmente (ad esempio un fattore 6 in Krizhevsky et al. ) La convergenza della discesa gradiente stocastica rispetto alle funzioni sigmoide / tanh. Si sostiene che ciò sia dovuto alla sua forma lineare e non satura.
  • (+) Rispetto ai neuroni tanh / sigmoidi che comportano operazioni costose (esponenziali, ecc.), La ReLU può essere implementata semplicemente portando a zero una matrice di attivazioni.
  • (-) Sfortunatamente, le unità ReLU possono essere fragili durante l'allenamento e possono "morire". Ad esempio, una grande pendenza che fluisce attraverso un neurone ReLU potrebbe far aggiornare i pesi in modo tale che il neurone non si attiverà mai più su nessun punto dati. Se ciò accade, il gradiente che fluisce attraverso l'unità sarà per sempre zero da quel punto in poi. Cioè, le unità ReLU possono morire irreversibilmente durante l'allenamento poiché possono staccarsi dal collettore di dati. Ad esempio, potresti scoprire che fino al 40% della tua rete può essere "morto" (cioè neuroni che non si attivano mai nell'intero set di dati di allenamento) se il tasso di apprendimento è impostato su un valore troppo alto. Con una corretta impostazione del tasso di apprendimento, questo è meno frequentemente un problema.

Perdita ReLU. Perdite ReLU sono un tentativo di risolvere il problema "morire ReLU". Invece che la funzione sia zero quando x <0, una ReLU che perde avrà invece una piccola pendenza negativa (di 0,01 o giù di lì). Cioè, la funzione calcolaf(X)=1(X<0)(αX)+1(X> =0)(X) dove αè una piccola costante. Alcune persone segnalano il successo con questa forma di funzione di attivazione, ma i risultati non sono sempre coerenti. La pendenza nella regione negativa può anche essere trasformata in un parametro di ciascun neurone, come visto nei neuroni PReLU, introdotto in Delving Deep in Rectifiers , da Kaiming He et al., 2015. Tuttavia, la coerenza del beneficio tra i compiti è attualmente poco chiaro.

inserisci qui la descrizione dell'immagine

Maxout . Sono stati proposti altri tipi di unità che non hanno la forma funzionalef(wTX+B)dove viene applicata una non linearità sul prodotto punto tra pesi e dati. Una scelta relativamente popolare è il neurone Maxout (introdotto di recente da Goodfellow et al. ) Che generalizza la ReLU e la sua versione che perde. Il neurone Maxout calcola la funzionemax(w1TX+B1,w2TX+B2). Si noti che sia ReLU che Leaky ReLU sono un caso speciale di questo modulo (ad esempio, per ReLU abbiamow1,B1=0). Il neurone Maxout gode quindi di tutti i vantaggi di un'unità ReLU (regime di funzionamento lineare, nessuna saturazione) e non presenta i suoi svantaggi (ReLU morente). Tuttavia, a differenza dei neuroni ReLU, raddoppia il numero di parametri per ogni singolo neurone, portando a un elevato numero totale di parametri.

Questo conclude la nostra discussione sui tipi più comuni di neuroni e sulle loro funzioni di attivazione. Come ultimo commento, è molto raro mescolare e abbinare diversi tipi di neuroni nella stessa rete, anche se non vi è alcun problema fondamentale nel farlo.

TLDR : " Che tipo di neurone dovrei usare? " Usa la non linearità ReLU, fai attenzione alle tue percentuali di apprendimento e, eventualmente, controlla la frazione di unità "morte" in una rete. Se questo ti riguarda, prova Leaky ReLU o Maxout. Non usare mai sigmoid. Prova tanh, ma aspettati che funzioni peggio di ReLU / Maxout.


Licenza:


la licenza MIT (MIT)

Copyright (c) 2015 Andrej Karpathy

L'autorizzazione è concessa, gratuitamente, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), per trattare il Software senza restrizioni, incluso senza limitazione i diritti di utilizzo, copia, modifica, unione , pubblicare, distribuire, concedere in licenza e / o vendere copie del Software e consentire alle persone a cui il Software è fornito di farlo, fatte salve le seguenti condizioni:

La suddetta nota sul copyright e questa nota di autorizzazione devono essere incluse in tutte le copie o parti sostanziali del Software.

IL SOFTWARE È FORNITO "COSÌ COM'È", SENZA ALCUN TIPO DI GARANZIA, ESPRESSA O IMPLICITA, COMPRESO MA NON LIMITATO ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI OI TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI DI QUALSIASI RECLAMO, DANNO O ALTRO RESPONSABILITÀ, SE IN AZIONE DI CONTRATTO, TORT O ALTRO, DERIVANTE DA, FUORI O IN CONNESSIONE CON IL SOFTWARE O L'UTILIZZO O ALTRE OFFERTE NEL SOFTWARE.*


Grazie, questo riassunto fornisce alcuni spunti, ma, francamente, non riesco ancora a capire alcuni dettagli in modo intuitivo (ad es. Perché ReLU "accelera notevolmente la convergenza di SGD"), e soprattutto: quale selezionare? Sulla base della conclusione, Maxout è il migliore e questa è la fine. Ma a parte il fatto che Maxout non è implementato nei pacchetti più popolari (in Keras, per esempio), mi sembra ragionevole che almeno nell'ultimo livello debbano essere posizionati altri tipi (sigmoid per la ciclizzazione per esempio).
Hendrik,
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.