Regola delta
# 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}$.
