English · Español
01 — Fundamentos de RL: REINFORCE → PG con línea base → PPO¶
🇪🇸 Política gradiente desde cero: REINFORCE, varianza y línea base, y el "clip" de PPO. Retropropagación con una función de pérdida distinta.
Ya conoces la retropropagación (backpropagation) (Fase 04). El gradiente de política es el mismo algoritmo con una pérdida distinta. El truco es que la pérdida implica una esperanza sobre las propias muestras de la política, así que no puedes derivarla de forma ingenua.
El planteamiento¶
- Política \(\pi_\theta(a \mid s)\): una distribución de probabilidad sobre acciones \(a\) dado un estado \(s\). Para un modelo de lenguaje, \(s\) es el prompt + los tokens hasta ahora, \(a\) es el siguiente token.
- Trayectoria \(\tau = (s_0, a_0, s_1, a_1, \dots, s_T, a_T)\).
- Retorno \(R(\tau) = \sum_{t=0}^{T} r_t\) (para nuestro caso de LM, a menudo una sola recompensa terminal \(R\) al final de la secuencia).
- Objetivo \(J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[R(\tau)]\).
Queremos \(\nabla_\theta J(\theta)\).
REINFORCE: el truco de la log-derivada¶
El gradiente de una esperanza sobre una distribución parametrizada no es trivial porque \(\theta\) está dentro de la distribución de muestreo. El truco de la log-derivada (Williams 1992) da:
Derivación (en una línea):
usando \(\nabla_\theta p_\theta = p_\theta \nabla_\theta \log p_\theta\).
En la práctica: despliega una trayectoria, calcula su retorno \(R\), y luego haz un paso ordinario de retropropagación sobre la pérdida
Eso es todo. El signo menos es porque queremos ascender \(J\).
Intuición¶
Cada log-probabilidad a nivel de token se pondera por el retorno de toda la trayectoria. Si la trayectoria fue buena (\(R>0\)), sube el peso de todos los tokens elegidos; si fue mala, bájalo. Esto es asignación de crédito por asociación.
Problema: varianza¶
REINFORCE tiene una varianza enorme. Si \(R\) varía de \(-10\) a \(+10\) entre trayectorias, las estimaciones del gradiente oscilan salvajemente. Dos arreglos:
1. Substracción de línea base¶
Restar cualquier función \(b(s_t)\) que no dependa de \(a_t\) deja el gradiente insesgado:
Esbozo de demostración: \(\mathbb{E}_{a \sim \pi}[b(s) \nabla_\theta \log \pi_\theta(a \mid s)] = b(s) \nabla_\theta \mathbb{E}[1] = 0\).
Una buena línea base es la función de valor \(V^\pi(s) = \mathbb{E}_\pi[R \mid s]\). Entonces \(R - V^\pi(s)\) es la ventaja \(A(s,a)\) — cuánto mejor fue esta acción que la media desde \(s\).
2. Actor-Critic¶
Entrena un crítico \(V_\phi(s)\) junto con la política ("actor") para predecir \(V^\pi\). Pérdida del crítico: \((V_\phi(s_t) - R_t)^2\). Este es el setup moderno.
El estimador de PG queda:
PPO: el truco del clipping¶
REINFORCE / actor-critic vanilla siguen teniendo un problema: un mal batch de trayectorias puede mover \(\theta\) tanto que la política colapsa (el siguiente batch es todo basura). Queremos una región de confianza — limitar cuánto puede cambiar \(\pi_\theta\) por paso.
TRPO (Schulman et al. 2015) hace esto con una restricción KL explícita y optimización de segundo orden. PPO (Schulman et al. 2017) es la aproximación de primer orden que todo el mundo usa de verdad.
El objetivo de PPO¶
Sea
el ratio de importancia entre la política nueva y la antigua en el paso \(t\). El objetivo PPO-Clip es:
Típicamente \(\epsilon = 0{,}2\).
Por qué el clipping evita actualizaciones catastróficas¶
Análisis por casos sobre el signo de \(A_t\):
- \(A_t > 0\) (la acción fue buena). Queremos incrementar \(r_t\). El término sin clip \(r_t A_t\) crece sin límite cuando \(r_t \to \infty\). El término con clip se satura en \((1+\epsilon) A_t\). El
minelige el valor más pequeño (clipeado) una vez que \(r_t > 1+\epsilon\). Así, el gradiente respecto a \(\theta\) se vuelve cero una vez que hemos movido la política "suficiente" — no hay incentivo para empujar \(r_t\) más en este batch. - \(A_t < 0\) (la acción fue mala). Queremos decrementar \(r_t\). Simétricamente, el
minelige el término clipeado una vez que \(r_t < 1 - \epsilon\), matando el gradiente. - \(|A_t|\) pequeño o \(r_t\) dentro de \([1-\epsilon, 1+\epsilon]\): se comporta como PG vanilla.
Resultado: las actualizaciones por batch están acotadas; la política no puede dar un salto gigante basándose en la estimación estocástica del gradiente de un solo batch.
Lo que PPO no hace¶
PPO no impone una restricción KL en forma cerrada. El clip es un proxy de una región de confianza; el KL real entre \(\pi_\theta\) y \(\pi_{\theta_{\text{old}}}\) se monitoriza pero no se restringe directamente en PPO-Clip. (PPO-Penalty es una variante que sí añade un término KL; PPO-Clip es más común.)
El algoritmo general¶
for iteration in 1..N:
rollouts = collect_trajectories(π_θ_old)
advantages = estimate_advantages(rollouts, V_φ)
for epoch in 1..K: # K ≈ 4 típicamente
for minibatch in rollouts:
update θ on L^CLIP
update φ on (V_φ - R)^2
θ_old ← θ
Las "K épocas por batch de rollouts" es lo que hace a PPO eficiente en muestras frente a PG vanilla — reutilizas los mismos rollouts varias veces, lo cual el clipping hace seguro.
Qué falta para el lenguaje¶
Este capítulo planteó PPO en el marco MDP estándar. Para modelos de lenguaje necesitamos además:
- Una señal de recompensa — no hay entorno que nos dé \(r_t\). Solución: entrenar un modelo de recompensa (siguiente capítulo).
- Una manera de evitar que el LM se aleje demasiado de una distribución razonable. Solución: una penalización KL al modelo de referencia (capítulo 03).
Enlaces cruzados¶
- Fase 04 — Cálculo y optimización: el gradiente de política es solo retropropagación sobre \(-R \log \pi_\theta\).
- Fase 19 — Dinámica de entrenamiento: el clip de PPO es una intervención de dinámica de entrenamiento.
Referencias¶
- Williams 1992, Simple statistical gradient-following algorithms for connectionist reinforcement learning.
- Schulman et al. 2015, Trust Region Policy Optimization (TRPO).
- Schulman et al. 2017, Proximal Policy Optimization Algorithms. arXiv:1707.06347.