Os algoritmos gerados por Inteligência Artificial já estão a ser usados por milhões de programadores.
A empreitada de descobertas da DeepMind no campo da ciência da computação fundamental continua. No ano passado, a empresa usou uma versão do AlphaZero, uma Inteligência Artificial (IA) treinada para jogos, para encontrar novas maneiras de acelerar a resolução de um cálculo crucial da matemática que já perdurava 50 anos sem resposta e que estava no cerne de muitos tipos de aplicações de código.
Agora fez o mesmo truque novamente, não só uma, como duas vezes. A empresa com sede no Reino Unido, e que foi recentemente renomeada como Google DeepMind após uma fusão com o laboratório de IA de sua empresa parceira em abril, usou uma nova versão do AlphaZero chamada AlphaDev e descobriu uma maneira de organizar itens em uma lista até 70% mais rápido do que o método existente considerado o melhor.
Além disso, a empresa encontrou uma maneira de acelerar em 30% um algoritmo fundamental usados na criptografia. Esses algoritmos são componentes essenciais dos softwares e até pequenos aumentos de velocidade podem fazer uma grande diferença, reduzindo custos e economizando energia.
“A Lei de Moore está chegando ao fim, ou seja, os chips estão se a aproximar dos seus limites físicos fundamentais e a sua produção se tornará mais desafiadora”, diz Daniel Mankowitz, cientista investigador da Google DeepMind. “Por isso, precisamos encontrar maneiras novas e inovadoras de otimizar a computação”.
“É uma nova abordagem interessante”, diz Peter Sanders, que estuda o projeto e a implementação de algoritmos eficientes no Instituto de Tecnologia de Karlsruhe, na Alemanha, e que não estava envolvido no trabalho. “O processo de classificação ainda é um dos procedimentos mais usados na computação”, diz.
A DeepMind publicou os seus resultados na Nature no início de junho. Mas as técnicas descobertas pela AlphaDev já estão a ser usadas por milhões de programadores de software. Em janeiro de 2022, a DeepMind submeteu seus novos algoritmos de classificação ao grupo responsável pela gestão do C++, uma das linguagens de programação mais populares do mundo. Após passar por um rigoroso processo de avaliação independente durante dois meses, os algoritmos da AlphaDev foram incorporados à linguagem. Esta foi a primeira alteração nos algoritmos de classificação do C++ em mais de uma década e a primeira atualização a envolver um algoritmo descoberto por meio de IA.
A DeepMind adicionou seus outros novos algoritmos ao Abseil, uma coleção de código aberto de algoritmos C++ pré-escritos que podem ser usados por qualquer pessoa que utiliza o C++ para codificar. Esses algoritmos de criptografia calculam números chamados hashes que podem ser usados como identificadores únicos para qualquer tipo de dado. A DeepMind estima que seus novos algoritmos estão sendo usados trilhões de vezes por dia.
O AlphaDev é construído com base no AlphaZero, um modelo de reinforcement learning que a DeepMind treinou para dominar jogos como Go e xadrez. A inovação da empresa foi tratar como um jogo o problema de encontrar um algoritmo mais rápido e, em seguida, treinar sua IA para vencê-lo, a mesma abordagem usada no ano passado para acelerar as multiplicações de matrizes.
No caso do AlphaDev, o jogo envolve escolher instruções de computador e colocá-las em ordem para que as linhas de código resultantes formem um algoritmo. O AlphaDev ganha o jogo se o algoritmo for tanto correto quanto mais rápido do que os já existentes. Parece simples, mas para jogar bem, o AlphaDev deve explorar uma quantidade astronômica de movimentos possíveis.
A DeepMind escolheu trabalhar com a linguagem de programação assembly (ou de montagem), que pode ser usada para fornecer instruções específicas sobre como manipular números em um chip de computador. Poucas pessoas escrevem nesta linguagem, pois é utilizada na tradução dos códigos escritos em C++ antes de serem executados. A vantagem da linguagem de montagem é que possibilita a decomposição dos algoritmos em etapas minuciosas, um bom ponto de partida se você estiver procurando por atalhos.
Os chips de computador têm compartimentos (slots) diferentes onde os números são inseridos por meio de instruções e, em seguida, processados. A linguagem assembly inclui instruções básicas para manipular o conteúdo desses slots, como mov(A,B), que instrui o computador a mover o número que está no slot A para o slot B, e cmp(A,B), que diz ao computador para verificar se o que está no slot A é menor, igual ou maior que o que está no slot B. Sequências longas de tais instruções podem realizar todas as operações que os computadores executam.
O AlphaDev adiciona uma nova instrução de montagem ao algoritmo que está sendo desenvolvido. No início, o AlphaDev adicionava instruções aleatoriamente, gerando algoritmos que não poderiam ser executados. Com o tempo, assim como o AlphaZero fazia com os jogos de tabuleiro, aprendeu a fazer jogadas vencedoras, acrescentando instruções que resultaram em algoritmos que não apenas eram executáveis, mas também eram corretos e rápidos.
A DeepMind concentrou-se no desenvolvimento de algoritmos para classificar listas curtas de três a cinco itens. Esses algoritmos são utilizados repetidamente em programas que classificam listas mais longas. Assim, aumentos de velocidade nessas pequenas rotinas de ordenação terão um efeito cumulativo.
Mas por décadas humanos também estudaram e otimizaram algoritmos de tamanhos reduzido. Mankowitz e os seus colegas começaram com um algoritmo para classificar uma lista de três itens apenas como uma prova de conceito. A melhor versão desenvolvida por humanos desse algoritmo envolve 18 instruções. Eles não acreditavam que seriam capazes de melhorá-lo.
“Sinceramente, não esperávamos alcançar nada melhor que aquele número”, diz Mankowitz. “Mas, para nossa surpresa, conseguimos torná-lo mais rápido. Inicialmente, pensamos que era um erro, um bug ou algo assim, mas quando analisamos o programa, percebemos que o AlphaDev havia realmente descoberto algo”.
O AlphaDev encontrou uma maneira de ordenar uma lista de três itens em 17 instruções em vez de 18. O que se descobriu foi que certas etapas podem ser puladas. “Quando analisamos depois, pensamos: ‘Uau, isso definitivamente faz sentido’”, diz Mankowitz. “Mas para descobrir algo assim [sem utilizar o AlphaDev], são necessárias pessoas que sejam especialistas em linguagem assembly”.
O AlphaDev pode não ter conseguido superar a melhor versão humana do algoritmo para ordenar uma lista de quatro itens, que leva 28 instruções. Mas superou a melhor versão humana em cinco itens, reduzindo o número de instruções de 46 para 42.
Isso equivale a um aumento significativo de velocidade. O algoritmo C++ existente para ordenar uma lista de cinco itens levou cerca de 6,91 nanossegundos em um chip Intel Skylake típico. Já o algoritmo do AlphaDev levou 2,01 nanossegundos, cerca de 70% mais rápido.
A DeepMind compara a descoberta do AlphaDev a uma das jogadas estranhas, mas vencedoras, do AlphaGo em sua partida de Go contra o então campeão mundial Lee Sedol em 2016. “Todos os especialistas analisaram aquele movimento e disseram: ‘Esta não é a coisa certa a fazer. Esta é uma jogada ruim’”, diz Mankowitz. “Mas, na verdade, foi a jogada certa, e o AlphaGo acabou não apenas ganhando o jogo, mas também influenciando as estratégias que os jogadores profissionais de Go passaram a usar”.
Sanders está impressionado, mas não acha que os resultados devam ser superestimados. “Concordo que as técnicas de machine learning são cada vez mais revolucionárias na programação, e todos esperam que as IAs em breve sejam capazes de inventar algoritmos novos e melhores”, diz ele. “Mas ainda não chegamos lá”.
Por um lado, Sanders ressalta que o AlphaDev usa apenas um subconjunto das instruções disponíveis na linguagem assembly. Muitos algoritmos de ordenação existentes usam instruções que o AlphaDev não tentou utilizar, diz ele. Isso dificulta comparar o AlphaDev com as melhores opções concorrentes.
É verdade que o AlphaDev tem suas limitações. O algoritmo mais longo que ele produziu tinha 130 instruções para ordenar uma lista de até cinco itens. Em cada etapa, o AlphaDev escolheu entre 297 possíveis instruções de montagem (entre muitas outras). “Após exceder as 297 instruções e de lidar com jogos de programação de montagem com mais de 130 instruções, o processo de aprendizado tornou-se mais lento”, diz Mankowitz.
Isso porque mesmo com 297 instruções (ou jogadas), a quantidade de algoritmos possíveis que o AlphaDev poderia desenvolver é maior do que o número possível de combinações de movimentos e estratégias viáveis durante uma partida de xadrez (10120) e o número de átomos no universo (que se estima ser em torno de 10 80).
Para algoritmos mais longos, a equipe planeja adaptar o AlphaDev para trabalhar com instruções C++ em vez de assembly. Com um controle menos minucioso, o AlphaDev pode deixar passar alguns atalhos, mas a abordagem seria aplicável a uma gama mais ampla de algoritmos.
Sanders também gostaria de ver uma comparação mais abrangente com os melhores métodos desenvolvidos por humanos, especialmente para algoritmos mais longos. A DeepMind diz que isso faz parte de seu plano. Mankowitz quer combinar o AlphaDev com as melhores soluções desenvolvidas por humanos, fazendo com que a IA construa com base na intuição humana, em vez de começar do zero.
Afinal, pode ser que haja mais aceleradores a serem descobertos. “Para que um humano faça isso, é necessário um conhecimento especializado e uma quantidade enorme de horas (talvez dias, semanas) para examinar esses programas e identificar melhorias”, diz Mankowitz. “Como resultado, isso nunca foi tentado”.