4 pontos por GN⁺ 2024-05-06 | 1 comentários | Compartilhar no WhatsApp
  • drlzh.ai é um curso prático em que você implementa algoritmos de deep reinforcement learning em vez de apenas lê-los, cobrindo desde MDPs e RL tabular até RLHF, Decision Transformers, Dreamer e meta-learning
  • Os notebooks raiz são uma trilha prática em que partes do código foram substituídas por TODOs guiados, e os notebooks em solution/ trazem versões completas e executáveis para consultar quando você travar
  • O currículo é composto por notebooks de 00 a 18; a trilha básica foi projetada para ser seguida em ordem, e os notebooks avançados são autocontidos, embora a numeração ofereça um caminho de aprendizado padrão
  • O workspace Docker fornece de uma só vez code-server, notebooks, Python >=3.13,<3.14, kernel Jupyter, dependências e a extensão do VS Code DRL-ZH AI Companion
  • O aluno deve estar familiarizado com Python, noções básicas de PyTorch e matemática para ML, como probabilidade, estatística, álgebra linear e cálculo; os notebooks pressupõem que ele consegue ler e modificar código real de treinamento

Visão geral do projeto

  • drlzh.ai é um curso de deep reinforcement learning com foco prático, estruturado para que você crie os algoritmos por conta própria
  • O escopo de aprendizado começa com MDPs e RL tabular e se expande para os seguintes temas
    • Algoritmos baseados em agentes Atari
    • Robôs de controle contínuo
    • Planejamento no estilo AlphaZero
    • RLHF para modelos de linguagem
    • Decision Transformers
    • Políticas no estilo VLA
    • Modelos de mundo
    • Dreamer
    • Meta-learning
  • Os notebooks raiz são a trilha de exercícios, com código intencionalmente substituído por seções TODO guiadas
  • Os notebooks em solution/ oferecem versões completas e executáveis, para que o aluno consiga resolver pontos em que travar sem sair do curso

Estrutura do currículo

  • O curso é composto por notebooks de 00 a 18
  • 00-07 Foundations
    • Implementa MDPs, tabular RL, DQN, REINFORCE, actor-critic methods, DDPG, TD3, SAC e PPO
  • 08-10 Breaking assumptions
    • Cobre RND curiosity, multi-agent RL e offline RL usando BC e IQL
  • 11 Planning
    • Cobre Monte Carlo Tree Search, self-play e aprendizado de policy/value no estilo AlphaZero
  • 12-13 Modern AI stack
    • Cobre RLHF baseado em PPO, DPO, GRPO, Decision Transformers e NanoVLA(DTVLA)
  • 14 Production
    • Cobre TensorBoard, checkpoints, debugging, multiple seeds, Ray e Optuna
  • 15-16 World models
    • Cobre MBPO baseado em SAC e DR3AM/Dreamer usando RSSM latent imagination
  • 17-18 Meta + wrap-up
    • Composto por MAML, FOMAML, fast adaptation e encerramento do curso
  • Os notebooks básicos pressupõem que você avance em ordem
  • Os notebooks avançados são autocontidos, mas a numeração oferece um caminho padrão, da exploração ao capstone do curso

DRL-ZH AI Companion

  • O workspace Docker inclui DRL-ZH AI Companion, uma extensão do VS Code para este curso
  • A extensão reconhece o notebook e os TODOs em que o usuário está trabalhando
  • Em vez de dar a resposta diretamente, ela oferece dicas socráticas
  • Suporta modo de texto e modo de voz
  • O usuário precisa trazer sua própria chave de LLM
    • Gemini é o padrão
    • OpenAI, Anthropic e Groq também são suportados

Ambiente de execução e como começar

  • A configuração recomendada é Docker
  • O Docker fornece os seguintes elementos em um workspace reprodutível único
    • code-server
    • notebooks
    • Python >=3.13,<3.14
    • kernel Jupyter
    • dependências
    • AI Companion
  • Procedimento básico de início
    • Instale Docker e Git, clone o repositório e entre no diretório correspondente
    • No Linux/macOS, execute printf "UID=$(id -u)\nGID=$(id -g)\n" > .env para ajustar a propriedade dos arquivos ao seu usuário
    • Inicie o ambiente padrão
docker compose up --build -d
  • Abra http://localhost:8080 em um navegador baseado em Chromium e selecione o kernel Python (drl-zh)
  • Abra 00_Intro.ipynb e comece a preencher os TODOs
  • Se precisar de acesso a GPU NVIDIA, use o seguinte comando
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build -d
  • Para uma imagem menor somente CPU, use o seguinte comando
docker compose -f docker-compose.yml -f docker-compose.cpu.yml up --build -d
  • Se preferir uma configuração nativa, consulte em MANUAL.md as instruções para Python, Poetry, VS Code e Companion

Conhecimentos exigidos e licença

  • O aluno deve estar familiarizado com
    • Python
    • Noções básicas de PyTorch
    • Probabilidade, estatística, álgebra linear e cálculo necessários para ML
  • Os notebooks ensinam RL em si, mas pressupõem que você consegue ler e modificar código de treinamento real
  • A licença é MIT, e os detalhes estão em LICENSE

1 comentários

 
GN⁺ 2024-05-06
Comentários no Hacker News
  • Enquanto eu aprendia aprendizado por reforço profundo moderno, encontrei muitos bons materiais, mas não achei nenhum que equilibrasse teoria e prática de um jeito que combinasse exatamente com a minha experiência, então criei eu mesmo e publiquei como open source.
    Em uma série de notebooks Python, reimplementei do zero algoritmos como QLearning, DQN, SAC e PPO, e organizei tudo para acompanhar passo a passo a teoria e os exercícios de programação até técnicas de ponta por volta de 2018/2019.
    O título veio de "Neural Network: Zero To Hero", de Andrej Karpathy, e eu também pensei em fazer vídeos no YouTube, mas ainda não tive tempo.
    Referências: https://github.com/alessiodm/drl-zh/blob/main/00_Intro.ipynb, https://karpathy.ai/zero-to-hero.html

    • Fico curioso para saber se o material depende muito de Python ou se dá para acompanhá-lo também em outras linguagens.
    • Hoje acompanhei os três primeiros notebooks pela primeira vez, achei muito bons, e usei o Atari Gymnasium pela primeira vez; fiquei satisfeito e achei divertido.
    • Seria bom ter uma página de SoTA separada, reunindo as técnicas e os resultados mais recentes.
  • Se os capítulos forem expandidos no futuro, seria bom abordar o que fazer quando algo quebra, em vez de apenas coisas simples que já funcionam bem.
    Por exemplo, problemas como as ações ficarem presas sempre no valor máximo, ou a exploração não começar mesmo adicionando bastante ruído ao treinamento off-policy.
    O básico geralmente funciona, mas eu gostaria que houvesse mais material prático para usar quando surge de repente um problema sobre o qual quase ninguém fala.

    • É verdade que o conselho comum é “ajuste os hiperparâmetros até encontrar a combinação certa”, e isso às vezes ajuda, mas o problema costuma estar escondido em vários cantos, como o espaço e a formulação do problema, o próprio algoritmo e a grande variação de desempenho dependendo da semente aleatória.
      Em aplicações reais de aprendizado por reforço profundo, há mais casos que não funcionam do que casos que funcionam, e este tutorial também é fraco em solução de problemas, ajuste e produção.
      Se eu tiver tempo para expandi-lo, pretendo priorizar essa parte: https://www.alexirpan.com/2018/02/14/rl-hard.html
  • Estudei aprendizado por reforço por três semestres na universidade, mas fiquei muito decepcionado ao descobrir que técnicas modernas de aprendizado por reforço não conseguem superar nem heurísticas simples no Tetris.

    • Modelei parte dos problemas de negócio da empresa como um problema de bandido multiarmado, reduzi o maior custo em 10% e também mostrei um sinal automatizado de verdade que ajudava a entender o que funcionava e o que não funcionava em vários recursos.
      Conceitos de aprendizado por reforço, como qualquer outra ferramenta, precisam ser aplicados no lugar certo.
      Nas aulas, muitas vezes falta mostrar mais onde ideias poderosas podem ser usadas no mundo real.
      Falar sobre política ótima é ótimo, mas, se você não faz as pessoas entenderem onde ela pode ser aplicada, é fácil virar apenas um conjunto de matemática interessante.
    • Concordo que aprendizado por reforço pode ser muito decepcionante, e também concordo que fazê-lo funcionar de verdade é difícil.
      Mesmo assim, acho que vale a pena aprender ao menos o básico e os fundamentos.
      Ao contrário de aprendizado supervisionado, não supervisionado e do aprendizado semissupervisionado que ganhou muita atenção recentemente, o aprendizado por reforço modela problemas de aprendizagem de forma muito elegante, com um agente que interage com um ambiente e recebe feedback.
      Mesmo hoje há casos de sucesso práticos, como ajuste fino de LLMs com RLHF, empresas de robótica como a Covariant e pesquisas que combinam LLMs e aprendizado por reforço, como o Nvidia Eureka: https://www.alexirpan.com/2018/02/14/rl-hard.html, https://blogs.nvidia.com/blog/eureka-robotics-research/
    • Aprendizado por reforço parece estar em uma zona intermediária estranha agora. Ninguém sabe ao certo como fazê-lo funcionar bem, mas a maioria dos principais pesquisadores de aprendizado de máquina parece considerá-lo um componente essencial para o próximo avanço da IA.
  • Criei um framework de aprendizado por reforço profundo para geração musical, parecido com o OpenAI Gym.
    Se quiser testar os algoritmos do post original, fique à vontade para usar; issues e PRs também são bem-vindos.
    https://github.com/chaosprint/RaveForce

  • Há algum tempo examinei aprendizado por reforço profundo por conta própria, mas o agente não conseguia fazer nenhum progresso significativo e, como eu quase não tinha base em estatística ou aprendizado de máquina, era difícil depurar o que estava errado.
    Pretendo acompanhar este material e ver no que dá.

    • Fico curioso para saber se o agente acaba mostrando progresso e se estes notebooks ajudam nem que seja um pouco.
      Se você só quiser ver se o algoritmo realmente roda, pode escolher um algoritmo que deve funcionar na pasta solution e executá-lo diretamente.
      Se der certo, depois é só aproveitar a diversão de reimplementá-lo do zero.
    • Materiais como esse são ótimos, mas aprendizado por reforço em si é um tema bastante denso e pesado, então não sei bem se há como reduzir sua dificuldade intrínseca.
      Acho que isso deveria ficar claro para iniciantes.
      Essa é a parte que mais sinto falta em temas de aprendizado de máquina, especialmente em tópicos relacionados a aprendizado por reforço.
  • Fiz algo parecido alguns anos atrás. Não chega até PPO, e o estilo também é diferente.
    https://learndrl.com/
    Não estou dizendo que é melhor ou pior, mas, para quem está aprendendo, é sempre bom encontrar a mesma informação em vários formatos.

  • Depois de ver o exemplo de MDP, gostaria de sugerir algo sobre a forma de introduzir uma função de transição não determinística.
    No exemplo atual, a não determinismo surge quando o agente tenta ir para cima ou para baixo, mas por engano vai para a esquerda ou para a direita; como o texto não explica suficientemente que o agente comete erros, os comentários da função transition() foram confusos para mim no início.
    Além disso, do ponto de vista didático, talvez seja melhor apresentar a não determinismo como algo vindo do ambiente, não do agente. Por exemplo, mover-se sobre uma superfície irregular, de modo que mover esteiras ou membros nem sempre produza o resultado pretendido.
    A formulação atual parece uma função que vai de uma ação para uma ação aleatória e depois para um estado aleatório, mas a definição é uma função que vai de uma ação para um estado aleatório.

    • Nos notebooks isso realmente podia ser confuso, então fiz um pequeno commit para deixar um pouco mais claro que a não determinismo vem da natureza probabilística da dinâmica do ambiente, e não do agente escolher outra ação por engano.
      No início eu pretendia preencher as lacunas do texto com narração em vídeo, mas, como não tive tempo de fazer os vídeos, estou primeiro corrigindo essas lacunas.
  • Só depois de ler boa parte do terceiro notebook percebi que os trechos de código marcados como TODO eram, na verdade, exercícios de programação que o leitor deveria implementar, e que os testes seguintes serviam para verificar a própria resposta.
    É uma abordagem inteligente, mas não ficou claro desde o começo.
    No início achei que os detalhes pequenos tinham sido deixados como TODO para não atrapalhar a visão geral, mas na verdade essas partes eram centrais.

    • Eu não tinha pensado que TODO poderia confundir, então atualizei as instruções no README.md para deixar claro que são trechos de código a serem concluídos.
  • Eu tinha aprendido a teoria, mas estava meio preso, sem o conhecimento prático necessário para realmente usar aprendizado por reforço; este parece exatamente o tipo de curso que eu estava procurando.

    • Fico curioso para saber como estes notebooks ajudam, como foi sua experiência ao acompanhá-los, e qualquer feedback é bem-vindo.
  • Parece bom; seria legal adicionar ao README um link para os vídeos do YouTube.

    • Foi um erro no README; ainda não consegui fazer os vídeos do YouTube.
      Mas parece haver interesse da comunidade, então vou tentar fazê-los, e enquanto isso vou corrigir o README.