Solo per divertimento, sto cercando di sviluppare una rete neurale.
Ora, per backpropagation, ho visto due tecniche.
Il primo viene utilizzato qui e anche in molti altri luoghi.
Quello che fa è:
- Calcola l'errore per ciascun neurone di output.
- Lo ripropaga nella rete (calcolando un errore per ciascun neurone interno).
- Aggiorna i pesi con la formula: (dov'è la variazione di peso, la velocità di apprendimento, l'errore del neurone che riceve l'input dalla sinapsi e che è l'output inviato sulla sinapsi).
- Si ripete per ogni voce del set di dati, tutte le volte che è necessario.
Tuttavia, la rete neurale proposta in questo tutorial (disponibile anche su GitHub) utilizza una tecnica diversa:
- Utilizza una funzione di errore (l'altro metodo ha una funzione di errore, ma non la utilizza per l'allenamento).
- Ha un'altra funzione che può calcolare l'errore finale a partire dai pesi.
- Riduce al minimo quella funzione (attraverso la discesa del gradiente).
Ora, quale metodo dovrebbe essere usato?
Penso che il primo sia quello più utilizzato (perché ho visto diversi esempi utilizzarlo), ma funziona anche?
In particolare, non so:
- Non è più soggetto ai minimi locali (poiché non utilizza funzioni quadratiche)?
- Poiché la variazione di ciascun peso è influenzata dal valore di uscita del suo neurone di uscita, le voci del set di dati che producono appena valori più alti nei neuroni (non solo quelli di uscita) influenzano i pesi più di altre voci?
Ora preferisco la prima tecnica, perché trovo più semplice da implementare e più facile da pensare.
Tuttavia, se ha i problemi che ho menzionato (che spero non lo faccia), c'è qualche motivo reale per usarlo sul secondo metodo?