Ho implementato una rete neurale (usando CUDA) con 2 livelli. (2 neuroni per strato). Sto cercando di far apprendere 2 semplici funzioni polinomiali quadratiche usando la backpropagation .
Ma invece di convergere, è divergente (l'output sta diventando infinito)
Ecco alcuni dettagli in più su ciò che ho provato:
- Avevo impostato i pesi iniziali su 0, ma poiché era divergente ho randomizzato i pesi iniziali (intervallo: da -0,5 a 0,5)
- Ho letto che una rete neurale potrebbe divergere se il tasso di apprendimento è troppo alto, quindi ho ridotto il tasso di apprendimento a 0,000001
- Le due funzioni che sto cercando di ottenere per aggiungere sono: 3 * i + 7 * j + 9 e j * j + i * i + 24 (sto dando il livello i e j come input)
- Lo avevo implementato come un singolo strato in precedenza e questo poteva approssimare le funzioni polinomiali meglio di quanto non faccia ora
- Sto pensando di implementare lo slancio in questa rete, ma non sono sicuro che possa aiutarlo a imparare
- Sto usando una funzione di attivazione lineare (come in no)
- All'inizio c'è un'oscillazione ma l'uscita inizia a divergere nel momento in cui uno qualsiasi dei pesi diventa maggiore di 1
Ho controllato e ricontrollato il mio codice ma non sembra esserci alcun problema con esso.
Quindi, ecco la mia domanda: cosa non va qui?
Qualsiasi puntatore sarà apprezzato.