Lançamento do ML-Agents v2.0: Agora suporta o treinamento de comportamentos cooperativos complexos

Há cerca de um ano, anunciamos o lançamento do pacote ML-Agents v1.0 Unity, que foi verificado para a versão 2020.2 do Editor. Hoje, temos o prazer de anunciar o lançamento da versão v2.0 do pacote ML-Agents Unity, atualmente em vias de ser verificado para o lançamento do Editor 2021.2. No ano passado, fizemos mais de quinze atualizações importantes no projeto ML-Agents GitHub, incluindo melhorias no fluxo de trabalho do usuário, novos algoritmos e recursos de treinamento e um aumento significativo no desempenho. Nesta postagem do blog, destacaremos três desenvolvimentos principais: A capacidade de treinar comportamentos cooperativos, permitir que os agentes observem várias entidades em seu ambiente e aproveitar a parametrização de tarefas para dar suporte ao treinamento de várias tarefas. Esses avanços combinados aproximam os ML-Agents do suporte total a ambientes cooperativos complexos.
Em nossa postagem no blog de fim de ano de 2020, fornecemos um breve resumo de todo o progresso que fizemos desde o lançamento da v1.0 em maio de 2020 até dezembro do mesmo ano. Também apresentamos as três principais melhorias algorítmicas nas quais planejamos nos concentrar no primeiro semestre de 2021: Comportamento cooperativo de vários agentes, a capacidade de um agente de observar um número variável de entidades e estabelecer um único modelo para resolver várias tarefas. Agora podemos dizer com orgulho que todos os três principais aprimoramentos estão disponíveis no ML-Agents.
Além desses três recursos, fizemos as seguintes alterações no pacote principal do ML-Agents:
Foram adicionados vários recursos que antes faziam parte de nossas extensões Pacote Unity - ou seja, o componente Grid Sensors e os tabuleiros de jogos Match-3.
Alocação aprimorada de memória durante a inferência. Em algumas de nossas cenas de demonstração, observamos uma redução de até 98%.
Removemos APIs obsoletas e reduzimos nosso espaço de API. Esses ajustes de quebra de API exigiram a atualização de nossa versão de 1.x para 2.0. Consulte nossas Notas de versão e o Guia de migração para obter mais detalhes sobre como fazer o upgrade com facilidade.
No restante desta postagem do blog, vamos expandir as funções dos comportamentos cooperativos, da observação de comprimento variável e da parametrização de tarefas, juntamente com dois aprimoramentos incrementais: Promoção de recursos do pacote de extensões e desempenho geral. Também apresentaremos uma atualização sobre nossa oferta de ML-Agents Cloud e compartilharemos uma prévia de nosso novo e empolgante ambiente de jogo que destacará comportamentos cooperativos complexos, antes de seu lançamento em apenas algumas semanas.
Em muitos ambientes, como em jogos multijogador como Among Us, os jogadores do jogo precisam colaborar para resolver as tarefas em questão. Embora anteriormente fosse possível treinar ML-Agents com vários agentes na cena, você não podia definir grupos de agentes específicos com metas mútuas até a versão 15 (março de 2020). O ML-Agents agora suporta explicitamente o treinamento de comportamentos cooperativos. Dessa forma, grupos de agentes podem trabalhar em prol de um objetivo comum, com o sucesso de cada indivíduo vinculado ao sucesso de todo o grupo.
Nesses cenários, os agentes normalmente recebem recompensas como um grupo. Portanto, se uma equipe de agentes vence um jogo contra uma equipe adversária, todos são recompensados, mesmo os agentes que não contribuíram diretamente para essa vitória, o que torna difícil aprender o que fazer de forma independente. É por isso que desenvolvemos um novo treinador multiagente (chamado MA-POCA para Multi-Agent POsthumous Credit Assignment; artigo completo no arXiv em breve) para treinar um crítico centralizado - uma rede neural que atua como "treinador" para todo o grupo de agentes.
Com esse acréscimo, você pode continuar a dar recompensas à equipe como um todo, mas os agentes também aprenderão a contribuir da melhor forma para a conquista compartilhada. Os agentes podem até receber prêmios individuais, para que se mantenham motivados e ajudem uns aos outros a atingir suas metas. Durante um episódio, você pode adicionar ou remover agentes do grupo, por exemplo, quando agentes aparecem ou morrem em um jogo. Se os agentes forem removidos no meio do episódio, eles ainda poderão entender se suas ações contribuíram ou não para a vitória da equipe mais tarde. Isso os capacita a colocar o grupo em primeiro lugar em suas ações, mesmo que acabem se retirando do jogo por meio do autossacrifício ou de outras decisões de jogo. Ao combinar a MA-POCA com o jogo autônomo, você também pode treinar equipes de agentes para jogarem entre si.
Além disso, desenvolvemos dois novos ambientes de amostra: Cooperative Push Block e Dungeon Escape. O Cooperative Push Block mostra uma tarefa que exige a conclusão de vários agentes. O vídeo abaixo exibe Dungeon Escape, no qual um agente deve matar o dragão, fazendo com que ele seja removido no meio do episódio, para que seus colegas de equipe possam pegar a chave e escapar da masmorra.
Leia nossa documentação para obter detalhes sobre como implementar agentes cooperativos em seu projeto.
Um dos recursos mais comumente solicitados para o kit de ferramentas foi permitir reações de personagens de jogos a números variados de entidades. Nos videogames, os personagens geralmente aprendem a lidar com vários inimigos ou itens ao mesmo tempo. Para atender a essa demanda, a versão 15 (março de 2020) agora permite especificar uma matriz de observações de comprimento arbitrário chamada de "buffer de observação". Os agentes podem aprender a utilizar um buffer de tamanho arbitrário por meio de um módulo de atenção que codifica e processa um número variável de observações.
O Attention Module é uma ótima solução em situações em que um personagem de jogo precisa aprender a evitar projéteis, por exemplo, mas o número de projéteis na cena não é fixo. Neste vídeo, cada projétil é representado por quatro valores: Dois para posicionamento e dois para velocidade. Para cada projétil na cena, esses quatro valores são anexados a um buffer de observações de projéteis. O agente pode então aprender a ignorar os projéteis que não estão em uma trajetória de colisão e, em vez disso, prestar mais atenção aos projéteis mais perigosos.
Além disso, os agentes podem aprender a importância das entidades com base em suas relações com as entidades na cena. Por exemplo, se os agentes precisarem aprender a classificar os ladrilhos em ordem crescente, eles poderão descobrir qual é o próximo ladrilho correto com base nas informações de todos os outros ladrilhos. Esse novo ambiente, chamado de Sorter, já está disponível como parte de nossos ambientes de exemplo, que você pode baixar e usar para começar.
Leia nossa documentação para obter detalhes sobre como implementar observações de comprimento variável em seu projeto.
Os personagens de videogame geralmente enfrentam várias tarefas em diferentes modos de jogo. Uma maneira de abordar esse desafio é treinar vários comportamentos separadamente e depois alternar entre eles. No entanto, é preferível treinar um único modelo que possa realizar várias tarefas ao mesmo tempo. Afinal, um único modelo reduz o espaço de memória no jogo final e, por extensão, reduz o tempo total de treinamento, pois o modelo pode reutilizar algumas partes da rede neural em várias tarefas. Para isso, adicionamos a capacidade de um único modelo codificar vários comportamentos usando HyperNetworks em nossa versão mais recente(versão 17).
Na prática, usamos um novo tipo de observação chamado "sinal de meta", bem como uma pequena rede neural chamada "HyperNetwork", para gerar alguns dos pesos de outra rede neural maior. Essa rede maior é a que informa o comportamento do agente e permite que a rede neural do comportamento tenha pesos diferentes, dependendo da meta do agente, mantendo algumas partes compartilhadas entre as metas, quando necessário.
O vídeo a seguir mostra um agente resolvendo duas tarefas presentes nos exemplos de ML-Agents(WallJump e PushBlock) ao mesmo tempo. Se a cor inferior for verde, o agente deverá empurrar o bloco para a zona verde. Mas se o quadrado superior direito for verde, o agente deverá pular a parede para o quadrado verde.
Leia nossa documentação para obter detalhes sobre como implementar a parametrização de tarefas usando sinais de meta em seu projeto.

Em novembro de 2020, escrevemos sobre como a Eidos desenvolveu um novo tipo de sensor em ML-Agents chamado Grid Sensor. Essa implementação do Grid Sensor foi adicionada ao nosso pacote de extensões na época, antes de iterarmos a implementação e promovê-la para a versão mais recente do pacote principal do ML-Agents.
Na versão 10 (novembro de 2020) do ML-Agents, introduzimos um novo ambiente Match-3 e adicionamos utilitários ao nosso pacote de extensões para permitir o treinamento de jogos Match-3. Desde então, fizemos uma parceria com a Code Monkey para lançar um vídeo tutorial. Semelhante ao Grid Sensors, tornamos nossos utilitários para treinamento de jogos Match-3 parte do pacote principal do ML-Agents em nossa versão mais recente.
Nosso objetivo é continuar aprimorando o ML-Agents. Depois de ouvir seu feedback sobre a quantidade de memória alocada durante a inferência, fizemos imediatamente reduções significativas na alocação. A tabela abaixo mostra uma comparação das métricas de coleta de lixo (kilobytes por etapa da Academia) em duas de nossas cenas de exemplo entre as versões 1.0 (lançada em maio de 2020) e 2.0 (lançada em abril de 2021). Essas métricas excluem a memória usada pelo Barracuda (o mecanismo de inferência do Unity do qual o ML-Agents depende para inferência entre plataformas):

Em nossa postagem v1.0 no blog, compartilhamos alguns detalhes sobre o ML-Agents Cloud. Nosso serviço ML-Agents Cloud permite que você inicie várias sessões de treinamento que são executadas em nossa infraestrutura de nuvem em paralelo, para que você possa concluir sua experimentação em tempo hábil. Hoje, a funcionalidade principal do ML-Agents Cloud permite que você:
Carregue suas compilações de jogos com ML-Agents implementados (C#).
Iniciar, pausar, retomar e interromper experimentos de treinamento. Você pode iniciar vários experimentos ao mesmo tempo e aproveitar máquinas de ponta para gerar muitas instâncias simultâneas do Unity para cada experimento de treinamento, tudo isso com tempos de conclusão mais rápidos.
Faça o download dos resultados de vários experimentos de treinamento.
Durante o restante de 2021, planejamos acelerar o desenvolvimento do ML-Agents Cloud, com base no feedback dos clientes da Alpha. As funcionalidades adicionais se concentrarão na capacidade de visualizar seus resultados, gerenciar seus experimentos a partir de uma interface de usuário da Web e aproveitar o ajuste de hiperparâmetros. Na verdade, ainda estamos aceitando candidatos para o programa Alpha hoje. Se estiver interessado em se inscrever, registre-se aqui.
Nesta publicação, delineamos três aprimoramentos principais que aproximam os ML-Agents do suporte a jogos cooperativos complexos. Demonstramos cada uma dessas três melhorias isoladamente e também discutimos os ambientes de amostra adicionados recentemente ao kit de ferramentas. O que ainda não revelamos é outro ambiente de exibição futuro chamado Dodgeball. Dodgeball é um jogo de equipe contra equipe que destaca a maneira como os três recursos trabalham juntos. Os agentes devem raciocinar em ambientes complexos para resolver vários modos, cooperar com colegas de equipe e observar entidades variadas em uma cena. Planejamos lançar esse ambiente nas próximas semanas, juntamente com outra postagem dedicada no blog. Até lá, dê uma olhada nesta prévia de nossos agentes treinando para jogar Dodgeball.
Em nome de toda a equipe da Unity ML-Agents, queremos agradecer a todos por terem se juntado a nós nessa jornada com apoio contínuo ao longo dos anos.
Se você quiser trabalhar nessa empolgante interseção entre aprendizado de máquina e jogos, estamos contratando para vários cargos e incentivamos você a se candidatar aqui.
Por fim, gostaríamos de ouvir seus comentários! Para obter feedback sobre o kit de ferramentas do Unity ML-Agents, preencha a pesquisa a seguir ou envie-nos um e-mail diretamente para ml-agents@unity3d.com. Se você encontrar algum problema, não hesite em entrar em contato conosco na página de problemas do ML-Agents no GitHub. Para quaisquer outros comentários ou perguntas gerais, entre em contato conosco nos fóruns do Unity ML-Agents.
