Posso usare ReLU in autoencoder come funzione di attivazione?


11

Quando si implementa un autoencoder con rete neurale, la maggior parte delle persone utilizzerà sigmoid come funzione di attivazione.

Possiamo usare ReLU invece? (Dato che ReLU non ha limiti sul limite superiore, ciò significa sostanzialmente che l'immagine in ingresso può avere pixel più grandi di 1, a differenza dei criteri limitati per il codificatore automatico quando si usa sigmoid).

Risposte:


5

Ecco un thread di discussione (da luglio 2013) che indica che potrebbero esserci alcuni problemi con esso, ma può essere fatto.

Çağlar Gülçehre (dal laboratorio di Yoshua Bengio) ha affermato di aver usato con successo la seguente tecnica in materia di conoscenza: importanza delle informazioni precedenti per l'ottimizzazione :

addestrare il primo DAE come al solito, ma con raddrizzatori nello strato nascosto: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) minimizzare l'entropia incrociata o la perdita di MSE, confrontando g1 (f1 (corrotto (x))) e x. il sigmoid è opzionale a seconda dei dati.

addestrare il 2 ° DAE con il rumore aggiunto prima del raddrizzatore f1 e utilizzare le unità di ricostruzione softplus con perdita MSE: h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) minimizzaref1(x)g2(f2(rectifier(corrupt(a1(x)))))2+λ1W1+λ2W2

Xavier Glorot, anch'egli del laboratorio di Bengio, ha detto di aver fatto lo stesso tranne che per sostituire con una penalità "sui valori di attivazione" (presumibilmente ?) In entrambi i Domain Adaptation per Classificazione del sentiment su larga scala: un approccio di apprendimento profondo (ICML 2011) e in reti neurali raddrizzatori sparse profonde (AISTATS 2011).W1L1g2()1


Grazie per la rapida risposta! Quindi stai dicendo che c'è qualche problema nell'ottimizzare il codificatore automatico quando ReLU è usato al posto di Sigmoid?
RockTheStar,

Sembra che possa causare problemi, sì, ma può sicuramente essere fatto se si imposta correttamente il processo di apprendimento. Potrebbe aiutare a leggere i documenti collegati.
Dougal,

Sto sperimentando un semplice codificatore automatico nel set di dati MNIST. Uso reti completamente connesse con architettura 784-128-64-2-64-128-784. Uso relus ovunque, ma sto sperimentando il livello del collo di bottiglia (relu o lineare) e il livello di output (relu o sigmoid). L'uso del raddrizzatore in uscita porta a prestazioni peggiori; sigmoid fa di meglio. Per l'output sigmoideo, il collo di bottiglia lineare sembra andare leggermente meglio. Quindi la mia combinazione preferita per questi due strati è lineare / sigmoide. (A proposito, l'uso di sigmoidi su tutti i livelli rende chiaramente peggio.)
amoeba,

@ameoba Non mi sorprende che le uscite relu siano cattive: se sai che le uscite hanno determinati limiti, ha senso utilizzare una funzione di attivazione che ti limiti a tali limiti. Non sono molto esperto in questo settore, ma probabilmente proverei un ELU o un ReLU che perde per i livelli nascosti.
Dougal,

2
Oh, wow, non ero a conoscenza degli ELU! Grazie mille per la punta, Dougal. Li ho provati e funzionano meglio. L'apprendimento profondo è sorprendente: ogni anno compaiono nuovi trucchi e nessuno ha idea del perché alcuni funzionino meglio di altri. (Da CC a @RockTheStar). A proposito, trovo anche che l'ottimizzatore di Adam funzioni abbastanza bene.
amoeba,
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.