Rede neural DeepCoder aprende a programar emprestando código de outros programas


A matriz condicional de imprecisões para uma rede neural e um conjunto de testes de 500 programas com um comprimento de 3 linhas. Cada célula contém a probabilidade média de um resultado falso positivo (em letras grandes) e o número de programas de teste dos quais esse valor é derivado (em letras menores, entre parênteses). A saturação da cor se correlaciona com a probabilidade de um falso positivo

Os programadores em breve terão um bom ajudante: uma rede neural inteligente que pode executar tarefas rotineiras. Além disso, com a ajuda de uma rede neural, as pessoas podem criar programas sem conhecer a sintaxe de um idioma específico e sem poderem programar. É necessário compor um algoritmo e definir tarefas - e a rede neural escreverá código para resolvê-los.

Como resultado, todo o trabalho se tornará muito mais produtivo: "As pessoas poderão criar sistemas que antes eram impossíveis de criar", disse um especialista independente Armando Solar-Lezama, do Instituto de Tecnologia de Massachusetts, em um comentário para a New Scientist .

Pesquisadores da Microsoft e da Universidade de Cambridge desenvolveram um sistema chamado DeepCoder , que agora resolve corretamente problemas simples de competições de programação escolar. O DeepCoder usa uma técnica chamada Síntese do Programa Indutivo, conhecida por muitos desenvolvedores. Ela pega linhas de código de outros programas - e cria seu próprio programa. É importante ter em mente que o DeepCoder, como outros sistemas de síntese de software, usa uma linguagem específica de domínio (DSL) especializada em um aplicativo específico. Pode ser chamado de "mini-linguagem" ou "linguagem de programação truncada". Ele contém apenas nove funções de primeira ordem:

CABEÇA, ÚLTIMO, TOMAR, GOTA, ACESSO, MÍNIMO, MÁXIMO, REVERSO, ORDENAR

e cinco funções de ordem superior:

MAPA, FILTRO, CONTAGEM, ZIPWITH, SCANL1

O escopo de uma linguagem específica de domínio é limitado em relação às linguagens de programação de uso geral.

A escolha das linhas para compilar o programa é realizada após a análise dos valores de entrada e saída de cada fragmento de código. No trabalho científico, você pode estudar nove exemplos de programas de 5 linhas escritos pela rede neural DeepCoder. Por exemplo, aqui está uma solução para o problema dos doces (à esquerda) com uma descrição de texto (à direita) e valores de entrada (no centro):



Ao procurar linhas de código adequadas, o DeepCoder ultrapassa o homem: ele é capaz de indexar e analisar muito mais código-fonte do que o homem é capaz. O sistema de aprendizado de máquina aprende a entender como usar esses padrões - e antecipadamente forma a base. Além disso, a rede neural conectará as linhas encontradas de uma maneira que nunca ocorre para conectá-las a uma pessoa viva. Por tentativa e erro, a rede neural está gradualmente aprendendo a atingir seu objetivo. Essa implementação da síntese de software no sistema DeepCoder é chamada de Aprendizagem Indutiva Program Synthesis (LIPS).


Representação esquemática de um codificador acoplado direto e decodificador DeepCoder

A ilustração abaixo mostra como a rede neural do DeepCoder prevê a probabilidade de cada função aparecer no código-fonte.



Todas essas vantagens permitem ao DeepCoder gravar programas muito mais rapidamente que seus antecessores. Ela escreve um programa de três linhas em uma fração de segundo, enquanto os sistemas anteriores precisavam várias vezes ou dezenas de vezes mais para tentar todas as opções possíveis. Por exemplo, a tabela mostra a velocidade de geração de programas a partir de três linhas de código com várias tarefas.



Programas de cinco linhas de código são gerados uma ordem de magnitude mais lenta. O gráfico à direita mostra a dependência da velocidade no comprimento do programa.



Conforme você aprende, o sistema entende quais combinações de código funcionam e quais não. Ela está melhorando a programação a cada nova tarefa.

A tecnologia pode ser potencialmente usada para refatorar e procurar bugs em programas. Ela encontrará as linhas erradas e as substituirá pelas linhas corretas de outros programas. Os autores acreditam que, com sua ajuda, é fácil criar programas de rotina no estilo do famoso IFTTT - para automatizar as interações básicas entre diferentes serviços da web. Mesmo um não programador pode dar instruções simples, como selecionar fotos do Facebook e classificá-las de acordo com critérios especificados. Tais programas simples podem ser criados em minutos sem conhecimento de programação.

Obviamente, essas ferramentas ainda não podem substituir um programador real. Eles são considerados apenas como uma ferramenta auxiliar. Os próprios desenvolvedores do DeepCoder serão muito úteis no futuro: aliviarão o fardo das operações de rotina e permitirão que você se concentre em tarefas mais complexas e importantes.

Atualmente, o DeepCoder é capaz de resolver problemas de programação, trabalhando com cerca de cinco linhas de código. Obviamente, nas linguagens de programação avançadas, cinco linhas de código permitem escrever um programa muito útil, mas ainda assim são coisas simples e básicas. Especialistas acreditam que é impossível gerar um programa complexo com uma grande quantidade de código usando a síntese de software. Por outro lado, com ajuda humana, isso é possível. Afinal, grandes programas consistem em um grande número de pequenos fragmentos.

Pelo menos nos próximos anos, a maioria dos programadores não enfrenta uma perda de emprego devido à automação da codificação. Mas os métodos de aprendizado de máquina estão melhorando muito rapidamente. É incrível o quanto já foi feito nessa área ultimamente.

Source: https://habr.com/ru/post/pt401859/


All Articles