Deep Reinforcement Learning
L'apprendimento per rinforzo profondo (DRL) usa reti neurali per apprendere politiche e valori da input grezzi, come i pixel. Scopri DQN, PPO, i risultati e i limiti.
L'apprendimento per rinforzo profondo (DRL) combina l'apprendimento per rinforzo (RL), in cui un agente impara per tentativi ed errori a massimizzare la ricompensa, con le reti neurali profonde, che rappresentano ciò che l'agente apprende. L'RL classico memorizza in una tabella un valore per ogni stato, un approccio impossibile quando lo stato è un'immagine di una telecamera o l'insieme continuo degli angoli articolari di un robot. Una rete neurale, invece, mappa osservazioni grezze ad alta dimensionalità, come pixel, scansioni lidar o testo, su valori o probabilità delle azioni e generalizza a stati mai incontrati. Nel 2015, il DQN di DeepMind rese famoso questo approccio imparando a giocare a 49 titoli Atari 2600 usando solo i pixel dello schermo e il punteggio del gioco, con un'unica architettura di rete e un unico insieme di iperparametri, raggiungendo un livello paragonabile a quello di un tester professionista di videogiochi.
Come funziona l'RL profondo#
L'agente continua a seguire il ciclo dell'RL di un processo decisionale di Markov: osserva uno stato, agisce, riceve una ricompensa e aggiorna il modello. La differenza è che ora una rete con milioni di parametri rappresenta uno o più dei seguenti elementi:
- Funzione di valore: la rete prevede il ritorno atteso per ogni azione e l'agente sceglie quella con il valore più alto. La rete DQN riceveva gli ultimi quattro fotogrammi del gioco, ridimensionati a 84×84 pixel, per poter rilevare il movimento.
- Politica: la rete restituisce la probabilità di ogni azione oppure la media e la dispersione di un'azione continua, come l'angolo di sterzata; i metodi del gradiente della politica la modificano direttamente per favorire le azioni che hanno ottenuto un ritorno elevato.
- Attore e critico: una rete attore sceglie le azioni, mentre una rete critico stima i valori per indicare all'attore quanto ogni azione sia stata migliore del previsto, riducendo il rumore negli aggiornamenti.
- Modello del mondo: gli agenti basati su modelli, come Dreamer, addestrano una rete a prevedere osservazioni e ricompense future, quindi apprendono una politica all'interno del simulatore così appreso.
Addestrare una rete sui dati che l'agente genera autonomamente è instabile, perché i fotogrammi consecutivi sono fortemente correlati e gli obiettivi cambiano con l'evoluzione della rete. DQN ha risolto il problema con due idee mantenute dagli algoritmi successivi: un buffer di replay delle esperienze, che permette di addestrare il modello su minibatch casuali di transizioni passate, e una rete obiettivo separata, aggiornata solo periodicamente:
Gradienti della politica nel codice#
I metodi del gradiente della politica ignorano del tutto le tabelle dei valori: campionano le azioni dalla rete, quindi aumentano la probabilità di quelle seguite da un ritorno elevato. Questo esempio PyTorch addestra una piccola rete di politica con REINFORCE, l'algoritmo originale del gradiente della politica, per mantenere in equilibrio un palo su un carrello mobile nell'ambiente CartPole di Gymnasium:
import gymnasium as gym
import torch
from torch import nn
torch.manual_seed(0)
env = gym.make("CartPole-v1")
policy = nn.Sequential(nn.Linear(4, 64), nn.ReLU(), nn.Linear(64, 2)) # cart and pole state -> logits for left/right
optimizer = torch.optim.Adam(policy.parameters(), lr=0.02)
lengths = []
for episode in range(500):
obs, _ = env.reset(seed=episode)
log_probs, rewards, done = [], [], False
while not done: # play one episode with the current policy, earning +1 per step the pole stays up
dist = torch.distributions.Categorical(logits=policy(torch.as_tensor(obs)))
action = dist.sample()
obs, reward, terminated, truncated, _ = env.step(action.item())
log_probs.append(dist.log_prob(action))
rewards.append(reward)
done = terminated or truncated
# REINFORCE: raise the log-probability of actions followed by above-average discounted return
returns = torch.tensor([sum(0.99**k * r for k, r in enumerate(rewards[t:])) for t in range(len(rewards))])
loss = -(torch.stack(log_probs) * (returns - returns.mean()) / (returns.std() + 1e-8)).sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
lengths.append(len(rewards))
print(f"Average episode length: first 20 = {sum(lengths[:20]) / 20:.0f}, last 20 = {sum(lengths[-20:]) / 20:.0f}")Stampa first 20 = 14, last 20 = 500: la rete non addestrata fa cadere il palo dopo circa 14 passi; dopo 500 episodi, invece, lo mantiene in equilibrio per tutti i 500 passi consentiti in ogni episodio. Con altri valori iniziali casuali, lo stesso script può bloccarsi o peggiorare a metà dell'addestramento: è questa l'elevata varianza che i critici e gli aggiornamenti limitati dell'ottimizzazione prossimale della politica (PPO) mirano a ridurre. Librerie come Stable-Baselines3 offrono implementazioni testate di PPO, DQN e soft actor-critic (SAC).
Applicazioni pionieristiche#
- Videogiochi: dopo Atari, gli agenti di RL profondo hanno sconfitto campioni mondiali di Go con AlphaGo e raggiunto il livello di grande maestro in StarCraft II con AlphaStar, combinando l'apprendimento dalle partite umane con l'autoapprendimento tramite RL.
- Gare di droni: il drone Swift dell'Università di Zurigo, addestrato con RL profondo in simulazione e perfezionato con dati di volo reali, nel 2023 ha vinto diverse gare testa a testa contro ciascuno dei tre piloti campioni e ha stabilito il tempo di gara registrato più veloce.
- Energia da fusione: DeepMind e lo Swiss Plasma Center dell'EPFL hanno usato una politica di RL profondo per controllare le bobine magnetiche di un tokamak e dare al plasma diverse configurazioni, compresa quella di due «gocce» di plasma separate contemporaneamente.
- Robotica: i robot quadrupedi imparano a camminare su terreni accidentati usando politiche addestrate su migliaia di robot simulati; attrito e massa vengono randomizzati affinché la politica funzioni anche sull'hardware reale.
- Modelli linguistici: il perfezionamento tramite RL delle politiche Transformer, con ricompense basate sulle preferenze o verificate automaticamente, ha prodotto gli assistenti conversazionali e i modelli di ragionamento odierni.
La percezione come osservazione#
La rete neurale convoluzionale di DQN doveva imparare a vedere basandosi solo sulla ricompensa, a partire da 84×84×4 = 28,224 valori di pixel per passaggio. Molti sistemi robotici e di guida, invece, forniscono alla policy l'output di un modello di visione artificiale preaddestrato, riducendo le dimensioni dell'osservazione e consentendo all'algoritmo RL di dedicare i propri campioni alle decisioni. Ultralytics YOLO26 in modalità di tracking trasforma ogni fotogramma della videocamera in una classe, un riquadro e un ID persistente per ogni oggetto: uno stato incentrato sugli oggetti da cui una policy può anche ricavare il movimento di ciascun oggetto attraverso i fotogrammi.
Sfide#
Il deep RL richiede molti dati: DQN è stato addestrato su 50 milioni di fotogrammi per gioco, circa 38 giorni di gioco, motivo per cui la maggior parte delle policy robotiche viene addestrata in simulazione e poi trasferita all'hardware. La fisica simulata non corrisponde mai perfettamente alla realtà, quindi gli ingegneri randomizzano attrito, masse, illuminazione e texture con la randomizzazione del dominio e aggiungono dati sintetici per le condizioni rare. I risultati variano anche in base ai seed casuali, agli iperparametri e ai dettagli di implementazione: un problema di riproducibilità descritto in Deep Reinforcement Learning That Matters. Un ottimizzatore efficace trova anche scappatoie in qualsiasi ricompensa imperfetta: questo malfunzionamento è noto come reward hacking, come quando un agente di corse in barca ha imparato a girare all'infinito raccogliendo punti invece di finire la gara.
Deep RL a confronto con i termini correlati#
- Apprendimento per rinforzo: Il campo più ampio. L'RL tabellare funziona per problemi di piccole dimensioni, mentre il deep RL è RL con reti neurali come approssimatori di funzioni.
- Deep learning: Il deep learning tradizionale si addestra su un dataset fisso e annotato. Nel deep RL, sono le azioni dell'agente stesso a generare i dati e il segnale di addestramento è una ricompensa ritardata anziché un'etichetta.
- Apprendimento per rinforzo da feedback umano (RLHF): Metodo di deep RL in cui un modello di ricompensa appreso dai confronti tra preferenze umane sostituisce una ricompensa definita manualmente; viene usato per allineare i modelli linguistici.
- Controllo predittivo basato su modello: L'MPC risolve una nuova ottimizzazione su un modello esplicito a ogni passaggio di controllo, mentre una policy di deep RL addestrata sceglie ogni azione con un singolo passaggio in avanti della rete.










