Python Data Science Program
📓 Abrir notebook en GitHub

Clase 165 — RL moderno: A3C, PPO, SAC (vista general)

Parte: 2 — Deep Learning · Fuente: papers A3C (Mnih 2016), PPO (Schulman 2017), SAC (Haarnoja 2018) + docs Stable-Baselines3. ⏱️ Duración estimada: 65 min.

🎯 Objetivo

Vista general (sin implementación desde cero) de los 3 algoritmos modernos de RL: A3C (Asynchronous Advantage Actor-Critic), PPO (Proximal Policy Optimization — el default industrial), y SAC (Soft Actor-Critic — off-policy, continuous actions). Saber cuál elegir y cómo usarlos con Stable-Baselines3.

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. PPO con SB3: from stable_baselines3 import PPO; model = PPO('MlpPolicy', 'CartPole-v1', verbose=1); model.learn(50_000). Evaluar.
  2. SAC en Pendulum: SAC('MlpPolicy', 'Pendulum-v1').learn(20_000).
  3. Comparar: PPO vs SAC en LunarLander; reportar return y sample efficiency.
  4. TensorBoard: PPO(..., tensorboard_log='./tb/') y ver curvas.
  5. Custom callback: EvalCallback para evaluar cada N steps y guardar mejor modelo.

📝 Homework verificable

Entrenar PPO en LunarLander-v3:

  1. PPO('MlpPolicy', 'LunarLander-v3', verbose=1, tensorboard_log='./tb/').
  2. model.learn(total_timesteps=500_000).
  3. Evaluar 100 episodios; reportar mean reward.

Criterio de aceptación: mean reward ≥ 200 (problema resuelto); TensorBoard muestra curva ascendente.

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
PPO no converge LR alto o env muy complejo. Fix: learning_rate=3e-4 (default), n_steps=2048, batch_size=64.
SAC en discrete actions SAC es continuous. Fix: PPO o DQN para discreto.
Reward "stuck" en ~0 El env tal vez no es resoluble con MLP. Fix: probar otra policy network.
Training muy lento Pocos parallel envs. Fix: make_vec_env('CartPole-v1', n_envs=8).
Modelo guardado no carga Versión de SB3 incompatible. Fix: model = PPO.load('m') con misma versión.

❓ Preguntas frecuentes

❓ ¿PPO o SAC?

❓ ¿Cuántos steps?

CartPole: 50k. LunarLander: 500k. Atari: 10M+. Robótica MuJoCo: 1M-10M.

❓ ¿RL para LLM (RLHF)?

PPO es el algo estándar de RLHF. DPO (clase 128) lo reemplazó por simplicidad.

❓ ¿Cuándo NO usar RL?

Si el problema es supervised (clasificación, regresión), no uses RL. RL es sample-inefficient y caro.

❓ ¿Hyperparameter tuning?

Optuna sobre SB3 o rl_zoo3 que tiene hyperparams pre-tuneados para muchos envs.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 166 — TF Serving + gRPC (+ ONNX, TensorRT, vLLM/TGI)