A IA da Deepmind está aprendendo sobre a arte da codificação
Gregory Barber
No campo da informática, talvez não haja tarefa mais fundamental do que ordenar. Bolha, amontoa, mescla - faça a sua escolha. Os métodos para reordenar dados dentro de um computador foram teorizados até a morte, serviram como exercícios práticos para milhões de novatos e foram otimizados por décadas por desenvolvedores especializados. Digite uma função sort() em qualquer linguagem de programação e você pode confiar nesse código. Não toque nele. Já funciona muito bem.
Mas no ano passado, um sistema de IA desenvolvido por engenheiros do Deepmind do Google melhorou muito apenas o suficiente para importar. O sistema, que a Deepmind chama de AlphaDev, foi encarregado de criar uma nova maneira de classificar sequências curtas em números em C++, a popular linguagem de codificação. Significava entrar nos bastidores e fazer com que a IA construísse novos algoritmos em código assembly – as instruções que preenchem a lacuna entre linguagens de programação como C++ e hardware de computador. Quando um desenvolvedor C++ diz ao computador para "classificar", esses comandos são convertidos em código legível por máquina que informa à memória e ao processador do computador exatamente o que fazer: para onde mover os dados e como alterá-los. É onde os bits encontram o metal.
O experimento funcionou. Desde abril do ano passado, o C++ está rodando um pouco mais rápido, graças a um novo conjunto de algoritmos de classificação elaborados por IA. Mas de acordo com os engenheiros da AlphaDev, que descreveram o trabalho hoje na Nature, esse é apenas o primeiro passo. "Queremos otimizar toda a pilha de computação", diz Daniel Mankowitz, um cientista de pesquisa da Deepmind que liderou o projeto de classificação. Mankowitz diz que o AlphaDev já melhorou os algoritmos não apenas para classificação, mas também para outras tarefas básicas, como hashing.
"Acho esse trabalho incrivelmente empolgante", diz Armando Solar-Lezama, especialista em síntese de programas do MIT, que não participou da pesquisa. É útil que a IA crie um novo algoritmo de classificação; é um negócio muito maior construir uma IA que pode aprender a escrever código de última geração em uma variedade de tarefas, diz ele. Isso significa que o AlphaDev começou a aprender algo mais fundamental sobre a própria arte de codificar.
Isso vem com restrições significativas, é claro. "São programas minúsculos, minúsculos", acrescenta — totalizando não mais do que algumas dezenas de instruções em código assembly. Mas esses minúsculos programas geralmente representam grandes gargalos para o desempenho do computador, tendo sido otimizados até onde as pessoas podem empurrá-los. No geral, os novos algoritmos de classificação C++ do AlphaDev são 1,7% mais eficientes do que os métodos anteriores ao classificar longas sequências de números e até 70% mais rápido para sequências de cinco itens. Em escala, essas melhorias se somam, diz Mankowitz. Desde que o código escrito por IA foi submetido à Libc++, uma importante biblioteca de código aberto para C++, ele estima que os algoritmos foram usados trilhões de vezes por dia.
Essas melhorias são graças a uma técnica chamada aprendizado por reforço, que é a mesma abordagem usada para ajudar a IA do Deepmind a dominar jogos como xadrez e Go. Esse tipo de IA aprende fazendo. Funciona tratando uma determinada tarefa – como escrever um programa de montagem – como um jogo, no qual a IA recebe recompensas por fazer movimentos inteligentes que aumentam a eficiência do programa. Com o tempo, o sistema trabalha para maximizar essa recompensa, resultando em uma estratégia Go vencedora ou em um programa de montagem mais rápido. Isso difere do tipo de IA encontrado em grandes modelos de linguagem como GPT-4, que dependem de grandes quantidades de dados para aprender a escrever palavras ou códigos. Isso é ótimo para produzir textos que reflitam o tom da Internet ou produzir segmentos comuns de código. Mas não é tão bom em produzir soluções novas e de última geração para desafios de codificação que a IA nunca viu antes.
Jeremy White
Kate Knibbs
Jeremy White
Gideon Lichfield
Como jogar xadrez ou Go, escrever código assembly é uma tarefa complicada e aberta, com muitos movimentos potenciais e muitas maneiras de estragar tudo. Linguagens de programação modernas, como C++ ou Python, mascaram o âmago da questão da movimentação de dados com comandos curtos que espelham a linguagem humana. Na década de 1950, quando essas linguagens de "alto nível" foram lançadas, alguns acreditavam que o problema da programação havia sido basicamente resolvido. Até então, a programação era essencialmente apenas mexer em assembly - tanto que Fortran, uma das primeiras linguagens de alto nível, foi inicialmente comercializado como o "sistema de codificação automática Fortran", porque seus comandos sempre eram traduzidos em código assembly funcional. "Fortran escreveria código melhor do que os humanos e sem bugs", diz Solar-Lezama. "Hoje isso soa ridículo. Mas era verdade."