- drlzh.ai es un curso práctico en el que, en lugar de solo leer sobre aprendizaje por refuerzo profundo, se implementan algoritmos directamente; abarca desde MDP y RL tabular hasta RLHF, Decision Transformers, Dreamer y metaaprendizaje
- Los notebooks raíz son una pista de práctica en la que partes del código se reemplazaron por TODO guiados, mientras que los notebooks en
solution/ contienen versiones completas y ejecutables para consultar cuando te atasques
- El currículo está compuesto por notebooks del
00 al 18; la pista de fundamentos está diseñada para recorrerse en orden, y los notebooks avanzados son autocontenidos, aunque la numeración ofrece una ruta de aprendizaje base
- El workspace Docker ofrece de una vez code-server, notebooks, Python
>=3.13,<3.14, kernel de Jupyter, dependencias y la extensión de VS Code DRL-ZH AI Companion
- Quienes lo tomen deben estar familiarizados con Python, fundamentos de PyTorch y matemáticas para ML como probabilidad, estadística, álgebra lineal y derivadas; los notebooks asumen que se puede leer y modificar código de entrenamiento real
Descripción del proyecto
- drlzh.ai es un curso de aprendizaje por refuerzo profundo centrado en la práctica, diseñado para que construyas algoritmos directamente
- El alcance del aprendizaje comienza con MDP y RL tabular, y se expande a los siguientes temas
- Algoritmos basados en agentes de Atari
- Robots de control continuo
- Planificación al estilo AlphaZero
- RLHF para modelos de lenguaje
- Decision Transformers
- Políticas al estilo VLA
- Modelos de mundo
- Dreamer
- Metaaprendizaje
- Los notebooks raíz son una pista de ejercicios, con código reemplazado intencionalmente por secciones
TODO guiadas
- Los notebooks de
solution/ ofrecen versiones completas y ejecutables, para que quienes estén aprendiendo puedan resolver bloqueos sin salir del curso
Estructura del currículo
- El curso está compuesto por notebooks del
00 al 18
00-07 Foundations
- Implementa MDPs, RL tabular, DQN, REINFORCE, métodos actor-critic, DDPG, TD3, SAC y PPO
08-10 Breaking assumptions
- Cubre curiosidad RND, RL multiagente y RL offline con BC e IQL
11 Planning
- Cubre Monte Carlo Tree Search, self-play y aprendizaje de policy/value al estilo AlphaZero
12-13 Modern AI stack
- Cubre RLHF basado en PPO, DPO, GRPO, Decision Transformers y NanoVLA(
DTVLA)
14 Production
- Cubre TensorBoard, checkpoints, depuración, multiple seeds, Ray y Optuna
15-16 World models
- Cubre MBPO basado en SAC y
DR3AM/Dreamer con RSSM latent imagination
17-18 Meta + wrap-up
- Incluye MAML, FOMAML, adaptación rápida y el cierre del curso
- Los notebooks de fundamentos presuponen que se avanzará en orden
- Los notebooks avanzados son autocontenidos, pero la numeración ofrece una ruta base desde la exploración hasta el capstone del curso
DRL-ZH AI Companion
- El workspace Docker incluye DRL-ZH AI Companion, una extensión de VS Code para este curso
- La extensión reconoce el notebook y los
TODO en los que estás trabajando
- En lugar de dar la respuesta directamente, ofrece pistas socráticas
- Soporta modo de texto y modo de voz
- Cada usuario debe traer sus propias claves de LLM
- Gemini es el valor predeterminado
- También se admiten OpenAI, Anthropic y Groq
Entorno de ejecución y cómo empezar
- La configuración recomendada es Docker
- Docker ofrece los siguientes elementos en un workspace reproducible único
- code-server
- notebooks
- Python
>=3.13,<3.14
- kernel de Jupyter
- dependencias
- AI Companion
- Procedimiento básico de inicio
- Instala Docker y Git, clona el repositorio y luego entra al directorio correspondiente
- En Linux/macOS, ejecuta
printf "UID=$(id -u)\nGID=$(id -g)\n" > .env para ajustar la propiedad de los archivos al usuario
- Inicia el entorno base
docker compose up --build -d
- Abre
http://localhost:8080 en un navegador basado en Chromium y selecciona el kernel Python (drl-zh)
- Abre
00_Intro.ipynb y empieza a completar los TODO
- Si necesitas acceso a GPU NVIDIA, usa el siguiente comando
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d
- Para una imagen más pequeña solo para CPU, usa el siguiente comando
docker compose -f docker-compose.yml -f docker-compose.cpu.yml up --build -d
- Si prefieres una configuración nativa, consulta las instrucciones para Python, Poetry, VS Code y Companion en MANUAL.md
Conocimientos requeridos y licencia
- Quienes lo tomen deben estar familiarizados con
- Python
- Fundamentos de PyTorch
- Probabilidad, estadística, álgebra lineal y derivadas necesarias para ML
- Los notebooks enseñan RL en sí, pero presuponen que puedes leer y modificar código de entrenamiento real
- La licencia es MIT y los detalles están en LICENSE
1 comentarios
Comentarios en Hacker News
Mientras aprendía aprendizaje por refuerzo profundo reciente, encontré muchos buenos materiales, pero no hallé uno cuyo equilibrio entre teoría y práctica encajara justo con mi experiencia, así que hice el mío y lo publiqué como open source
En una serie de notebooks de Python reimplementé desde cero algoritmos como QLearning, DQN, SAC y PPO, y lo estructuré para seguir paso a paso tanto la teoría como la práctica de código hasta técnicas de punta de alrededor de 2018/2019
El título está tomado de "Neural Network: Zero To Hero" de Andrej Karpathy, y también pensaba hacer videos de YouTube, pero todavía no he tenido tiempo
Material de referencia: https://github.com/alessiodm/drl-zh/blob/main/00_Intro.ipynb, https://karpathy.ai/zero-to-hero.html
Si más adelante amplías más los capítulos, sería bueno cubrir qué hacer cuando algo se rompe, más que lo simple que ya funciona
Por ejemplo, problemas como que las acciones se queden siempre pegadas al valor máximo, o casos en que por más ruido que se agregue al aprendizaje off-policy nunca arranca la exploración
Lo básico por lo general sí corre, pero cuando de pronto aparece un problema del que casi nadie habla, harían falta más materiales prácticos que sirvan en esos casos
En aplicaciones reales de aprendizaje por refuerzo profundo, hay más casos en los que no funciona que en los que sí, y a este tutorial también le falta la parte de resolución de problemas, tuning y productización
Si tengo tiempo para ampliarlo, pienso poner esta parte como prioridad: https://www.alexirpan.com/2018/02/14/rl-hard.html
En la universidad estudié aprendizaje por refuerzo durante tres semestres, pero me decepcionó mucho enterarme de que técnicas modernas de RL ni siquiera pueden ganarle a una heurística simple en Tetris
Como cualquier otra herramienta, lo importante con los conceptos de aprendizaje por refuerzo es encontrar bien dónde usarlos
En clase muchas veces falta mostrar más dónde pueden aplicarse en el mundo real estas ideas tan poderosas
Hablar de políticas óptimas está bien, pero si no logras que se entienda dónde se pueden aplicar, fácilmente se queda en un paquete de matemáticas interesantes
Aun así, creo que vale la pena aprender al menos lo básico y los fundamentos
A diferencia del aprendizaje supervisado, no supervisado y el semisupervisado, que últimamente ha recibido mucha atención, el aprendizaje por refuerzo modela el problema de aprendizaje de una forma muy elegante: un agente que interactúa con un entorno y recibe retroalimentación
Incluso hoy hay casos de éxito prácticos, como el fine-tuning de LLM con RLHF, empresas de robótica como Covariant, o investigaciones que combinan LLM y aprendizaje por refuerzo como Nvidia Eureka: https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
Hice un framework de aprendizaje por refuerzo profundo para generación musical, parecido a OpenAI Gym
Si quieres probar los algoritmos del post original, siéntete libre de usarlo; también son bienvenidos los issues y PR
https://github.com/chaosprint/RaveForce
Hace tiempo intenté revisar por mi cuenta el aprendizaje por refuerzo profundo, pero el agente no lograba avances significativos y, como casi no tenía base en estadística ni machine learning, me costaba depurar qué estaba saliendo mal
Voy a seguir este material a ver qué tal resulta
Si solo quieres ver si los algoritmos realmente corren, puedes elegir alguno que parezca funcionar de la carpeta
solutiony ejecutarlo de una vezSi sale bien, luego ya puedes disfrutar la parte divertida de reimplementarlo desde cero
Creo que eso debería dejarse muy claro para principiantes
Es de lo que más se echa en falta en temas de machine learning, especialmente los relacionados con aprendizaje por refuerzo
Hace unos años hice algo parecido. No llega hasta PPO y el estilo es distinto
https://learndrl.com/
No digo que sea mejor ni peor, pero desde la perspectiva de quien aprende, siempre viene bien ver la misma información en varios formatos
Después de ver el ejemplo de MDP, quisiera hacer una sugerencia sobre cómo se introduce la función de transición no determinista
En el ejemplo actual, la no determinación surge porque el agente intenta ir arriba o abajo pero por error termina yendo a la izquierda o a la derecha, pero en el texto no queda suficientemente explicado que el agente se equivoca, así que al principio el comentario de la función
transition()me confundióAdemás, pedagógicamente quizá sería mejor presentar la no determinación como algo que viene del entorno y no del agente. Por ejemplo, al desplazarse sobre una superficie rugosa, aunque muevas las orugas o las extremidades, no siempre obtendrás el resultado deseado
Tal como está ahora, parece una función que va de una acción a una acción aleatoria y luego a un estado aleatorio, cuando la definición es una función que va de una acción a un estado aleatorio
Al principio pensaba cubrir esos huecos del texto con explicación de voz en un video, pero como no he tenido tiempo de hacer los videos, por ahora estoy corrigiendo antes esos vacíos
Solo después de leer bastante del tercer notebook me di cuenta de que los fragmentos de código marcados como
TODOeran en realidad ejercicios de programación que el lector debía implementar, y que los tests que venían después servían para revisar su respuestaEs un enfoque inteligente, pero no se ve claro desde el inicio
Al principio pensé que los
TODOeran solo detalles menores dejados fuera para no interrumpir la idea general, pero en realidad esas partes eran lo centralTODOpudiera resultar confuso, así que actualicé las instrucciones en README.md para indicar explícitamente que son secciones de código que hay que completarHabía quedado en una especie de limbo: ya había aprendido la teoría, pero me faltaba el conocimiento práctico necesario para usar aprendizaje por refuerzo de verdad, y esto parece justo el tipo de curso que estaba buscando
Se ve bien, pero estaría bueno agregar un enlace a videos de YouTube en el README
Aun así, parece que sí hay interés de la comunidad, así que voy a intentar hacerlos, y mientras tanto corregiré el README