4 puntos por GN⁺ 2024-05-06 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2024-05-06
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

    • Me da curiosidad saber si depende mucho de Python o si también se puede seguir el material en otros lenguajes
    • Hoy seguí por primera vez los tres primeros notebooks y me parecieron bastante buenos; también probé Atari Gymnasium por primera vez y me dejó satisfecho, estuvo divertido
    • Estaría bien tener una página de SoTA separada donde se resuman las técnicas y resultados más recientes
  • 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

    • Es cierto que el consejo típico es “ajusta los hiperparámetros hasta encontrar la combinación correcta”, y sí ayuda, pero el problema suele estar escondido en varios rincones: el espacio del problema y su formulación, el algoritmo mismo, o la gran variación de desempeño según la semilla aleatoria
      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

    • Modelé algunos problemas de negocio de la empresa como un problema de multi-armed bandit, reduje el mayor costo en 10%, y además mostró una señal de verdad automatizada que ayudó a entender qué funciona y qué no en varias funcionalidades
      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
    • Estoy de acuerdo en que el aprendizaje por refuerzo puede ser muy decepcionante, y también en que hacer que realmente funcione ya de por sí es difícil
      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/
    • Siento que el aprendizaje por refuerzo está ahora mismo en una zona intermedia rara. Nadie sabe con certeza cómo hacer que funcione bien, pero la mayoría de los investigadores top de machine learning parecen verlo como un componente esencial para el siguiente avance de la IA
  • 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

    • Me da curiosidad saber si el agente al final sí logra avanzar y si estos notebooks ayudan хотя sea un poco
      Si solo quieres ver si los algoritmos realmente corren, puedes elegir alguno que parezca funcionar de la carpeta solution y ejecutarlo de una vez
      Si sale bien, luego ya puedes disfrutar la parte divertida de reimplementarlo desde cero
    • Este tipo de material es excelente, pero el aprendizaje por refuerzo en sí es un tema bastante denso y pesado, así que no sé bien si exista una manera de bajar su dificultad inherente
      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

    • Sí, eso podía resultar confuso en el notebook, así que subí un pequeño commit para que quede un poco más claro que la no determinación no viene de que el agente elija otra acción por error, sino de la naturaleza probabilística de la dinámica del entorno
      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 TODO eran 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 respuesta
    Es un enfoque inteligente, pero no se ve claro desde el inicio
    Al principio pensé que los TODO eran solo detalles menores dejados fuera para no interrumpir la idea general, pero en realidad esas partes eran lo central

    • No se me había ocurrido que TODO pudiera resultar confuso, así que actualicé las instrucciones en README.md para indicar explícitamente que son secciones de código que hay que completar
  • Habí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

    • Me interesa saber cómo les ayuda estos notebooks, cómo ha sido la experiencia de seguirlos, y cualquier feedback es bienvenido
  • Se ve bien, pero estaría bueno agregar un enlace a videos de YouTube en el README

    • Fue un error en el README; todavía no he podido hacer los videos de YouTube
      Aun así, parece que sí hay interés de la comunidad, así que voy a intentar hacerlos, y mientras tanto corregiré el README