PPO (2017): il reinforcement learning che non fa passi troppo lunghi

Nel 2017 un gruppo di OpenAI propose un modo semplice per aggiornare la strategia di un agente senza mai spostarla troppo in una volta sola. Rileggiamo PPO, l'algoritmo diventato lo standard di fatto del reinforcement learning e, più tardi, uno degli ingredienti dietro ChatGPT.

C’è un fallimento tipico di chi allena un robot simulato a camminare con l’apprendimento per rinforzo. Per centinaia di tentativi la creatura barcolla, cade, si rialza, e lentamente migliora: fa due passi, poi tre, poi attraversa mezzo schermo. Poi arriva un singolo aggiornamento sbagliato e, nel giro di un istante, dimentica tutto. Ricrolla a terra e non si rialza più, come se le avessero cancellato la memoria muscolare. Non è un bug del codice: è la natura stessa di come questi sistemi imparano. Nel 2017 un gruppo di OpenAI pubblicò un paper — Proximal Policy Optimization Algorithms — che affrontava proprio questa fragilità con una ricetta tanto pragmatica da diventare, negli anni seguenti, l’algoritmo di reinforcement learning più usato al mondo.

REINFORCE, actor-critic, A3C e PPO: i metodi a gradiente di policy sono derivati nel libro.

Leggi «Metodi a gradiente di policy» nel libro →

Un robot che dimentica come si cammina

Per capire perché un aggiornamento possa essere catastrofico bisogna sapere cosa aggiorna. L’agente segue una policy: una strategia che, data la situazione attuale, decide quale azione prendere — o meglio, con quale probabilità prendere ciascuna azione. Imparare significa spostare quella strategia nella direzione che, stando all’esperienza appena raccolta, sembra fruttare più ricompensa. Il metodo classico per farlo si chiama policy gradient: raccogli un po’ di partite, calcoli in che verso conviene spingere la strategia e la spingi.

Il diavolo è nel «di quanto». L’esperienza raccolta è una manciata di partite, un campione rumoroso e parziale. Se ti fidi troppo e sposti la strategia di molto in una sola volta, rischi di finire in una regione in cui la policy si comporta malissimo — e da lì le partite successive saranno tutte disastrose, quindi anche i dati con cui dovresti correggerti diventano spazzatura. È un pozzo da cui non si risale. È come regolare una ricetta assaggiando un solo boccone: se dopo quell’assaggio stravolgi tutte le dosi in un colpo, puoi rovinare il piatto senza più modo di tornare indietro, perché il sapore di partenza non c’è più.

TRPO: la soluzione elegante e scomoda

Un paper precedente dello stesso autore principale, John Schulman, TRPO, aveva dato una risposta rigorosa: prima di ogni passo, calcola con precisione quanto puoi allontanarti dalla strategia attuale restando al sicuro, e non superare quel limite. Il limite è espresso come una «distanza» massima tra la vecchia e la nuova policy. L’immagine è quella di un geometra che, prima di ogni passo su un terreno incerto, misura esattamente fin dove il suolo regge. Funziona ed è teoricamente solido. Ma per calcolare quel confine TRPO richiede matematica di secondo ordine, curvature e vincoli, pesante da implementare e mal digeribile per le architetture con reti neurali grandi o con parti condivise. È la classica soluzione giusta che nessuno ha voglia di usare.

L’idea di PPO: un guardrail dentro l’obiettivo

PPO parte da un’intuizione più modesta e più furba: invece di calcolare a ogni passo quanto è lecito muoversi e imporlo come vincolo esterno, scriviamo la funzione da massimizzare in modo che smetta da sola di premiare gli spostamenti troppo grandi. Il guardrail non è più un geometra che misura: è incorporato nel gioco stesso, come il limitatore di un motore che taglia la potenza oltre un certo numero di giri, senza bisogno di un autista che calcoli la velocità ottimale.

Il meccanismo ruota attorno a un rapporto. Per ogni azione osservata si guarda quanto la nuova policy la ritiene probabile rispetto alla vecchia: se il rapporto è 1, nulla è cambiato; se è 1,3, la nuova strategia rende quell’azione il 30% più probabile. PPO moltiplica questo rapporto per quanto quell’azione si è rivelata buona (il cosiddetto vantaggio), ma poi taglia il rapporto in una fascia stretta attorno a 1 — nel paper, tra 0,8 e 1,2. Dentro la fascia l’obiettivo si comporta normalmente; appena il rapporto esce, l’obiettivo si appiattisce e non offre più alcun premio per allontanarsi ancora. Il risultato è che all’ottimizzatore conviene aggiornare la policy solo entro quel margine del 20%. Oltre, non guadagna nulla, quindi si ferma.

Un passo alla volta, dentro la fascia zona consentita: rapporto tra 0,8 e 1,2 policy vecchia policy nuova passo piccolo: ok salto lungo: tagliato oltre la fascia l’obiettivo non premia più il clip tiene la nuova strategia vicina alla vecchia, aggiornamento dopo aggiornamento

La policy vecchia è il punto nero; la fascia tratteggiata è l’intervallo in cui la nuova strategia può muoversi restando «vicina». Un passo piccolo la porta a una nuova policy migliore senza uscire dai limiti. Un salto lungo verrebbe tagliato: superata la fascia, l’obiettivo si appiattisce e non offre più alcun vantaggio a spingersi oltre.

Perché una fascia, e non un muro

Un dettaglio rende il trucco robusto. PPO non impedisce fisicamente alla policy di allontanarsi: lascia che l’ottimizzatore provi, ma toglie ogni incentivo a farlo. Questo permette di riutilizzare gli stessi dati raccolti per più giri di ottimizzazione — diverse passate di discesa del gradiente sugli stessi campioni — cosa che i policy gradient classici non potevano fare senza andare fuori strada. Raccogliere esperienza da un ambiente è la parte costosa; poterla spremere più volte in sicurezza è gran parte del vantaggio pratico di PPO. E, a differenza di TRPO, tutto questo si fa con normale ottimizzazione di primo ordine, la stessa che si usa per addestrare qualunque rete neurale. Nessuna matematica esotica: poche righe in più rispetto a un policy gradient ordinario.

Il freno non è un muro che blocca il passo, ma un incentivo che svanisce: appena ti allontani troppo, l’obiettivo smette di ringraziarti, e all’ottimizzatore non conviene più insistere.

Semplice abbastanza da diventare lo standard

Nel paper PPO viene messo alla prova su due terreni: il controllo continuo di robot simulati (i benchmark MuJoCo, dove creature articolate imparano a correre e saltare) e i giochi Atari, con azioni discrete. Nel confronto con TRPO, con i metodi attore-critico come A2C e con ACER, PPO ottiene risultati alla pari o migliori restando molto più semplice da implementare e da regolare. Non c’è un singolo numero clamoroso da esibire; c’è, piuttosto, l’assenza di svantaggi. Ed è proprio questo equilibrio — buono ovunque, complicato da nessuna parte — che ne ha decretato la fortuna.

Negli anni successivi PPO è diventato l’impostazione predefinita di fatto per il reinforcement learning applicato, la prima cosa che si prova prima di cercare qualcosa di più sofisticato. E ha avuto una seconda vita inattesa fuori dai videogiochi: è l’algoritmo usato nell’apprendimento per rinforzo da feedback umano (RLHF) con cui sono stati messi a punto i primi grandi modelli linguistici conversazionali, ChatGPT compreso. Lì l’ambiente non è un gioco ma una conversazione, la ricompensa non è un punteggio ma il giudizio di un modello addestrato sulle preferenze umane. Ma la preoccupazione è identica a quella del robot che cade: aggiornare la policy — cioè il comportamento del modello — senza spostarla troppo in una volta sola, per non fargli dimenticare tutto ciò che sapeva già. Lo stesso guardrail, un dominio completamente diverso.

Perché ti riguarda

Se non addestri sistemi di questo tipo, la lezione di PPO resta comunque interessante come esempio di una virtù rara in ingegneria: risolvere un problema difficile abbassando l’ambizione invece di alzarla. TRPO cercava la garanzia teorica del passo perfetto; PPO ha accettato un’approssimazione grezza — «resta entro il 20%» — e ha vinto proprio perché era abbastanza semplice da essere usata da tutti. È un pattern che ritorna spesso nella storia recente dell’AI, e che conviene tenere a mente ogni volta che si valuta una tecnologia: non sempre vince l’idea più raffinata, spesso vince quella che chiunque riesce a far funzionare al primo tentativo.

Il paper

John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov, Proximal Policy Optimization Algorithms, 2017. Disponibile su arXiv: arxiv.org/abs/1707.06347.

I commenti sono riservati agli iscritti.

Accedi per commentare