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:
Ma la maggior parte delle volte che lo provo, si blocca in un minimo locale e non riesce a trovare la forma giusta:
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?