Policy gradient e PPO: imparare direttamente la politica
Politica stocastica come rete, REINFORCE e teorema del gradiente della politica, baseline e vantaggio, attore-critico, PPO con clipping scritto da zero sul pendolo inverso su un carrello, che cosa succede senza clipping, e come PPO ha rifinito i modelli linguistici.
Serie Basi di IA Parte 49 di 52
- Mappa dell’intelligenza artificiale: che cos’è ciascuna cosa e come si incastra tutto
- Breve storia dell’intelligenza artificiale: da Turing ai modelli linguistici
- Dati, modello, addestramento, inferenza: i concetti di base su un unico esempio
- Come leggere la notazione matematica: simboli, indici, sommatorie e quantificatori
- Insiemi e relazioni: i mattoncini con cui si costruiscono le definizioni nell’IA
- Funzioni e applicazioni: perché ogni modello di IA è una funzione
- Logica e dimostrazioni: le regole con cui si ragiona nell’IA
- Grafi e alberi: la struttura su cui poggiano la ricerca e le reti neurali
- Algebra lineare per l’apprendimento automatico: vettori, matrici e perché l’IA soprattutto moltiplica
- Derivate, gradiente e regola della catena: come un modello capisce in quale direzione imparare
- Discesa del gradiente: come impara un modello
- Che cos’è la probabilità: dal lancio di un dado agli assiomi di Kolmogorov
- Probabilità condizionata e teorema di Bayes: come cambiare una stima quando scopri qualcosa di nuovo
- Variabile aleatoria e funzione di ripartizione: una sola funzione che dice tutto sulla distribuzione
- Funzione di densità e funzione di massa: perché una variabile continua ha probabilità zero in un punto
- Valore atteso, varianza e covarianza: dove si trova una distribuzione, quanto è larga e che cosa è legato a che cosa
- Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale
- Legge dei grandi numeri e teorema del limite centrale: perché le medie si comportano in modo così prevedibile
- Statistica e stima dei parametri: massima verosimiglianza, MAP e intervalli di confidenza
- Teoria dell’informazione: entropia, entropia incrociata e divergenza KL — da dove vengono le funzioni di perdita
- Ricerca nello spazio degli stati: BFS, DFS, UCS e A* con animazioni
- Giochi e avversari: minimax, potatura alfa-beta e Monte Carlo tree search
- Soddisfacimento di vincoli: backtracking, propagazione dei vincoli e AC-3 su un sudoku e una mappa delle regioni ceche
- Logica e sistemi basati sulla conoscenza: concatenazione in avanti e all’indietro, risoluzione e sistemi esperti
- Pianificazione: STRIPS, il mondo dei blocchi, euristiche dal rilassamento e pianificazione negli agenti IA
- Ricerca locale e ricottura simulata: un commesso viaggiatore tra i capoluoghi di regione cechi
- Algoritmi genetici: popolazione, incrocio, mutazione e selezione su uno zaino per l’escursione
- Strategie evolutive e programmazione genetica: dalla regola di un quinto alla legge di Keplero
- Ottimizzazione con colonie di formiche: come una traccia di feromone trova un percorso breve
- Ottimizzazione a sciame di particelle: inerzia, esperienza propria ed esperienza dello sciame
- Neuroevoluzione: evoluzione dei pesi e della forma delle reti neurali e l’algoritmo NEAT
- Insiemi fuzzy e funzioni di appartenenza: come scrivere «un po’ caldo»
- Logica fuzzy e probabilità: perché «un po’ caldo» non significa «probabilmente caldo»
- Logica fuzzy: t-norme, implicazioni e regole SE–ALLORA
- Controllo fuzzy: Mamdani e Sugeno, dal ventilatore al pendolo inverso su un carrello
- Clustering fuzzy: l’algoritmo fuzzy c-means e i punti tra i cluster
- Sistemi neuro-fuzzy (ANFIS): regole fuzzy che imparano dai dati
- Catene di Markov: matrice di transizione, distribuzione stazionaria e PageRank
- Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto
- Reti bayesiane: perché l’erba è bagnata e che cosa significa per l’irrigatore
- Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va
- Tipi di apprendimento automatico: supervisionato, non supervisionato, semi-supervisionato e altri
- Prompt, contesto e RAG: come dare a un modello le informazioni giuste
- Autoencoder variazionali (VAE): immagini nuove da uno spazio latente continuo
- Reti generative avversarie (GAN): il falsario contro il detective
- Modelli di diffusione: come il rumore puro diventa un’immagine
- Processi decisionali di Markov: stati, azioni, ricompense ed equazioni di Bellman
- Q-learning e DQN: imparare il valore delle azioni, dalla tabella alla rete neurale
- Policy gradient e PPO: imparare direttamente la politica
- Come funziona un agente IA: un modello linguistico in un ciclo con strumenti
- Programmare con agenti IA: incarico, test e controllo
- Valutazione e sicurezza dei sistemi di IA: come misurare e come sorvegliare
Programma completo della serie 52 di 83 argomenti pubblicati
- Come si impara una politica direttamente dai risultati, senza una tabella di valori.
- Perché aiuta sottrarre una baseline e che cos’è il vantaggio.
- Perché il clipping in PPO è così importante e che legame ha con l’RLHF.
Utile sapere prima: Q-learning e DQN: imparare il valore delle azioni, dalla tabella alla rete neurale, Processi decisionali di Markov: stati, azioni, ricompense ed equazioni di Bellman
Il DQN della parte precedente impara quanto è buona ciascuna azione, e la politica ne deriva solo indirettamente: scegli l’azione con il valore più alto. La seconda grande famiglia di metodi va dritta al punto: la rete riceve lo stato e restituisce le probabilità delle azioni, e noi spostiamo queste probabilità in modo che le azioni buone diventino più frequenti. Da questa famiglia viene PPO — l’algoritmo che ha insegnato ai robot a camminare, ha battuto i professionisti a Dota 2 e c’era dietro il fine-tuning di ChatGPT. In questa parte lo scriviamo da zero e lo confrontiamo con i suoi predecessori più semplici.
Si collega alle parti Q-learning e DQN, Processi decisionali di Markov e Softmax.
1. Imparare direttamente la politica
Definizione — politica parametrizzata
Una politica stocastica πθ(a | s) è una rete con parametri θ che, per lo stato s, restituisce una distribuzione di probabilità sulle azioni — per un numero finito di azioni il softmax delle uscite della rete, per azioni continue per esempio la media e la varianza di una distribuzione normale. L’obiettivo è massimizzare il ritorno atteso J(θ) = Eπθ[G0] con l’ascesa del gradiente θ ← θ + α ∇J(θ).
Il DQN tiene una tabella «quanti punti per quale mossa» e gioca la mossa con più punti. Una politica invece dice direttamente «in questa situazione spingi a destra con il 70 %, a sinistra con il 30 %». I vantaggi: funziona anche con azioni continue (con quale forza, con quale angolo), il caso è incorporato, quindi l’agente prova da solo, e un piccolo cambiamento dei parametri significa un piccolo cambiamento del comportamento.
Esempio — il ritorno di un tentativo sul pendolo inverso su un carrello
La ricompensa è +1 per ogni passo e lo sconto γ = 0,99. Se mancano T − t passi alla fine dell’episodio, il ritorno è una serie geometrica:
Gt = 1 + γ + γ² + … + γT−t−1 = (1 − γT−t) / (1 − γ).
All’inizio di un episodio che dura tutti i 500 passi: G0 = (1 − 0,99500) / 0,01 = 99,34. Venti passi prima della caduta: G = (1 − 0,9920) / 0,01 = 18,21. Il passo subito prima della caduta: G = 1. Il ritorno è quindi sempre positivo e non supera mai 1 / (1 − γ) = 100 — ci tornerà utile nella sezione sulla baseline.
2. REINFORCE: rinforza ciò che ha funzionato
Definizione — teorema del gradiente della politica e REINFORCE
Il gradiente del ritorno atteso si può scrivere come un valore atteso, che si può stimare dagli episodi giocati:
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ].
REINFORCE (Ronald Williams, 1992) lo fa alla lettera: gioca degli episodi, per ogni passo calcola il ritorno Gt da quel passo in poi e sposta θ nella direzione ∇ log π(at | st) · Gt. Per il softmax, ∇ log π(a) rispetto alle uscite della rete è semplicemente (1a − π).
Gioca, guarda com’è andata e rendi ogni mossa che hai fatto un po’ più probabile — tanto più quanto meglio è andata dopo. Le mosse delle partite riuscite vengono rinforzate più di quelle delle partite andate male. Nessuno deve dirti quale mossa era quella giusta; basta il risultato.
∇J(θ) = Eπθ[ ∑t ∇ log πθ(at | st) · Gt ]
- ∇J(θ)
- la direzione in cui ruotare i parametri perché il ritorno medio cresca il più in fretta possibile; non si può calcolare direttamente, perché il ritorno dipende da θ solo attraverso il gioco casuale e la fisica sconosciuta dell’ambiente
- Eπθ[ ∑t … ]
- la media sugli episodi giocati dalla politica attuale — per questo si può sostituire con una media sulle partite davvero giocate; e per questo i dati di un’altra politica (più vecchia, estranea) non bastano senza una correzione
- ∇ log πθ(at | st)
- la direzione nei parametri che rende più probabile l’azione giocata; ∇ log π = ∇π / π divide per la probabilità, così un’azione frequente, che compare spesso nei dati, non riceve un rinforzo extra solo perché è frequente
- Gt
- il peso: quanto è andata bene dopo l’azione; solo le ricompense dal passo t in poi, perché un’azione non può influenzare ricompense già arrivate
Teorema — da dove viene la formula (il trucco del logaritmo)
Un episodio τ = (s0, a0, s1, a1, …) ha, con la politica πθ, probabilità Pθ(τ) = p(s0) ∏t πθ(at | st) P(st+1 | st, at) e ritorno G(τ). Allora
∇J(θ) = ∇ ∑τ Pθ(τ) G(τ) = ∑τ Pθ(τ) · ∇ log Pθ(τ) · G(τ) = Eτ ∼ πθ[ ∇ log Pθ(τ) · G(τ) ],
perché ∇P = P · ∇ log P. Dimostrazione (schizzo): il logaritmo trasforma il prodotto in una somma, log Pθ(τ) = log p(s0) + ∑t log πθ(at | st) + ∑t log P(st+1 | st, at). Da θ dipende solo la somma centrale, quindi non serve conoscere la fisica dell’ambiente P: ∇ log Pθ(τ) = ∑t ∇ log πθ(at | st). Infine, per ogni at scartiamo le ricompense precedenti al passo t: non dipendono da at, e il loro contributo ha quindi valore atteso nullo (vedi il teorema nella sezione successiva). Resta Gt. ∎ (L’enunciato esatto per il ritorno scontato è un po’ più sottile; qui semplificato.)
Esempio — un passo di REINFORCE con il softmax
Due azioni, uscite della rete z = (0; 0), quindi π = softmax(z) = (0,50; 0,50). L’agente ha giocato l’azione 1 («a destra») e il ritorno da quel passo è stato G = 10. Per il softmax ∇z log π(a) = 1a − π, quindi
∇z log π(1) · G = ((0; 1) − (0,50; 0,50)) · 10 = (−5; 5).
Un passo di ascesa con α = 0,1: z ← (0; 0) + 0,1 · (−5; 5) = (−0,5; 0,5). Nuova politica π = (e−0,5; e0,5) / (e−0,5 + e0,5) = (0,269; 0,731). L’azione che ha funzionato ora è più probabile. (In una rete vera cambiano i pesi θ e il gradiente arriva a z con la retropropagazione; la direzione è la stessa.)
θ = pesi casuali della rete della politica
ripeti:
gioca episodi completi con la politica π_θ, finché non ci sono almeno 2 000 passi
per ogni episodio, a ritroso: # G = 0 dopo la fine dell’episodio
G_t = r_(t+1) + γ · G_(t+1)
g = media su tutti i passi di ∇ log π_θ(a_t | s_t) · G_t
θ = θ + α · g # ascesa; da noi con un passo di Adam
butta via i dati — la prossima volta vengono da un’altra politica
3. Varianza e baseline
Definizione — baseline (linea di base) e vantaggio
Da Gt si può sottrarre una qualsiasi funzione dello stato b(st) senza cambiare il valore atteso della stima del gradiente, perché E[∇ log π(a | s)] = 0. La varianza della stima, però, può ridursi molto. La scelta comune migliore è il valore dello stato V(s), appreso da una seconda rete; la differenza A(s, a) = Q(s, a) − V(s) si chiama vantaggio. I metodi con una politica appresa («attore») e un valore appreso («critico») si chiamano attore-critico (actor-critic).
Sul pendolo inverso l’agente riceve +1 per ogni passo, quindi ogni ritorno è positivo — REINFORCE rinforza quindi ogni mossa, solo alcune di più. Il segnale «questo è andato meglio del solito» si perde nel rumore. Sottraendo il livello atteso, diventa «questa mossa ha reso 20 punti in più di quanto ci si aspettava in questa situazione» — e le mosse peggiori ricevono il segno negativo.
∇J(θ) = E[ ∑t ∇ log πθ(at | st) · (Gt − b(st)) ], A(s, a) = Q(s, a) − V(s)
- ∇ log πθ(at | st)
- la direzione «l’azione giocata più spesso», come in REINFORCE
- Gt, Q(s, a)
- ciò che è davvero seguito all’azione (Gt), oppure quanto rende in media dopo di essa (Q è il valore atteso di Gt); da solo quasi sempre positivo, quindi non distingue un’azione buona da una media
- b(st), V(s)
- l’asticella: quanto ci si aspetta in questa situazione indipendentemente dall’azione; dopo la sottrazione, le azioni peggiori della media ricevono il segno negativo. Può dipendere solo dallo stato, non dall’azione — altrimenti il gradiente sarebbe distorto (teorema qui sotto)
- A(s, a)
- il vantaggio: di quanto l’azione a è migliore dell’azione media della politica in s; esattamente l’informazione che vogliamo rinforzare
Teorema — la baseline non distorce il gradiente
Per ogni stato s vale Ea ∼ πθ[∇ log πθ(a | s)] = 0, e quindi E[∇ log πθ(a | s) · b(s)] = 0 per qualsiasi funzione b che non dipende da a.
Dimostrazione: ∑a πθ(a | s) ∇ log πθ(a | s) = ∑a ∇πθ(a | s) = ∇ ∑a πθ(a | s) = ∇1 = 0. Il termine b(s) è una costante per s fissato, quindi si può portare fuori dalla somma. ∎
Esempio — stessa media, varianza diversa
Uno stato, due azioni con π = (0,5; 0,5). L’azione 1 rende un ritorno di 12, l’azione 0 un ritorno di 10 — entrambi positivi come sul pendolo. La componente della stima del gradiente rispetto all’uscita z1 è, da un solo campione, (1a=1 − 0,5) · (G − b).
Senza baseline (b = 0): se esce l’azione 1, la stima è 0,5 · 12 = 6; se esce l’azione 0, è −0,5 · 10 = −5. Media (6 − 5) / 2 = 0,5, varianza ((6 − 0,5)² + (−5 − 0,5)²) / 2 = 30,25.
Con la baseline b = 11 (ritorno medio): 0,5 · (12 − 11) = 0,5 e −0,5 · (10 − 11) = 0,5. La media è sempre 0,5, la varianza 0.
Il gradiente vero è π1(1 − π1) · (12 − 10) = 0,25 · 2 = 0,5. Entrambe le stime puntano in media nel verso giusto, ma senza l’asticella un singolo campione sbaglia di ±5,5, con l’asticella per niente. In realtà la varianza non scende a zero (i ritorni sono casuali e gli stati sono molti), ma il principio è lo stesso.
L’abbiamo misurato all’inizio dell’apprendimento: 40 batch indipendenti di 1 000 passi della stessa politica casuale, e da ciascuno il gradiente di REINFORCE. Già solo sottrarre il ritorno medio (baseline costante) riduce la somma delle varianze delle componenti del gradiente da 0,177 a 0,131, cioè del 26 %. Un valore appreso V(s), che distingue le situazioni buone da quelle cattive, aiuta di più.
Definizione — somma delle varianze delle componenti del gradiente
Da K = 40 batch abbiamo le stime del gradiente ĝ(1), …, ĝ(K) (vettori di tutti i pesi della rete). Per ogni componente j calcoliamo la varianza tra i batch e sommiamo:
∑j (1/K) ∑k (ĝj(k) − ḡj)², ḡj = (1/K) ∑k ĝj(k).
È la traccia della matrice di covarianza della stima — un solo numero per quanto la stima oscilla. Calo: 1 − 0,131 / 0,177 = 0,26, cioè il 26 %.
Una V appresa serve anche a PPO, più avanti. Il vantaggio però non lo stima con la differenza Gt − V(st), ma con un compromesso tra questa e la stima a un passo della parte sul Q-learning:
Ât = ∑l≥0 (γλ)l δt+l, δt = rt+1 + γ V(st+1) − V(st)
- Ât
- la stima del vantaggio del passo t (GAE, John Schulman e coll., 2015) — ciò per cui si moltiplica ∇ log π
- δt
- l’errore TD: di quanto un passo è andato meglio di quanto si aspettava V; una stima del vantaggio a un passo con varianza piccola, ma distorta se V sbaglia
- rt+1
- la ricompensa effettivamente arrivata — l’unico pezzo di realtà in δ
- V(s)
- l’asticella appresa; in st+1 sostituisce il resto del ritorno con una stima, in st si sottrae come baseline (dopo una caduta V(st+1) = 0)
- (γλ)l
- quanto in fretta dimenticare i passi più lontani. λ = 0 dà solo δt; λ = 1 dà dopo la somma (i termini in V si elidono) esattamente Gt − V(st) — non distorto, ma con grande varianza. Noi usiamo λ = 0,95
4. PPO: passi piccoli e sicuri
REINFORCE ha ancora un punto debole: usa ogni esperienza giocata per un solo passo di gradiente e poi la butta via. Se sugli stessi dati facessimo più passi, la politica potrebbe allontanarsi da quella che ha raccolto i dati, e la stima del gradiente smetterebbe di valere — l’apprendimento crolla. PPO sorveglia proprio questo.
Definizione — Proximal Policy Optimization (PPO)
PPO (John Schulman e coll., OpenAI, 2017) raccoglie un batch di transizioni con la vecchia politica πold, calcola i vantaggi Ât e poi per diverse epoche massimizza l’obiettivo con clipping
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ], rt(θ) = πθ(at | st) / πold(at | st),
tipicamente con ε = 0,2. Non appena la probabilità di un’azione cambia di più di ε nel verso che migliora l’obiettivo, il gradiente di quel campione sparisce. I vantaggi si stimano di solito con il metodo GAE (generalized advantage estimation), una media pesata degli errori TD con il parametro λ.
Dopo la partita l’allenatore dice «fallo più spesso». Il giocatore lo ripete in allenamento — ma solo finché non lo fa un quinto più spesso di prima. Poi non impara più nulla finché non gioca la partita successiva e non scopre se funziona ancora. Passi abbastanza grandi per migliorare in fretta, abbastanza piccoli per non perdere la testa.
L(θ) = Et[ min( rt(θ) Ât, clip(rt(θ), 1 − ε, 1 + ε) Ât ) ]
- L(θ)
- l’obiettivo surrogato che si massimizza per diverse epoche sul vecchio batch; il suo gradiente in θ = θold è esattamente il gradiente della politica di REINFORCE con il vantaggio
- rt(θ) = πθ / πold
- il rapporto tra la probabilità nuova e quella vecchia dell’azione giocata. I dati li ha raccolti la vecchia politica; moltiplicandoli per il rapporto si può stimare come se la caverebbe la nuova (campionamento per importanza, importance sampling). All’inizio r = 1
- Ât
- il vantaggio da GAE: il segno dice se rinforzare l’azione (+) o reprimerla (−)
- clip(r, 1 − ε, 1 + ε)
- il rapporto stretto nella fascia (in verde nella figura); fuori dalla fascia è costante, quindi non ne esce alcun gradiente — con questo campione la politica non si può più spingere oltre
- min
- delle due stime la peggiore (pessimistica): il clipping vale solo dove il miglioramento sembrerebbe sospettosamente buono. Se invece l’azione è peggiorata, min lascia il termine senza clipping e corregge l’errore
Esempio — tre campioni e il clipping con ε = 0,2
La vecchia politica dava all’azione giocata probabilità 0,5. Dopo alcuni passi di apprendimento è 0,65, quindi r = 0,65 / 0,5 = 1,3 e clip(1,3; 0,8; 1,2) = 1,2.
Vantaggio +2: min(1,3 · 2; 1,2 · 2) = min(2,6; 2,4) = 2,4. Vince il termine con clipping, che non dipende da θ — il gradiente di questo campione è zero. L’azione è già più frequente del 30 %, di più no.
Vantaggio −2 (stesso rapporto): min(−2,6; −2,4) = −2,6. Vince il termine senza clipping: la politica ha reso per errore più probabile un’azione cattiva, e il gradiente quindi continua a riportarla indietro.
Vantaggio +2, ma la probabilità è scesa a 0,35: r = 0,7, min(1,4; 0,8 · 2 = 1,6) = 1,4. Di nuovo il termine senza clipping — un’azione buona che la politica aveva represso ritorna. Il clipping frena solo i passi che migliorerebbero l’obiettivo «troppo».
ripeti:
π_old = π_θ; raccogli 2 000 passi con la politica π_old, salva π_old(a_t | s_t)
per ogni episodio, a ritroso: # V(s_(t+1)) = 0 dopo una caduta
δ_t = r_(t+1) + γ · V(s_(t+1)) − V(s_t)
Â_t = δ_t + γλ · Â_(t+1) # GAE, γ = 0,99, λ = 0,95
target_t = Â_t + V(s_t); normalizza  a media 0 e varianza 1
10 volte (epoca):
mescola i passi e dividili in mini-batch da 100
per ogni mini-batch:
r_t = π_θ(a_t | s_t) / π_old(a_t | s_t)
θ: un passo in salita sulla media di min(r_t · Â_t, clip(r_t, 0,8, 1,2) · Â_t)
V: un passo in discesa sulla media di (V(s_t) − target_t)²
5. Esperimento: il pendolo inverso su un carrello
Lo stesso pendolo inverso su un carrello del DQN, ricompensa +1 per ogni passo, l’episodio finisce con una caduta o dopo 500 passi. La politica è una rete 4 → 32 → 32 → 2 con softmax, il valore dello stato una seconda rete della stessa forma. Tutti e quattro i metodi ricevono 100 000 passi nell’ambiente, in batch da 2 000. REINFORCE fa un passo di gradiente su ogni batch, PPO dieci epoche su mini-batch da 100. La variante «senza clipping» è un PPO a cui abbiamo disattivato il clipping.
| metodo | prima volta con media ≥ 475 (esecuzione 1 · 2 · 3) | alla fine (esecuzione 1 · 2 · 3) |
|---|---|---|
| REINFORCE | — · — · — | 463 · 333 · 348 |
| REINFORCE con baseline | 90 000 · 80 000 · — | 488 · 500 · 404 |
| PPO | 30 000 · 20 000 · 20 000 | 500 · 500 · 500 |
| PPO senza clipping | 100 000 · 30 000 · 50 000 | 494 · 44 · 500 |
In tutte e tre le esecuzioni PPO tiene l’asta per tutti i 500 passi già dopo 30 000, 20 000, 20 000 passi e non la molla più. REINFORCE migliora lentamente e fino alla fine non ce la fa; con la baseline è un po’ più veloce e in due esecuzioni su tre arriva all’obiettivo. Attenzione, il confronto non è del tutto equo quanto a numero di calcoli: PPO fa su ogni batch dieci volte più passi di gradiente. È però equo in ciò che nell’apprendimento per rinforzo conta di più — il numero di esperienze che l’agente deve raccogliere nel mondo.
E che cosa succede se lanciamo lo stesso apprendimento ripetuto su un batch senza clipping? Le lunghezze degli episodi saltano su e giù, l’esecuzione 2 è finita a 44 passi. Il perché lo mostra quanto la politica, in un solo aggiornamento, si allontana da quella che ha raccolto i dati:
Con PPO la distanza media è di 0,014 nat e non supera mai 0,06. Senza clipping è in media 5,5 e a volte arriva a 25 nat — dopo un solo aggiornamento la politica fa tutt’altro rispetto a quella da cui ha imparato. I dati allora non dicono più nulla su di essa e il miglioramento diventa una lotteria. Il clipping è un piccolo ritocco nella formula, ma trasforma un algoritmo instabile in uno affidabile.
Definizione — stima della KL tra la vecchia e la nuova politica
La divergenza KL della parte sulla teoria dell’informazione, qui con il logaritmo naturale (unità nat; 1 nat = 1 / ln 2 ≈ 1,44 bit), mediata sugli stati del batch:
DKL(πold ‖ πθ) = Es, a ∼ πold[ log πold(a | s) − log πθ(a | s) ] ≈ (1/N) ∑i=1N [ log πold(ai | si) − log πθ(ai | si) ].
Le azioni ai le ha giocate la vecchia politica, quindi la media sul batch è una stima non distorta. È la media del logaritmo del rapporto, e quindi e−D è la media geometrica del rapporto πθ / πold sulle azioni raccolte.
Che cosa significa in numeri: con PPO al massimo 0,06 nat, e−0,06 = 0,94 — le azioni del vecchio batch sono di solito meno probabili di qualche punto percentuale, i dati dicono ancora qualcosa sulla nuova politica. Senza clipping fino a 24,9 nat: e−24,9 ≈ 1,5 · 10−11, la nuova politica non giocherebbe quasi mai le azioni da cui ha appena imparato.
6. PPO e i modelli linguistici
Nella parte sull’RLHF abbiamo detto che InstructGPT e il primo ChatGPT sono stati rifiniti con l’apprendimento per rinforzo. Era proprio PPO: la politica è il modello linguistico, lo stato è il testo finora, l’azione è il token successivo, e la ricompensa alla fine della risposta la dà un modello di ricompensa appreso dalle preferenze umane. La penalità per l’allontanamento dal modello di partenza (KL) ha lo stesso ruolo del clipping — non permette alla politica di scappare dove non ci si può fidare della ricompensa.
Definizione — la ricompensa nel fine-tuning di un modello linguistico con PPO
Per una richiesta x e una risposta y generata dal modello in addestramento πθ, PPO riceve la ricompensa
R(x, y) = rφ(x, y) − β · log [ πθ(y | x) / πref(y | x) ],
dove rφ è il modello di ricompensa, πref il modello congelato dopo il fine-tuning sugli esempi (SFT) e β la forza della penalità (così lo scrive InstructGPT, Long Ouyang e coll., 2022). Il valore atteso del secondo termine sulle risposte è esattamente β · DKL(πθ ‖ πref). Un episodio è una risposta, le azioni sono i token, la ricompensa rφ arriva solo dopo l’ultimo token; il resto è PPO così come descritto sopra.
Con i modelli grandi, però, PPO è costoso: oltre al modello gli serve una rete di valore altrettanto grande. Per questo sono nate delle semplificazioni. Il DPO della parte sull’RLHF evita del tutto l’apprendimento per rinforzo. GRPO (DeepSeek, 2024) elimina la rete di valore e come baseline usa la ricompensa media di più risposte alla stessa domanda — proprio la baseline costante che abbiamo misurato sopra. Così si addestrano i modelli che «ragionano» su matematica e codice, dove la correttezza della risposta si può verificare.
Âi = (ri − media(r1, …, rG)) / sd(r1, …, rG)
- Âi
- il vantaggio della i-esima risposta; lo ricevono tutti i suoi token e poi entra nell’obiettivo con clipping di PPO
- ri
- la ricompensa della i-esima delle G risposte alla stessa domanda, per esempio 1 = il risultato è giusto, 0 = è sbagliato
- media(…)
- la baseline al posto della rete di valore: quanto bene il modello risponde di solito a questa domanda — una domanda facile ha l’asticella alta, una difficile bassa
- sd(…)
- la deviazione standard del gruppo; uniforma la scala, così le domande con varianza delle ricompense grande e piccola tirano con la stessa forza (come la normalizzazione dei vantaggi nel nostro PPO)
Esempio — i vantaggi GRPO per quattro risposte
Il modello risponde quattro volte a un problema, correttamente solo la prima: ricompense (1; 0; 0; 0). Media 0,25, deviazione standard √((0,75² + 3 · 0,25²) / 4) = √0,1875 = 0,433.
Vantaggi: (1 − 0,25) / 0,433 = 1,732 per la risposta corretta e (0 − 0,25) / 0,433 = −0,577 per ciascuna delle tre sbagliate. La somma è zero: quella giusta viene rinforzata, quelle sbagliate represse. Se tutte e quattro le risposte fossero giuste (o tutte sbagliate), tutti i vantaggi sarebbero nulli e la domanda non insegnerebbe nulla — si impara solo dalle domande in cui il modello a volte ci azzecca e a volte no. (Dividiamo per G; alcune implementazioni dividono per G − 1, e allora i numeri differiscono leggermente.)
7. Riepilogo
- Il policy gradient impara direttamente le probabilità delle azioni; funziona anche con azioni continue ed esplora da sé.
- REINFORCE rinforza le azioni in proporzione al ritorno che le ha seguite; è semplice, ma la stima del gradiente ha una grande varianza.
- Sottrarre una baseline riduce la varianza senza cambiare il valore atteso (da noi del 26 % già con una costante); con una V(s) appresa nasce l’attore-critico.
- PPO usa ogni batch più volte e, con il clipping del rapporto delle probabilità, tiene la politica vicina a quella che ha raccolto i dati.
- Sul pendolo inverso: PPO regge 500 passi dopo 20–30 mila passi in tutte le esecuzioni; senza clipping la politica si allontana fino a 25 nat e l’apprendimento oscilla.
- PPO ha rifinito il primo ChatGPT; la sua semplificazione (GRPO) oggi addestra i modelli che «ragionano».
Vuoi metterci le mani? Chiedi a un agente IA di lanciare il PPO della libreria Stable-Baselines3 sull’ambiente LunarLander, di variare ε del clipping (0,05; 0,2; 0,5) — e di disegnare come cambiano la velocità e la stabilità dell’apprendimento.
La vedi diversamente? Scrivi a support@coden-app.com.