La mia rete neurale non può nemmeno imparare la distanza euclidea


9

Quindi sto cercando di insegnare a me stesso le reti neurali (per applicazioni di regressione, non classificare immagini di gatti).

I miei primi esperimenti sono stati l'addestramento di una rete per implementare un filtro FIR e una trasformata discreta di Fourier (addestramento sui segnali "prima" e "dopo"), dal momento che entrambe sono operazioni lineari che possono essere implementate da un singolo strato senza funzione di attivazione. Entrambi hanno funzionato bene.

Quindi, volevo vedere se potevo aggiungere un abs()e fargli apprendere uno spettro di ampiezza. Per prima cosa ho pensato a quanti nodi sarebbero necessari nel livello nascosto e mi sono reso conto che 3 ReLU sono sufficienti per una approssimazione approssimativa di abs(x+jy) = sqrt(x² + y²), quindi ho testato quell'operazione da sola su numeri complessi solitari (2 input → 3 nodi ReLU strato nascosto → 1 produzione). Occasionalmente funziona:

3 ReLU che implementano la distanza euclidea come piramide esagonale invertita

Ma la maggior parte delle volte che lo provo, si blocca in un minimo locale e non riesce a trovare la forma giusta:

3 ReLU che formano una rete a forma di valle

perdita vs epoche

Ho provato tutti gli ottimizzatori e le varianti ReLU in Keras, ma non fanno molta differenza. C'è qualcos'altro che posso fare per far convergere in modo semplice reti semplici come questa? O mi sto solo avvicinando a questo con l'atteggiamento sbagliato, e dovresti semplicemente lanciare più nodi del necessario al problema e se la metà di loro muore non è considerato un grosso problema?


1
La trama mostra quelli che sembrano essere diversi esperimenti diversi, alcuni dei quali funzionano e altri no. Cosa spiega le differenze?
Sycorax dice di reintegrare Monica il

@Sycorax Quelli sono solo prove ripetute della stessa cosa. A volte trova una soluzione piramidale esagonale, ma di solito non lo fa.
endolith

Hai provato con due livelli nascosti e un tanh come funzione di attivazione?
Ketan,

@KetanNo, perché? Ho pubblicato una variante più semplice qui: stats.stackexchange.com/q/379884/11633
endolith

potresti voler guardare questo. stats.stackexchange.com/q/375655/27556 . Ma puoi spiegare perché pensi di aver bisogno solo di 3 relus? la decomposizione 'naturale' sarebbe uno strato nascosto per eseguire l'approssimazione quadrata con relus e un altro strato per fare la radice quadrata - sostanzialmente relus sta facendo approssimazioni lineari a tratti.
seanv507,

Risposte:


6

L'output sembra suggerire fortemente che uno o più dei tuoi neuroni si spengano (o forse l'iperpiano dei pesi per due dei tuoi neuroni si è unito). Puoi vedere che con 3 Relu ottieni 3 divisioni oscure al centro quando converti nella soluzione più ragionevole. Puoi facilmente verificare se ciò è vero controllando i valori di output di ciascun neurone per vedere se rimane morto per la maggior parte dei tuoi campioni. In alternativa, è possibile tracciare tutti i pesi dei neuroni 2x3 = 6, raggruppati per i rispettivi neuroni, per vedere se due neuroni collassano sulla stessa coppia di pesi.

x+iyxyabs(x+iy)x. Non c'è davvero molto che puoi fare qui per rimediare. Un'opzione è aggiungere più neuroni come hai provato. La seconda opzione è provare un'attivazione continua, come un sigmoide, o forse qualcosa di illimitato come un esponenziale. Puoi anche provare il dropout (con una probabilità del 10%). Potresti usare l'implementazione del dropout regolare in keras, che è abbastanza intelligente da ignorare le situazioni quando tutti e 3 i neuroni si ritirano.


1
+1, quasi sicuramente questo. Quando usi ReLU con un numero così piccolo di pesi, i neuroni morti entrano quasi sempre in gioco.
kbrose,

1
Questa è un'ipotesi plausibile nel caso di ReLU. Ma OP scrive di aver provato alcune varianti ReLU diverse: i neuroni morti si verificano anche in varianti come ELU o Leaky Relu o PReLU?
Sycorax dice di reintegrare Monica il

3 shadowy splits in the center when you converge to the more reasonable solution.Sì, questa è l'approssimazione grezza che intendevo; una piramide esagonale invertita. or perhaps something unbounded like an exponential Ho provato elu e selu, che non ha funzionato molto meglio. two neurons collapse to the same pair of weightsAh, non ci avevo pensato; Ho solo pensato che fossero morti.
endolito il

Ho avuto accesso all'output del livello nascosto durante l'utilizzo di ReLU e ho confermato che di solito uno dei neuroni è morto. Meno spesso, due si sovrappongono e fanno la stessa cosa. Mi chiedo se c'è un modo per far "respingere" i neuroni in modo che non si sistemino in ruoli ridondanti.
endolith,

1
@endolith Dropout è esplicitamente progettato per costruire neuroni indipendenti. Gli ELU non "muoiono" mai, ma hanno un gradiente evanescente a sinistra.
Sycorax dice di reintegrare Monica il
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.