====== Error Backpropagation ====== In sostanza: Durante l'addestramento [[neurali:supervisioned learning rule]], basato su **error backpropagation**, si parte sempre dai dati di input e dati di output desiderati. Potrebbe sembrare che manchi l'informazione necessaria a riempire i pesi delle sinapsi dei neuroni hidden, invece basta applicare l'agoritmo di erro backpropagation * si calcola l'output effettivo e l'errore prodotto rispetto ai dati desiderati * si fa risalire indietro questo errore (nel verso matematicamente inverso a quello dell'output) per calcolare come devono essere modificati i pesi sinaptici * A volta bastano 10 epoche, cioè basta ripetere 10 volte l'addestramento con i dati. Altre volte sono necessarie 100 epoche, anche per la stessa rete, perché? * Perché l'addestramento di una rete parte sempre con pesi sinaptici random.. ====Precondizionamento==== Vediamo due modi di operare molto utili per progettare reti e per addestrarle * **Early stop**: fermarsi precocemente, per evitare [[neurali:parametri di progettazione ann#overfitting]]. Come faccio a sapere quando? Devo avere da parte un po' di dati anche per fare un test di validità del funzionamento di quello che ho ottenuto * **weight decay**: si aggiunge un parametro (momentum?) per evitare che i pesi sinaptici tendano a crescere a dismisura. * **precondizionamento** da fare prima dell'addestramento per **normalizzare** i dati , i pesi sinaptici, il learning rate. ===Normalizzazione=== * **Normalizzare** i dati di input e di output significa avere una gaussiana con media~0 e varianza~1. * **Normalizzare** i pesi sinpatici vuol dire usare per i pesi una distribuzione di probabilità uniforme (non gaussiana) da -√1/K a +√1/K, con K= n. nodi entranti in ogni neurone. * Molto meglio usare una funzione di attivazione **tanh** (non sigmoid). * **Normalizzare** il learning rate vuol dire che si può partire con questi valori e diminuirli: * con unsupervisioned learning λ=1 * con supervisione learning λ=√1/N con N è il numero di dati forniti in input