O que o AlphaCode da DeepMind é? e o que não é?

Este artigo foi escrito pelo site bdtechtalks e faz parte de suas análises de artigos de pesquisa de IA, uma série de postagens que exploram as últimas descobertas em inteligência artificial.

A DeepMind é o mais recente laboratório de pesquisa de IA a apresentar um modelo de aprendizado profundo que pode gerar código-fonte de software com resultados notáveis. Chamado de AlphaCode, o modelo é baseado em Transformers, a mesma arquitetura que a OpenAI utiliza em seus modelos de geração de código.

A programação é uma das aplicações promissoras do aprendizado profundo e grandes modelos de linguagem. A crescente demanda por talentos de programação estimulou uma corrida para criar ferramentas que possam tornar os desenvolvedores mais produtivos e fornecer ferramentas para não desenvolvedores criarem software.

E a esse respeito, o AlphaCode certamente impressiona. Ele conseguiu resolver desafios de programação complicados que normalmente exigem horas de planejamento, codificação e testes. Pode um dia se tornar uma boa ferramenta para transformar descrições de problemas em código de trabalho.

Mas certamente não é o equivalente a um programador humano de qualquer nível. É uma abordagem totalmente diferente para a criação de software, que não é completa sem o pensamento e a intuição humanos.

Concursos de codificação

Example of coding challenge description (credit:DeepMind)

Exemplo de descrição do desafio de codificação (crédito: DeepMind)

AlphaCode não é a única IA desse tipo, mas cumpre uma tarefa muito complicada. Outros sistemas semelhantes se concentram na geração de pequenos trechos de código, como uma função ou um bloco de código que executa uma pequena tarefa (por exemplo, configurar um servidor web, extrair informações de um sistema de API). Embora sejam feitos impressionantes, tais tarefas tornam-se triviais quando o modelo de linguagem é exposto a um trecho de código-fonte grande o suficiente.

AlphaCode, por outro lado, visa resolver problemas de programação competitivos. Os participantes dos desafios de codificação devem ler a descrição do desafio, entender o problema, traduzi-lo em uma solução algorítmica, implementá-lo em uma linguagem de uso geral e avaliá-lo em relação a um conjunto limitado de casos de teste. Por fim, seus resultados são avaliados com base no desempenho em testes ocultos que não estavam disponíveis durante a implementação. Um desafio de codificação pode ter outras condições, como restrições de tempo e memória.

Basicamente, um modelo de aprendizado de máquina que participa de desafios de codificação deve gerar um programa inteiro que resolva um problema diferente de tudo o que já viu antes. É muito mais difícil do que sintetizar um trecho de código-fonte com base em exemplos vistos anteriormente.

Example of coding challenge solution (Credit: DeepMind)

Example of coding challenge solution (Credit: DeepMind)

O poder dos transformadores e grandes modelos de linguagem

AlphaCode é mais um exemplo de como grandes modelos de linguagem avançaram na resolução de problemas complicados. Esse tipo de sistema de aprendizado profundo é geralmente conhecido como modelo de sequência a sequência (seq2seq). Os algoritmos Seq2seq recebem uma sequência de valores (letras, pixels, números, etc.) como entrada e produzem outra sequência de valores. Essa é a abordagem usada em muitas tarefas de linguagem natural, como tradução automática, geração de texto e reconhecimento de fala.

De acordo com o artigo da DeepMind, o AlphaCode usa uma arquitetura Transformer codificador-decodificador. Os transformadores se tornaram especialmente populares nos últimos anos porque podem lidar com grandes sequências de dados com muito menos memória e requisitos de computação do que seus predecessores, redes neurais recorrentes ( RNN ) e redes de memória de longo prazo (LSTM).

Estrutura da rede do transformador

Estrutura da rede do transformador

A parte codificadora da AlphaCode cria uma representação numérica da descrição em linguagem natural do problema. A parte do decodificador pega o vetor de incorporação produzido pelo codificador e tenta gerar o código fonte da solução.

Os modelos de transformadores provaram ser bons em tais tarefas, especialmente quando são fornecidos com dados de treinamento e poder de computação suficientes. Mas mais do que o poder absoluto de lançar dados brutos em redes neurais super grandes, o verdadeiro brilho da AlphaCode, na minha opinião, tem mais a ver com a engenhosidade dos cientistas da DeepMind em projetar o processo de treinamento e o algoritmo para gerar e filtrar seus resultados.

Aprendizado não supervisionado e supervisionado

Para criar o AlphaCode, os cientistas da DeepMind usaram uma combinação de pré-treinamento não supervisionado e ajuste fino supervisionado. Frequentemente chamado de aprendizado autossupervisionado, essa é uma abordagem que se tornou popular para aplicativos em que não há dados rotulados suficientes ou a anotação de dados é cara e demorada.

Na fase de pré-treinamento, o AlphaCode passou por aprendizado não supervisionado em 715 gigabytes de dados extraídos do GitHub. O modelo é treinado tentando prever as partes ausentes de uma linguagem ou trecho de código. A vantagem desse método é que ele não requer nenhum tipo de anotação e, ao ser exposto a mais e mais amostras, o modelo de ML gradualmente se torna melhor na criação de representações numéricas para a estrutura do texto e do código-fonte.

O algoritmo para treinar e aplicar AlphaCode (crédito: DeepMind)

O algoritmo para treinar e aplicar AlphaCode (crédito: DeepMind)

O modelo pré-treinado é então ajustado no CodeContests , um conjunto de dados anotado criado pela equipe da DeepMind. O conjunto de dados contém declarações de problemas, envios corretos e incorretos e casos de teste coletados de várias fontes, incluindo Codeforces, Description2Code e CodeNet da IBM . O modelo é treinado para transformar a descrição textual do desafio no código-fonte resultante. Seus resultados são avaliados com casos de teste e comparados com as submissões corretas.

Ao criar o conjunto de dados, os pesquisadores tomaram cuidado extra para evitar sobreposições históricas entre os conjuntos de treinamento, validação e teste. Isso garantiu que o modelo de ML não gerasse resultados memorizados ao enfrentar desafios de codificação.

Geração e filtragem de código

Uma vez que o AlphaCode foi treinado, ele foi testado contra problemas que não tinha visto antes. Quando o AlphaCode processa um novo problema, ele gera muitas soluções. Em seguida, ele usa um algoritmo de filtragem para selecionar os 10 melhores candidatos e os envia para a competição. Se pelo menos um deles estiver correto, o problema é considerado resolvido.

De acordo com o artigo da DeepMind, o AlphaCode pode gerar milhões de amostras por problema, embora geralmente gere milhares de soluções. As amostras são então filtradas para incluir apenas aquelas que passam nos testes incluídos na declaração do problema. Isso remove aproximadamente 99% das amostras geradas, de acordo com o artigo. Mas isso ainda deixa milhares de amostras válidas.

Para otimizar o processo de seleção de amostras, um algoritmo de agrupamento é usado para dividir as soluções em grupos. Segundo os pesquisadores, o processo de agrupamento tende a agrupar as soluções de trabalho. Isso torna muito mais fácil encontrar um pequeno conjunto de candidatos que provavelmente passarão nos testes ocultos da competição.

De acordo com a DeepMind, quando testado em competições de programação reais na popular plataforma Codeforces, o AlphaCode ficou entre os 54% melhores participantes em média, o que é muito impressionante, dada a dificuldade dos desafios de codificação.

Visualização do processo de análise de problemas e geração de código do AlphaCode (Fonte: DeepMind )

Visualização do processo de análise de problemas e geração de código do AlphaCode (Fonte: DeepMind )

IA vs humanos

O blog da DeepMind afirma com razão que o AlphaCode é o primeiro sistema de geração de código de IA que “alcançou um nível competitivo de desempenho em competições de programação”.

No entanto, algumas publicações confundiram essa afirmação com a codificação de IA sendo “tão boa quanto os programadores humanos”. Essa é a falácia de comparar a IA estreita com as capacidades gerais de resolução de problemas dos humanos.

Por exemplo, em geral, você pode esperar que uma pessoa que se destaca no xadrez e no Go seja inteligente de muitas outras maneiras. Na verdade, você deve adquirir muitas outras habilidades cognitivas antes de aprender e dominar o xadrez. No entanto, as últimas décadas provaram que um sistema de IA pode abrir caminho para problemas muito difíceis sem adquirir nenhuma dessas outras habilidades.

Dois exemplos principais são DeepBlue e AlphaGo, os sistemas de IA que derrotaram os campeões mundiais de xadrez e Go. Embora ambos os sistemas tenham sido grandes conquistas da ciência da computação e da inteligência artificial, eles se destacaram apenas em uma tarefa. Eles não podiam competir com seus oponentes humanos em qualquer outra tarefa que exigisse planejamento cuidadoso e estratégia, habilidades que esses humanos adquiriram antes de se tornarem mestres de xadrez e Go.

A mesma coisa pode ser dita sobre a programação competitiva. Um programador humano que atinge um nível competitivo em desafios de codificação passou anos estudando. Eles podem pensar abstratamente sobre problemas, resolver desafios muito mais simples, escrever programas simples e manifestar muitas outras habilidades que são tidas como certas e não são avaliadas na competição de programação.

Em poucas palavras, essas competições foram projetadas para humanos. Você pode ter certeza de que, em geral, uma pessoa com alto nível de programação competitiva é um bom programador. É por isso que muitas empresas usam esses desafios para tomar decisões de contratação.

O que o AlphaCode da DeepMind é? e o que não é? 1

AlphaCode, por outro lado, é um atalho para programação competitiva – embora brilhante. Ele cria um novo código. Ele não copia e cola de seus dados de treinamento. Mas não é o equivalente a um programador médio.

Os programadores humanos usam sua intuição para direcionar seus recursos de computação limitados na direção da solução certa. Eles usam depuração, análise e revisão para refinar seu código. Por outro lado, o AlphaCode gera milhares de amostras – às vezes até 100.000 – e as filtra para encontrar as que funcionam.

Como observa o professor de ciência da computação Ernest Davis : “Há um componente substancial de macacos digitando Hamlet acontecendo aqui. A AlphaCode conseguiu treinar os macacos em um grau notável, mas ainda assim eles precisam de muitos deles. Em seguida, produz 10 candidatos e considera um sucesso se um deles estiver correto.”

Esta é uma referência ao teorema do macaco infinito, que afirma que “um macaco batendo teclas aleatoriamente em um teclado de máquina de escrever por uma quantidade infinita de tempo quase provavelmente digitará qualquer texto”, incluindo Hamlet de Shakespeare.

Este não é um ataque contra o AlphaCode. De fato, o AlphaCode prova que, com um design engenhoso, poder computacional suficiente e grandes quantidades de dados, você pode criar um sistema de IA que pode pesquisar um vasto espaço de solução que seria impossível explorar por meio de computação de força bruta (isso também é o que DeepMind fez com AlphaGo).

No entanto, também devemos reconhecer os limites dessa abordagem. Primeiro, como observa Davis, o problema se torna extremamente mais difícil à medida que a solução se torna mais longa. “O AlphaCode requer 1 milhão de amostras para obter 34% de acertos em programas de 20 linhas; para produzir um programa de 200 linhas – a duração de uma tarefa padrão em uma aula de ciência da computação do segundo ano – pode exigir 10^60 (1e+60) amostras”, escreve ele.

Em segundo lugar, o AlphaCode requer explicitamente declarações de problemas e casos de teste bem formulados para avaliar e filtrar as milhares de amostras que ele gera. “Agora, não há dúvida de que ter entradas e saídas fornecidas é extremamente útil para os competidores humanos em competições de programação”, escreve Davis. “No entanto, se eles não fossem fornecidos, os programadores humanos poderiam, na maioria dos casos, ter sucesso, com um pouco mais de trabalho. Por outro lado, o AlphaCode ficaria completamente perdido sem os exemplos específicos fornecidos; a taxa de sucesso cairia por um fator de cerca de 100.”

Portanto, em vez de colocar o AlphaCode contra programadores humanos, devemos estar mais interessados ​​no que o AlphaCode e outros sistemas de IA semelhantes podem fazer quando em parceria com programadores humanos. Essas ferramentas podem ter um tremendo impacto na produtividade dos programadores humanos. Eles podem até trazer mudanças na cultura da programação, levando os humanos para a formulação de problemas ( uma disciplina que ainda é o domínio da inteligência humana ) e fazendo com que os sistemas de IA gerem o código.

Mas os programadores humanos ainda estarão no controle. Eles precisam aprender a aproveitar o poder e os limites do código gerado pela IA. Pelo menos é o que essas empresas como a AlphaCode estão falando, mas se olharmos ceticamente para o problema poderemos ter outros pontos de vistas dos quais não abordarei aqui.

O AlphaCode deve ser reconhecido pelo que é: um gerador de código que pode propor boas soluções candidatas para declarações de problemas bem formuladas. Também deve ser reconhecido pelo que não é: o equivalente digital de um programador humano.

Deixe seu comentário