- Métodos Basados en Política: Policy Gradient y Juegos Complejos
Métodos Basados en Política: Policy Gradient y Juegos Complejos
Bienvenido a una de las fronteras más poderosas del Aprendizaje por Refuerzo. En esta lección abordaremos los métodos basados en política, donde el agente aprende directamente una política parametrizada. Este enfoque es particularmente eficaz en espacios de acción continuos o de alta dimensión, como el control de un brazo robótico o la toma de decisiones en juegos complejos.
🧠 Parametrización directa π(a|s;θ)
Representamos la política como una distribución de probabilidad sobre acciones, condicionada al estado. Los parámetros θ se ajustan para maximizar el retorno esperado.
📈 Gradiente de política ∇J(θ)
Teorema fundamental:
∇J(θ) = E[ Σ ∇log π(a|s;θ) * R(τ) ]. Nos permite subir la gradiente de la recompensa acumulada.
⚙️ REINFORCE Monte Carlo
Algoritmo clásico que usa trayectorias completas. Recolecta episodios, calcula retornos Gt y actualiza los parámetros en la dirección de ∇log π * Gt.
Fundamentos: Parametrización de la política
En lugar de aprender una función de valor y derivar la política (como en Q-learning), los métodos de policy gradient parametrizan directamente la política π(a|s;θ). Esto es ideal para:
- Acciones continuas: por ejemplo, controlar la velocidad de un motor o el ángulo de un brazo robótico.
- Políticas estocásticas: necesarias en entornos donde la exploración es clave.
- Convergencia más estable en algunos problemas, aunque con varianza alta.
Objetivo de optimización: maximizar J(θ) = E[ Σ γt rt ].
Derivamos el gradiente usando el Policy Gradient Theorem, que evita derivar la dinámica del entorno:
∇J(θ) = Eτ [ Σt ∇log π(at|st;θ) · R(τ) ]
Algoritmo REINFORCE: paso a paso
- Recolectar una trayectoria completa τ = (s0, a0, r1, s1, ..., sT) siguiendo la política actual.
- Calcular los retornos acumulados Gt = Σk=0 γk rt+k+1.
- Actualizar los parámetros en la dirección que aumenta la probabilidad de acciones que llevaron a altos retornos:
- θ ← θ + α · ∇log π(at|st;θ) · Gt
Este método es libre de modelo (model-free) y de Monte Carlo, por lo que sufre de alta varianza en las estimaciones del gradiente.
Derivación intuitiva del gradiente de política
Imaginemos que estamos en un juego complejo (como un brazo robótico con 7 articulaciones). Queremos ajustar la política para aumentar la probabilidad de acciones exitosas. Matemáticamente:
- ∇log π(a|s;θ) · R: indica cómo cambiar la probabilidad de una acción para aumentar la recompensa.
- Promediamos sobre todas las trayectorias (esperanza) para obtener una dirección de mejora.
Nota pedagógica: El uso del logaritmo convierte el producto en suma, facilitando la derivación y estabilidad numérica. Multiplicar por el retorno total R(τ) pondera la importancia de cada paso.
Implementación en Python con PyTorch
A continuación se muestra una implementación minimalista de REINFORCE para un entorno de control continuo (simulación de brazo robótico simple). La política es una red neuronal con salida gaussiana (media y desviación).
import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
class PolicyNetwork(nn.Module):
def __init__(self, state_dim, action_dim, hidden=128):
super().__init__()
self.fc = nn.Sequential(
nn.Linear(state_dim, hidden),
nn.ReLU(),
nn.Linear(hidden, hidden),
nn.ReLU(),
)
self.mean_head = nn.Linear(hidden, action_dim)
self.log_std = nn.Parameter(torch.zeros(action_dim))
def forward(self, state):
x = self.fc(state)
mean = self.mean_head(x)
std = torch.exp(self.log_std)
return mean, std
def sample_action(self, state):
mean, std = self.forward(state)
dist = torch.distributions.Normal(mean, std)
action = dist.sample()
log_prob = dist.log_prob(action).sum(dim=-1)
return action, log_prob
def reinforce(env, policy, optimizer, episodes=1000, gamma=0.99):
for ep in range(episodes):
states, actions, rewards, log_probs = [], [], [], []
state, _ = env.reset()
done = False
while not done:
state_t = torch.FloatTensor(state).unsqueeze(0)
action, log_prob = policy.sample_action(state_t)
next_state, reward, done, _, _ = env.step(action.detach().numpy()[0])
states.append(state)
actions.append(action)
rewards.append(reward)
log_probs.append(log_prob)
state = next_state
# Calcular retornos G_t
G = 0
returns = []
for r in reversed(rewards):
G = r + gamma * G
returns.insert(0, G)
returns = torch.tensor(returns, dtype=torch.float32)
# Actualizar gradiente
loss = []
for log_prob, Gt in zip(log_probs, returns):
loss.append(-log_prob * Gt) # gradiente ascendente
loss = torch.stack(loss).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
return policy
Juegos complejos y espacio de acciones continuas
En el control de un brazo robótico, las acciones pueden ser torques continuos en cada articulación. REINFORCE permite explorar estas acciones sin discretizar el espacio. Sin embargo, la varianza puede ser prohibitiva si no se introduce una línea base (baseline).
📉 Alta varianza
El gradiente estimado con una sola trayectoria puede fluctuar enormemente. Se necesitan muchos episodios para converger.
⚖️ Línea base (baseline)
Restar una función de valor V(s) del retorno: ∇J = E[∇log π · (Gt - V(st)) ]. Reduce varianza sin sesgar el gradiente.
🔁 Ventaja
La diferencia Gt - V(st) se denomina ventaja, y mide qué tan mejor fue la acción respecto al promedio.
Desafíos y línea base (baseline)
- Alta varianza: la actualización depende de la suma total de recompensas, que puede variar drásticamente entre episodios.
- Muestreo ineficiente: REINFORCE usa solo una trayectoria por actualización (Monte Carlo).
- Una línea base común es la función de valor del estado V(s). Se aprende simultáneamente y se resta de Gt.
- Esto da lugar al método REINFORCE with baseline, antecesor de algoritmos como A2C (Advantage Actor-Critic).
Demostración conceptual: si restamos una constante b (dependiente del estado) del retorno, la esperanza del gradiente no cambia, pero la varianza se reduce si b está correlacionada con Gt. La elección óptima es b = V(s).
| Componente | Función | Impacto |
|---|---|---|
| π(a|s;θ) | Política parametrizada (red neuronal) | Genera acciones continuas |
| ∇log π * Gt | Dirección del gradiente | Aumenta probabilidad de acciones con alta recompensa |
| Gt - V(s) (ventaja) | Función de ventaja | Reduce varianza manteniendo el sesgo nulo |
| Trayectoria completa | Recolección on-policy | Exploración completa del episodio |
Conclusión y próximos pasos
Los métodos basados en política ofrecen un camino natural para abordar problemas con acciones continuas y políticas estocásticas. REINFORCE es el punto de partida, pero su alta varianza motiva el uso de líneas base y el desarrollo de métodos actor-crítico, que exploraremos más adelante.
📌 Para dominar este tema, implementa REINFORCE en un entorno como Pendulum-v1 o LunarLanderContinuous y observa cómo la línea base transforma la estabilidad del aprendizaje.
Lección diseñada con rigor pedagógico — Odisea Algorítmica: De la Regresión al Aprendizaje Profundo · © 2025
No hay comentarios por ahora.
Compartir este contenido
Compartir enlace
Compartir en redes sociales
Compartir por correo electrónico
Please iniciar sesión para compartir esto Artículo por correo electrónico.