# Regola delta

La regola delta (delta rule) è una regola di discesa del gradiente per aggiornare i pesi dei segnali di input che giungono ad un percettrone. Si tratta di un caso particolare del più generale algoritmo di retropropagazione.

## Enunciato

Per un neurone $j$ con una funzione d'attivazione $g(x)$, la regola delta per l'$i$-esimo peso $w_{ji}$ è data da
    $\Delta w_{ji}=\alpha (t_{j}-y_{j})g'(h_{j})x_{i}$,
dove
* $\alpha$ è una costante piccola chiamata tasso di apprendimento (learning rate)
* $g(x)$ è la funzione d'attivazione del neurone e $g'$ la sua derivata
* $t_{j}$ è l'output desiderato
* $h_{j}$ è la somma pesata degli input al neurone
* $y_{j}$ è l'output vero
* $x_{i}$ è l'$i$-esimo input.
Valgono: $h_{j}=\sum x_{i}w_{ji}$ e $y_{j}=g(h_{j})$.
La regola delta è spesso semplificata se la funzione d'attivazione è lineare come
    $\Delta w_{ji}=\alpha (t_{j}-y_{j})x_{i}$
mentre la regola delta è simile alla regola di aggiornamento del percettrone, come si ricava la regola è diverso. Il percettrone usa la funzione gradino di Heaviside come funzione d'attivazione $g(h)$, il che significa che $g'(h)$ non esiste in zero, e che è uguale a zero altrove, e ciò rende l'applicazione diretta della regola impossibile.

## Derivazione della regola delta

La regola delta si ricava a partire dalla minimizzazione dell'errore sull'output della rete neurale tramite la discesa del gradiente. L'errore per una rete neurale con $j$ output può essere misurato come
    $E=\sum _{j}{\frac {1}{2}}(t_{j}-y_{j})^{2}$.
In questo caso, occorre muoversi nello "spazio dei pesi" del neurone (lo spazio di tutti i valori che possono assumere i pesi) in proporzione al gradiente della funzione d'errore rispetto a ogni peso. Per fare ciò, si calcola la derivata parziale dell'errore rispetto a ogni peso. Per l'$i$-esimo peso, la derivata è
    ${\frac {\partial E}{\partial w_{ji}}}={\frac {\partial \left({\frac {1}{2}}\left(t_{j}-y_{j}\right)^{2}\right)}{\partial w_{ji}}}$.
dove è stata omessa la sommatoria siccome la derivata è relativa al $j$-esimo neurone.
Il calcolo procede con l'applicazione della regola della catena:
    $={\frac {\partial \left({\frac {1}{2}}\left(t_{j}-y_{j}\right)^{2}\right)}{\partial y_{j}}}{\frac {\partial y_{j}}{\partial w_{ji}}}=-\left(t_{j}-y_{j}\right){\frac {\partial y_{j}}{\partial w_{ji}}}$
mentre la derivata rimanente si calcola ancora con la regola della catena, ma derivando rispetto all'intero input di $j$, ovvero $h_{j}$:
    $=-\left(t_{j}-y_{j}\right){\frac {\partial y_{j}}{\partial h_{j}}}{\frac {\partial h_{j}}{\partial w_{ji}}}$
Si noti che l'output del $j$-esimo neurone, $y_{j}$, è semplicemente la funzione d'attivazione $g$ del neurone applicata al suo input $h_{j}$. Si può quindi scrivere la derivata di $y_{j}$ rispetto a $h_{j}$ semplicemente come la derivata prima di $g$:
    $=-\left(t_{j}-y_{j}\right)g'(h_{j}){\frac {\partial h_{j}}{\partial w_{ji}}}$
A questo punto, si riscrive $h_{j}$ nell'ultimo termine come la somma su tutti i $k$ pesi di ogni peso $w_{jk}$ moltiplicati per il loro input corrispondente $x_{k}$:
    $=-\left(t_{j}-y_{j}\right)g'(h_{j}){\frac {\partial \left(\sum _{i}x_{i}w_{ji}\right)}{\partial w_{ji}}}$
Poiché interessa solamente l'$i$-esimo peso, l'unico termine della sommatoria che è rilevante è $x_{i}w_{ji}$. Chiaramente,
    ${\frac {\partial x_{i}w_{ji}}{\partial w_{ji}}}=x_{i}$,
portando all'equazione finale per il gradiente:
    ${\frac {\partial E}{\partial w_{ji}}}=-\left(t_{j}-y_{j}\right)g'(h_{j})x_{i}$
Come evidenziato sopra, la discesa del gradiente dice che la variazione di ciascun peso deve essere proporzionale al gradiente La scelta di una costante di proporzionalità $\alpha$ e l'eliminazione del segno meno (siccome si cerca la direzione che diminuisce il gradiente), permettono di arrivare all'equazione cercata:
    $\Delta w_{ji}=\alpha (t_{j}-y_{j})g'(h_{j})x_{i}$.