Temporal difference learning: cos’è e come funziona l’apprendimento per differenza temporale
Scopri cos'è il temporal difference learning, come funziona il TD(0), cosa lo distingue da Monte Carlo e come si lega a SARSA e Q-learning.

Se hai già letto qualcosa sul reinforcement learning, avrai incontrato un problema ricorrente: come fa un agente a capire se una scelta fatta ora era buona, quando la ricompensa arriva soltanto molti passi più tardi? La risposta più elegante a questa domanda si chiama temporal difference learning, in italiano apprendimento per differenza temporale, spesso abbreviato in TD learning.
È uno di quei concetti che stanno sotto il cofano di moltissimi sistemi, dai primi programmi che giocavano a backgammon fino agli agenti che imparano a muoversi in ambienti simulati. In questa guida ti spiego cos’è, come funziona davvero, quali varianti esistono e quando conviene usarlo, con esempi concreti e senza formule inutilmente pesanti.
L’obiettivo è che a fine lettura tu possa leggere un articolo tecnico sull’argomento, o scrivere le prime righe di codice, senza sentirti perso.
Cos’è il temporal difference learning
Il temporal difference learning è una famiglia di metodi con cui un agente impara a stimare quanto sia vantaggioso trovarsi in un certo stato, aggiornando la propria stima passo dopo passo, a partire dalla differenza tra due previsioni successive. Non aspetta la fine di un episodio per imparare: usa ciò che osserva subito dopo ogni mossa.
Il metodo è stato formalizzato da Richard Sutton alla fine degli anni Ottanta, e da allora è uno dei pilastri dell’apprendimento per rinforzo.
Per capire perché sia così importante, conviene ricordare il contesto. Nel reinforcement learning un agente interagisce con un ambiente: osserva uno stato, sceglie un’azione, riceve una ricompensa e passa a un nuovo stato. Lo scopo è massimizzare la ricompensa totale accumulata nel tempo, non quella immediata.
Il problema dell’assegnazione del merito
Immagina una partita a scacchi. La ricompensa vera arriva solo alla fine, con vittoria, sconfitta o patta. Ma quale delle quaranta mosse giocate ha deciso il risultato? Questo è il cosiddetto problema dell’assegnazione del merito nel tempo, e nessun metodo di apprendimento per rinforzo può ignorarlo.
Il TD learning lo affronta in modo pragmatico: invece di aspettare l’esito finale, ogni previsione viene corretta usando la previsione successiva, che è un po’ più informata perché è stata fatta più vicino al traguardo.
Valore di uno stato, in parole semplici
Il concetto centrale è la funzione di valore. Il valore di uno stato è la ricompensa totale che l’agente si aspetta di ottenere a partire da lì, seguendo la propria strategia. Uno stato dove sei a un passo dal traguardo ha un valore alto, uno vicino a una trappola ha un valore basso.
Se conosci già i processi decisionali di Markov, che ti spiego meglio nella guida al processo decisionale di Markov, riconoscerai il quadro formale in cui tutto questo si muove.
Come funziona: l’idea della differenza temporale
Il cuore del metodo è un aggiornamento molto semplice. L’agente si trova nello stato S, compie un’azione, riceve una ricompensa R e arriva nello stato S’. A questo punto confronta due numeri: ciò che pensava valesse S prima di muoversi, e ciò che ora pensa valga R più il valore di S’.
La differenza tra questi due numeri è l’errore di differenza temporale. Se è positiva, le cose sono andate meglio del previsto e il valore di S viene alzato. Se è negativa, è andata peggio e il valore viene abbassato.
La formula, spiegata passo per passo
Nella versione più semplice, chiamata TD(0), l’aggiornamento si scrive così: V(S) diventa V(S) più alfa per il termine tra parentesi, cioè R più gamma per V(S’) meno V(S). Niente paura, è più banale di quanto sembri.
Alfa è il tasso di apprendimento: quanto peso dai alla nuova informazione rispetto a ciò che sapevi. Gamma è il fattore di sconto: quanto conta il futuro rispetto al presente. L’espressione tra parentesi, appunto, è l’errore TD.
Il punto chiave è che il bersaglio dell’aggiornamento, R più gamma per V(S’), contiene a sua volta una stima. L’agente si corregge usando una previsione per migliorare un’altra previsione.
Questa tecnica si chiama bootstrapping, ed è ciò che distingue il TD learning da altri approcci.
Un esempio con il tragitto verso l’ufficio
Un’analogia aiuta. Ogni mattina stimi quanto ci metterai ad arrivare in ufficio: diciamo quaranta minuti. Parti, e dopo dieci minuti ti accorgi che sei già a metà strada, per cui ora pensi di arrivare in trentacinque minuti totali.
Con un metodo che aspetta la fine, correggeresti la stima iniziale solo una volta arrivato. Con il TD learning la correggi subito: la tua previsione di partenza era troppo pessimista, e la differenza tra le due stime dice di quanto.
Fatto ogni giorno, e a ogni tappa del percorso, questo piccolo aggiustamento converge verso previsioni sempre più accurate.
TD, Monte Carlo e programmazione dinamica a confronto
Per capire dove si colloca il TD learning, aiuta metterlo accanto ai due approcci vicini: i metodi Monte Carlo e la programmazione dinamica. Tutti e tre servono a stimare valori, ma lo fanno con filosofie diverse.
Monte Carlo: aspettare la fine dell’episodio
I metodi Monte Carlo giocano un intero episodio, calcolano la ricompensa totale effettivamente ottenuta e usano quel numero per aggiornare i valori degli stati attraversati. Sono semplici e non soffrono del bias del bootstrapping, perché usano risultati reali.
Hanno però due difetti. Funzionano solo con episodi che terminano, e le loro stime hanno una varianza alta, perché una singola partita contiene molto rumore: una mossa buona può finire in una sconfitta per puro caso.
Programmazione dinamica: serve il modello
La programmazione dinamica fa bootstrapping come il TD, ma richiede di conoscere perfettamente il modello dell’ambiente: le probabilità di transizione e le ricompense. Nei problemi reali, quasi mai le possiedi.
Il TD learning prende il meglio dei due mondi. Impara dall’esperienza diretta, come Monte Carlo, senza bisogno di un modello. E aggiorna a ogni passo con il bootstrapping, come la programmazione dinamica, senza aspettare la fine.
Il compromesso tra bias e varianza
In sintesi, il TD ha più bias ma meno varianza dei metodi Monte Carlo. Il bias nasce perché il bersaglio dipende da una stima ancora imprecisa; la varianza resta bassa perché ogni aggiornamento dipende da un solo passo di rumore e non da un intero episodio.
Nella pratica, il TD converge di solito più in fretta, soprattutto in compiti lunghi o continui, ed è per questo che domina nelle applicazioni.
Dal valore degli stati al controllo: SARSA e Q-learning
Finora abbiamo parlato di predizione, cioè di stimare il valore degli stati seguendo una strategia fissa. Ma di solito vogliamo anche il controllo: scoprire la strategia migliore. Per farlo, il TD learning si estende dai valori degli stati ai valori delle coppie stato-azione, chiamati valori Q.
Da qui nascono i due algoritmi più celebri della famiglia.
SARSA: impara dalla strategia che segue
SARSA prende il nome dalla sequenza che usa per ogni aggiornamento: stato, azione, ricompensa, nuovo stato, nuova azione. Aggiorna il valore Q della coppia corrente usando l’azione che l’agente sceglierà davvero nel passo successivo, esplorazione compresa.
Si dice un algoritmo on-policy, perché valuta e migliora la stessa strategia con cui sta giocando. Tende a essere più prudente: se esplorare comporta rischi, ne tiene conto nei valori.
Q-learning: impara la strategia migliore mentre ne segue un’altra
Il Q-learning usa invece, nel bersaglio, il valore della migliore azione possibile nel nuovo stato, indipendentemente da quella che l’agente sceglierà. È un algoritmo off-policy: può esplorare in modo anche casuale e intanto imparare la strategia ottimale.
Se vuoi approfondire passaggi ed esempi, trovi tutto nella guida al Q-learning, che parte proprio da questa idea di aggiornamento temporale.
Un esempio classico: il percorso sul bordo della scogliera
Nei manuali di reinforcement learning compare spesso un piccolo mondo a griglia con una scogliera lungo il bordo. Il percorso più breve costeggia il precipizio, quello più sicuro passa più in alto ma è più lungo.
Il Q-learning impara il percorso ottimo vicino alla scogliera, ma durante l’esplorazione casuale ogni tanto ci cade. SARSA, che tiene conto dell’esplorazione, impara il percorso più sicuro. Due strategie diverse, entrambe sensate, a seconda di cosa ti interessa.
TD(lambda) e le tracce di idoneità
Il TD(0) guarda avanti di un solo passo, Monte Carlo guarda fino alla fine. Esiste una via di mezzo, e si chiama TD(lambda). Un parametro, lambda, che va da zero a uno, regola quanto lontano nel futuro guarda l’aggiornamento.
Con lambda uguale a zero ottieni il TD a un passo; con lambda vicino a uno ti avvicini al comportamento Monte Carlo. I valori intermedi sono spesso i migliori nella pratica.
Cosa sono le tracce di idoneità
L’implementazione più usata si basa sulle tracce di idoneità. Ogni stato visitato recentemente conserva una specie di memoria, un contatore che decade nel tempo. Quando arriva un errore TD, tutti gli stati con una traccia attiva ricevono una parte della correzione, in proporzione a quanto sono stati recenti.
È un modo elegante per far arrivare la notizia di una ricompensa a tutte le mosse che l’hanno preparata, e non solo all’ultima.
Il TD learning e il cervello: la dopamina
Un motivo per cui questo argomento affascina anche chi non programma è un risultato di neuroscienze. Studi condotti negli anni Novanta sui neuroni dopaminergici delle scimmie hanno mostrato che la loro attività assomiglia molto a un errore di previsione della ricompensa, cioè proprio all’errore TD.
Quando arriva una ricompensa inattesa, questi neuroni si attivano. Quando è attesa, restano quieti. Quando una ricompensa prevista non arriva, la loro attività cala.
Questa corrispondenza non significa che il cervello esegua esattamente un algoritmo di informatica, ma ha reso il TD learning un modello di riferimento per studiare l’apprendimento biologico.
Dal TD learning al deep reinforcement learning
Con pochi stati puoi memorizzare i valori in una tabella. Ma negli ambienti reali, come un videogioco con milioni di possibili schermate, la tabella diventa impossibile. La soluzione è approssimare la funzione di valore con un modello, tipicamente una rete neurale.
TD-Gammon, un precursore famoso
Uno dei primi successi spettacolari è stato TD-Gammon, un programma di backgammon sviluppato da Gerald Tesauro all’inizio degli anni Novanta. Usava una piccola rete neurale addestrata con aggiornamenti TD, giocando contro se stesso, e raggiunse un livello vicino ai migliori giocatori umani dell’epoca.
Fu una dimostrazione concreta che apprendimento per differenza temporale e reti neurali potevano funzionare insieme.
Le reti Q profonde
Il passo successivo è stato il Deep Q-Network, in cui una rete neurale profonda stima i valori Q direttamente dai pixel dello schermo. L’aggiornamento resta quello del Q-learning, quindi un errore TD, ma con accorgimenti per rendere stabile l’addestramento, come la memoria di esperienze riutilizzabili e una rete bersaglio separata.
Se vuoi vedere come questi pezzi si compongono, leggi la guida al deep reinforcement learning.
Perché la stabilità è difficile
Mettere insieme bootstrapping, approssimazione con reti neurali e apprendimento off-policy è noto come la triade mortale: combinarli insieme può far divergere l’addestramento. Gran parte della ricerca moderna serve proprio a tenere sotto controllo questo problema.
Per questo, quando implementi un agente, i dettagli contano: tasso di apprendimento, dimensione della memoria, frequenza di aggiornamento della rete bersaglio.
Come si implementa: un esempio in Python
Il bello del TD(0) è che il codice è cortissimo. Ti basta un dizionario che associa a ogni stato un valore e un ciclo che interagisce con l’ambiente. Ecco lo scheletro, che puoi adattare a qualsiasi ambiente discreto, per esempio uno di quelli della libreria Gymnasium.
L’idea è: parti con tutti i valori a zero, esegui molti episodi, e a ogni passo applichi l’aggiornamento.
- Inizializza V(s) a zero per ogni stato e scegli alfa, per esempio 0,1, e gamma, per esempio 0,99.
- All’inizio di ogni episodio, resetta l’ambiente e leggi lo stato iniziale.
- Scegli un’azione secondo la strategia da valutare, esegui il passo e osserva ricompensa e nuovo stato.
- Calcola l’errore TD: ricompensa più gamma per V(nuovo stato) meno V(stato corrente).
- Aggiorna V(stato corrente) sommando alfa per l’errore TD, poi passa al nuovo stato.
Se il nuovo stato è terminale, il suo valore va considerato zero. È un dettaglio che molti principianti dimenticano, e che sporca le stime.
Scegliere alfa e gamma
Un alfa alto fa imparare in fretta ma rende le stime instabili; uno basso è stabile ma lento. Una pratica comune è partire alto e ridurlo col tempo. Gamma vicino a uno dà importanza al lungo periodo, ma rende più difficile la convergenza.
Non esistono valori magici: si sperimenta, osservando la curva della ricompensa per episodio.
Non dimenticare l’esplorazione
Per imparare valori affidabili l’agente deve visitare anche stati nuovi, non solo ripetere ciò che già conosce. Ne parlo in dettaglio nell’articolo su esplorazione e sfruttamento nel reinforcement learning, dove vedrai strategie come epsilon-greedy.
Errori comuni e come evitarli
Chi si avvicina al TD learning inciampa quasi sempre negli stessi punti. Conoscerli prima ti fa risparmiare ore di debug.
Il primo è confondere valore dello stato e valore dell’azione: il TD(0) base stima V, ma per scegliere cosa fare serve Q, oppure un modello dell’ambiente.
Il secondo è ignorare gli stati terminali, come già visto.
Il terzo è usare un tasso di apprendimento troppo alto con ambienti rumorosi: le stime oscillano e sembra che l’algoritmo non converga mai.
Il quarto è giudicare l’agente da pochi episodi. Il reinforcement learning è rumoroso: per capire se sta davvero migliorando servono medie su molte esecuzioni e, idealmente, più semi casuali.
Dove si usa il TD learning
I metodi a differenza temporale sono ovunque, anche quando non si vedono. Lo stesso principio, correggere una previsione con quella successiva, ritorna in molti sistemi moderni.
Giochi e simulazioni
I giochi da tavolo e i videogiochi sono il terreno di prova naturale: ambienti con regole chiare, ricompense definite e possibilità di giocare milioni di partite contro se stessi.
Robotica e controllo
In robotica, gli agenti imparano a camminare o afferrare oggetti in simulazione e poi trasferiscono ciò che hanno appreso al robot reale. Le stime di valore basate su TD sono il motore di molti algoritmi di controllo.
Raccomandazioni, finanza e gestione di risorse
Sistemi di raccomandazione che ottimizzano la soddisfazione nel lungo periodo, gestione dell’energia, allocazione di risorse: sono tutti problemi sequenziali dove la ricompensa arriva in ritardo. Nota che in ambiti sensibili come la finanza servono prudenza e validazione rigorosa, perché un agente può sfruttare in modo imprevisto la funzione di ricompensa.
Algoritmi actor-critic nel post-training dei modelli
Molti metodi moderni usano un critico che stima il valore, addestrato con un obiettivo di tipo TD, per guidare un attore che sceglie le azioni. È la struttura di diversi algoritmi usati anche per rifinire i modelli linguistici, anche se i dettagli variano molto da un laboratorio all’altro.
Vantaggi e limiti in sintesi
I vantaggi principali sono tre: impara online, passo dopo passo; non richiede un modello dell’ambiente; di solito converge più rapidamente dei metodi che aspettano la fine dell’episodio.
I limiti sono altrettanto chiari. Il bootstrapping introduce bias, e quando si combina con le reti neurali può destabilizzare l’addestramento. Inoltre il metodo è sensibile agli iperparametri e a una funzione di ricompensa mal progettata.
La regola pratica: se hai episodi brevi e rumorosi, prova anche Monte Carlo; se hai compiti lunghi o continui, il TD è quasi sempre il punto di partenza giusto.
Conclusioni e prossimi passi
Il temporal difference learning è l’idea che permette a un agente di imparare a ogni passo, correggendo una previsione con quella successiva. Una volta capito questo meccanismo, SARSA, Q-learning, actor-critic e i moderni metodi profondi smettono di sembrare scatole nere e diventano varianti di un’unica storia.
Ora tocca a te: scegli un ambiente semplice, come una griglia o uno dei classici di Gymnasium, implementa il TD(0) in venti righe e guarda i valori convergere. È il modo migliore per interiorizzare il concetto.
Se questa guida ti è stata utile, esplora gli altri approfondimenti sul reinforcement learning di questo sito e lascia un commento con le tue domande: le prossime guide partiranno proprio da quelle.