======Gradient descent====== È un algoritmo, ma non è strettamente legato alle reti neurali https://en.wikibooks.org/wiki/Artificial_Neural_Networks/Error-Correction_Learning E' usato nelle reti neurali per la fase di addrestramento? Data una rete neurale N x M * N è il numero totale di layer * l è indice di un generico layer (1..N) * Ml è il numero totale di neuroni su un layer l * j è indice di un generico neurone sul layer l (1..Ml) * x è un vettore con indice i (1..Ml) * w è un vettore con indice i e j (i collegamenti tra due layer sono Ml·Ml) - Si crea una nuova rete neurale fornendo dei pesi random (vedi nota sotto [[neurali:gradient_descent&#nota_sui_pesi_iniziali]]) - Si fornisce un esempio di input (x) e di output atteso (yo) - Si calcola l'output effettivo, usando le funzioni di attivazione sigmaxx: y = sigmaxx(zetaxx(w,x)) - Si calcola una funzione di errore: e = yo - y - Poiché il valore attuale di un peso w[n+1] **dipende dal valore del peso al passo precedente w[n]** - Si applica una **formula** che modifica il valore attuale dei pesi in base all'errore calcolato rispetto all'output atteso NOTA: w[n+1] vuol dire che si sta svolgendo un passo n dell'addestramento. L'addrestramento consiste nel fare dei calcoli che modificano i pesi. w[n+1] significa che si è giunti a fornire un certo input (n+1-esimo), che ha prodotto (istantaneamente) un certo output e che ha permesso di ottenere una nuova versione del peso w La **formula** è stata ottenuta calcolando l'[[neurali:errore quadratico medio]] di tutti i dati attesi di esempio, aggiungendo un termine (weight decay) che tende a diminuire la dimensione dei pesi per evitare [[neurali:parametri_di_progettazione_ann|overfitting]] ((http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm)) . Se voglio minimizzare questo errore variando i pesi sinaptici, si deve eseguire una derivata rispetto ai pesi **Un'altra** **formula** produce il nuovo peso in base: - al vecchio peso, - all'errore, che dipende da sigmaxx - ad un coefficiente etaxx ==Conseguenze== Si otterrà una **dipendenza** dalla derivata della funzione di attivazione **sigmax**x (deve essere facile da derivare) Si ottiene una **dipendenza dell'output di un layer (l+1) dal layer precedente (l)** che spiega il significato del nome [[neurali:error backpropagation]] ====Parametro di step size==== [[neurali:parametri_di_progettazione_ann]] **etaxx** viene chiamato "dimensione del passo", ma poi, nella //backpropagation rule// si chiama "learning rate" ====nota sui pesi iniziali==== Se si inizializzassero tutti i pesi di tutti i layer a zero, il precedente algoritmo di ottimizzazione potrebbe produrre la soluzione in cui tutti i neuroni di tutti i layer hanno tutti gli stessi pesi. Per questo motivo la rete viene sempre inizializzata con **pesi random**.