# Temporal difference learning

Il temporal difference (TD) learning, ovvero l'apprendimento mediante differenza temporale, indica una classe di metodi di reinforcement learning che basano il proprio apprendimento sul bootstrap dalla stima corrente della funzione obiettivo: questi metodi campionano dall'ambiente, così come il Metodo Monte Carlo, ma eseguono gli aggiornamenti della funzione di valore di stato basandosi sulle stime correnti, come avviene, invece, nella programmazione dinamica.
A differenza dei metodi Monte Carlo che modificano le loro stime solo quando il risultato finale è noto, questi metodi di distanza temporale adattano le proprie previsioni in modo dinamico, così da avere previsioni sul futuro più accurate, prima ancora che il risultato finale sia a disposizione. Questa è, appunto, una forma di bootstrap, come si evince dal seguente esempio:
    "Supponi di voler prevedere il tempo per sabato e di avere un modello che prevede il tempo di sabato, avendo a disposizione il clima di ogni giorno della settimana. Di norma, aspetteresti fino a sabato e solo allora aggiusterai tutti i tuoi modelli. Tuttavia, quando è, ad esempio, venerdì, dovresti già avere una buona idea di come potrebbe essere il tempo sabato - e quindi essere in grado di cambiare, diciamo, il modello di sabato prima dell'arrivo di sabato".
I metodi di differenza temporale sono in stretta correlazione al modello di differenza temporale dell'apprendimento animale.

## Formulazione matematica

Il metodo tabulare TD(0), uno dei metodi TD più semplici, stima la funzione di valore di stato di un processo decisionale di Markov (MDP) a stati finiti in base a una policy (o politica) $\pi$. Sia $V^{\pi }$la funzione del valore di stato di un MDP che ha stati $(s_{t})_{t\in \mathbb {N} }$, ricompense $(r_{t})_{t\in \mathbb {N} }$e un fattore di sconto $\gamma$per la policy $\pi$:
    $V^{\pi }(s)=E_{\pi }\left\{\sum _{t=0}^{\infty }\gamma ^{t}r_{t}{\Bigg |}s_{0}=s\right\}$
$V^{\pi }$soddisfa l'equazione di Hamilton-Jacobi-Bellman: V$^π$(s)=E$_π${r$_0$+γV$^π$(s$_1$)|s$_0$=s}{\textstyle V^{\pi }(s)=E_{\pi }\{r_{0}+\gamma V^{\pi }(s_{1})|s_{0}=s\}}quindi $r_{0}+\gamma V^{\pi }(s_{1})$ è uno stimatore non condizionato (a bias nullo) per $V^{\pi }(s)$. Questa osservazione giustifica il seguente algoritmo per stimare $V^{\pi }$. L'algoritmo inizializza una tabella $V(s)$ con valori arbitrati, scegliendo un valore per ciascuno degli stati del processo markoviano: viene inoltre fissato un tasso di apprendimento $\alpha$positivo. A questo punto viene valutata la policy $\pi$, e una volta ottenuta la ricompensa $r$, viene aggiornata la funzione del valore di stato per il vecchio stato usando la seguente regola:
    $V(s)\leftarrow V(s)+\alpha (\overbrace {r+\gamma V(s')} ^{\text{The TD target}}-V(s))$
dove $s$e $s'$indicano, rispettivamente, il vecchio e il nuovo stato.

## TD-Lambda

TD-Lambda è un algoritmo di apprendimento creato da Richard S. Sutton basato su un precedente lavoro sull'apprendimento delle differenze temporali di Arthur Samuel. Questo algoritmo è stato notoriamente applicato da Gerald Tesauro per creare TD-Gammon, un programma che ha imparato a giocare a backgammon al livello di giocatori esperti umani.
Il parametro $\lambda$ può assumere valori compresi tra 0 e 1. Aumentando il valore di lambda, viene dato maggior peso alle ricompense che si ottengono in stati distanti da quello corrente.