E Agora? Inteligência Artificial Começou a Programar Sozinha

Eu vou mostrar várias coisas sensacionais neste vídeo aqui relacionadas à inteligência artificial programando ou, no mínimo, facilitando o trabalho de um programador ou programadora.

Alguns algoritmos, na verdade, foram considerados os mais perigosos da história e que nunca deveriam ficar disponíveis para o público, inclusive, porque eles começaram a fazer coisas que os autores não esperavam. E facilmente, eu tenho opiniões fortes sobre assuntos relacionados à tecnologia ou programação no geral.

Mas dessa vez, eu estou um pouco incomodado e eu acho que você vai ficar também. Bom, a história começou da seguinte forma… Um queridão aqui do canal e também membro da turma chamado Carlos Ricardo Ziegler, me indicou dar uma olhada num link delicinha.

Esse link era sobre um serviço chamado TabNine, que promete utilizar inteligência artificial para ajudar o programador a escrever códigos de uma forma mais rápida. É diferente do que eu vou mostrar no final do vídeo, mas olha que massinha…

O serviço utiliza a estratégia de ler repositórios open source e ele já leu mais de dois milhões de arquivos. Se a gente descer aqui nos exemplos iniciais, um deles é o seguinte: a pessoa digita a  documentação, por exemplo, uma função que concatena duas strings, onde tem a string A e a string B.

Quando a pessoa começa a digitar, que nesse caso digitou só o “st”, automaticamente o TabNine sugere toda essa linha de código aqui embaixo, implementando a assinatura da função. Legalzinho, mas talvez um outro caso mais misterioso seja esse aqui embaixo.

Sabe em formatação de string, onde você primeiro declara os place holders, por exemplo, vai entrar o valor de uma variável aqui e depois uma outra aqui? Show! Só pelo fato de a pessoa ter digitado a letra “F”, ele já sugere um método “format” escrito por inteiro.

Mas nota um detalhe importante: dado o texto que estava escrito, ele assumiu que o primeiro place holder deveria ser substituído pela segunda variável da função. E o  segundo place holder, deveria ser substituído pela primeira variável, sugerindo, por fim, um método “format” que faça sentido para a frase que estava escrita dentro daquela string.

inteligência-artificial-programacao

Como ele sabia completar a frase do jeito certo eu não sei. Ou tinha algo similar em outros repositórios, ou ele assimilou as palavras “connections” ou o time de Marketing brilhou na home, escolhendo esse exemplo em específico.

De qualquer forma, é como se fosse um IntelliSense que vai além da análise estática e entra no campo da inteligência. E falando em inteligência… Turma, é agora que o negócio começa a ficar desconfortável. Mas primeiro… O que é inteligência para você? O que é uma coisa inteligente?

Inteligência, por exemplo, é alguém me descrever uma série de requisitos e eu, como programador, conseguir devolver um código? Isso é uma tarefa muitas vezes complexa até para um ser humano, não é mesmo?

Então, olha que assustador… A Microsoft realizou, recentemente, a edição 2020 do seu evento, que é de programador para programador, chamado Microsoft Build. Lá foram apresentadas várias coisas legais, muitas delas utilizando Machine Learning e tudo o que tem de novidade nesse assunto.

Quem liderou essa apresentação foi o Kevin Scott, que é o CTO da Microsoft, e ele começa com uma frase do autor e futurista Arthur C. Clarke, que já dá um hype massa. A frase diz: “A única forma de encontrar os limites do possível é indo além dele para dentro do impossível”. Sensacional!

E uma das coisas fundamentais para você conseguir chegar nesse nível de impossível e trabalhar em larga escala com inteligência artificial é ter muito poder de
processamento, muito mesmo!

No caso da Microsoft, eles construíram recentemente um supercomputador especializado no assunto e que é formado por 285 mil CPUs, mais 10 mil GPUs, e tudo isso conectado por uma rede interna de altíssima velocidade.

Não só o poder de processamento que melhorou muito nos últimos anos, mas principalmente como a inteligência artificial aprende de fato as coisas. Um modelo comum é o Supervised Learning, em que um ser humano precisa rotular e dizer para o robô o que certas coisas significam e ele trabalha a partir dali.

inteligência-artificial-programacao

Isso funciona muito bem, mas o gargalo no aprendizado da máquina acaba sendo o
próprio ser humano, que precisa ficar classificando manualmente as coisas. Para explodir os limites disso, nos últimos anos surgiu uma nova tendência chamada Self-Supervised Learning, em que não é mais necessário definir rótulos ou classificar as informações.

O próprio modelo se vira sozinho! O resultado disso, por exemplo, é que o modelo consegue aprender uma nova língua, somente sendo apresentado a um volume grande de textos, e quanto mais textos apresentar, mais ele vai aprender. Inclusive, isso dá o poder de você entregar uma única frase para o modelo e ele te retorna um artigo inteiro sobre o assunto, escrito por ele mesmo, tá?

Com frases únicas! Daí você se pergunta: “Tá, mas isso é linguagem natural, é a forma como o ser humano se comunica. Mas esse treco consegue escrever código ou os detalhes de implementação de uma função?”…

Para eu dar essa resposta e você de fato entender para onde todo esse negócio está indo e tomar um susto junto comigo, primeiro eu tenho que te passar uma ordem de grandeza dos modelos existentes. O tamanho de um modelo define a sua habilidade, a sua capacidade em entender e notar as nuances do que está acontecendo em determinado contexto.

Esse tamanho é definido pela quantidade de parâmetros que ele tem. De uma forma grosseira, é a quantidade de conexões dessa rede neural. Até o ano passado, o maior modelo do mundo tinha um bilhão de parâmetros. E hoje, um modelo Turing NLG, criado pela Microsoft, tem 17 bilhões de parâmetros!

Uma das analogias usadas na apresentação, é como se a gente tivesse saído da capacidade de compreensão de uma criança para a capacidade de compreensão de um adolescente.

Na prática, isso consegue fazer coisas sensacionais, mas que, até certo ponto, não impressionam mais a gente, como por exemplo: fazer uma pergunta livre, que nesse caso foi “quando nós pousamos na lua?”, e aí o modelo nesse caso está entendendo semanticamente a pergunta e consultando no seu oceano de informações, que é toda a Wikipedia mais outras milhões de páginas na internet e milhares de livros para, no fim, responder a data de uma forma super natural.

Mas é a partir daí que o negócio começa a ficar mais interessante. Olha só… Outro caso de uso mostrado foi usar o texto de um artigo escrito pelo CEO da Microsoft, o Satya Nadella.

inteligência-artificial-programacao

É importante destacar que o modelo nunca viu esse artigo na vida. Contexto colado, você pode começar a fazer perguntas livres com outras palavras novas, que o modelo vai entender o que você estava querendo perguntar e extrair essas informações do texto.

Mas o negócio vai ainda mais além no quesito de entender o que estava escrito, sem necessariamente a informação estar explícita. Olha que curioso… Tem uma polêmica no mundo do Star Wars que é interessante. Na cena da cantina, quem atirou primeiro? Foi o Han Solo ou foi o Greedo?

Se você pegar o trecho de uma página no Wikipedia falando sobre isso e perguntar para o modelo quem atirou primeiro, ele vai responder que foi o Han Solo. Mas nota um detalhe muito importante: em nenhum momento no texto isso estava escrito, não pelo menos dessa forma.

O modelo teve que entender a semântica do artigo, entender a semântica da pergunta e sintetizar uma nova resposta. Mas ok, tudo muito massa com o Turing NLG da Microsoft, só que tem um peixe maior chegando nesse oceano e esse peixe se chama “GPT-3”.

Lembra que o tamanho de um modelo define a sua habilidade, a sua capacidade de entender e performar nessas tarefas. Então, a gente está prestes a dar um salto bizarro nesse tamanho e isso impacta diretamente a nossa profissão como programador. Dentro do evento, o CTO da Microsoft conversou com o Sam Altman, que hoje é o CEO de uma empresa chamada OpenAI, que inclusive foi cofundada pelo Elon Musk.

E a missão dessa empresa é entender todos os tipos de dados do mundo, e um dos tipos de dados é código. O modelo deles está tão grande que se você colocar em comparação aos outros, cria uma deformação no gráfico. Olha só… Ali no lado direito, está o GPT-3 com os seus 180 bilhões de parâmetros.

Olha que bizarro que fica colocar em comparação ao Turing NLG da Microsoft que a gente viu até agora, com seus 17 bilhões de parâmetros. E o histórico de crescimento desse modelo está insano! Em 2018, o GPT tinha 110 milhões de parâmetros ou 0,11 bilhão. Em 2019, o GPT-2 tinha 1,5 bilhões de parâmetros e foi considerado por muitos uma ameaça. E agora, o GPT-3 tem 180 bilhões de parâmetros!

Para entender o que já dá para fazer com isso, o Sam trouxe alguns exemplos de um código em Python. Ele estabelece como desafio escrever uma função que verifica se uma string é um palíndromo.

inteligência-artificial-programacao

Um palíndromo é uma palavra ou frase que você pode tanto ler da esquerda para direita quanto da direita para a esquerda e ela mantém a mesma leitura, por exemplo: ana, ou ovo, ou salas…

Então, ele vai lá e escreve o nome do método com a assinatura, e logo embaixo coloca um comentário em linguagem natural mesmo, falando que essa função verifica se uma string é um palíndromo.

Em seguida, ele pede para o modelo gerar o código que deveria fazer essa implementação e pimba! O código aparece embaixo. É um código simples que verifica se a string recebida é igual a essa mesma string, só que invertida. E de fato é tão simples que esse snippet de código deve existir dessa exata mesma forma, em centenas de repositórios e respostas no Stack Overflow.

Dado isso, ele coloca um desafio um pouco mais interessante: escrever uma função que ele sabe que não está nos dados utilizados para treinar o modelo e que também é um requisito de negócio interessante.

Então, agora, uma nova função deve retornar uma lista contendo os índices dos elementos que são palíndromos, mas que possuem, no mínimo, sete caracteres. E novamente, pimba! O modelo implementa exatamente o código, com um detalhe mega interessante: ele reaproveitou a função anterior “is_palindrome”. E novamente… Isso foi 100% sintetizado pelo modelo. É uma solução única e não existe essa informação no data set. Agora, a gente vai aumentar ainda mais o nível de dificuldade, mas uma coisa interessante aconteceu…

Um deslize, vamos dizer assim, e que me deixou bastante pensativo sobre o futuro disso tudo. Olha só… Imagina uma classe “Item”, onde para agrupar esses itens, você tem uma outra classe chamada “Ordem”.

Logo, uma Ordem que possui uma lista de Itens dentro dela. Agora, vamos implementar a assinatura de um método para calcular o preço total de uma ordem, mas com uma pegadinha: todos os itens que são palíndromos terão desconto de 20%.

Depois de digitar essa assinatura e sem fazer mais nada, ao rodar um modelo, ele mesmo começa adicionando um comentário, explicando em linguagem natural o que vai ser feito. Depois, ele implementa o código que acredita ser o certo, mas na verdade, houve um problema de comunicação aí.

inteligência-artificial-programacao

O Sam quer que o desconto seja aplicado somente nos itens que são palíndromos, e não em todos os itens, como está sendo feito agora. E nota que o método criado pelo Sam e o comentário do modelo podem estar ambíguos, porque uma das interpretações pode ser: calcula o preço total do pedido com o desconto do palíndromo, com o desconto nesse preço total.

E por conta disso, vem agora uma parte que eu, pessoalmente, achei muito massa! Sério, deu aquela: “Aaah!” na cabeça. Ele deleta o código e o comentário feito pelo modelo e começa linha a linha a descrever os requisitos de uma forma menos ambígua, exatamente como talvez você faria com um outro ser humano.

Então, o primeiro requisito é: calcule o preço total e o retorne. Show! O segundo requisito é: aplique um desconto nos itens em que os nomes são palíndromos. E aí sim, quando o modelo implementa o código, aparece uma condicional delicinha ali no meio, respeitando a especificação acima.

Mas mesmo assim, tem uma outra ambiguidade. O desconto deveria ser de 20%, mas a variável “palindrome_discount” tem o valor de 0.2, e isso, matematicamente, numa multiplicação significa manter apenas 20% do valor total. Então, está ao contrário, isso vai dar um desconto de 80%.

Daí, ele vai lá e subtrai o desconto por 1, para fazer a multiplicação por 0.8 e, com isso, manter 80% do valor. Ou seja, um desconto de 20%. Na boa… Carimbo delicinha total, porque o que ele fez aqui foi pair programming com o modelo! Mas isso me gerou uma preocupação e eu já vou falar o que é. Eu só quero antes mostrar a última parte dessa demonstração.

Nessa parte, ele coloca como desafio fazer uma função simples para imprimir o recibo, e o requisito é: imprima o preço total, e depois, o preço de cada item. Rodando modelo, ele implementa o código como esperado e reaproveita a função que calcula o preço total, que foi escrita em conjunto pelo Sam e pelo modelo.

E no final, ele dá um spoiler, sem demonstrar nada de concreto, que o modelo também está se demonstrando excelente em escrever Testes Unitários de forma automática. Turma, sinceramente, isso para mim é bastante… Eu não sei o que sentir ainda, mas me gerou algumas preocupações ou, não sei…

Algumas dúvidas, na verdade. Então, agora eu vou soltar um “haduken” de medos ou perguntas que eu não sei responder. Mas, com certeza, você ou alguém que está vendo este vídeo vai ter resposta ou, pelo menos, vai querer dar sua opinião. Bom… No mínimo, elas vão deixar você passar o resto do dia pensando no que está acontecendo na nossa área. Então, vamos lá…

inteligência-artificial-programacao

Refatorar ou consertar bugs de códigos escritos por seres humanos muitas vezes é difícil. Como que vai ficar para refatorar ou consertar códigos hiper complexos criados por um modelo? E será que modelos vão conseguir chegar ao ponto de utilizar serviços externos para não precisar reimplementar sempre tudo do zero?

Será que os requisitos que o ser humano vai precisar escrever como o Sam fez no caso dos comentários ali, para não ser ambíguo, você vai ter que ser tão específico que, no final das contas, você vai precisar ter algo tão fragmentado e grande quanto um código de verdade?

Se sim, qual é a vantagem? Ou talvez isso só aconteça no início porque, possivelmente, depois dá para ir abraçando as coisas complexas em sentenças menores e já conhecidas? E talvez outra vantagem ou curiosidade é que, no futuro, ao invés de a gente ficar na dúvida sobre qual linguagem de programação aprender, a dúvida vai ser qual língua tem suporte para esse tipo de negócio.

Talvez aprender inglês vai ser muito, muito, mais importante do que já é hoje… Ou será que uma outra língua vai ter algum benefício sobre uma outra, por ser menos ambígua?

Por exemplo, notaram que o alemão para esse tipo de tarefa é muito mais preciso que o inglês. E daí, todo mundo migra para aprender alemão. Ou será que depois de tudo isso, a nossa função vai ser só escrever testes unitários que o modelo programa o resto sozinho?

E daí, ao invés de ser Test Driven Development, vai ser Test Only Development. Ou, na verdade, só vai sobrar pessoas de negócio ou produto, tipo um Product Owner, que vai bastar só escrever as especificações que sai um produto lá do outro lado… Ou só vai sobrar programadores que têm interesse real no produto, porque somente eles vão conseguir escrever especificações exatas e que vão conseguir antecipar todas as exceções? Tipo um código?

Ou, na verdade, só vão sobrar os clientes, porque o modelo vai cortar todo mundo que está no meio e vai direto na fonte, que é o cliente… E pela talvez fumaça de feedbacks ou usabilidade real com testes A/B, ele vai lapidando o produto?

E será que um dia, a gente vai descobrir que a Inteligência Artificial não tem nada de artificial? E que lá no fundo é o mesmo mecanismo real de inteligência e que nos faz sentir como um ser humano, na verdade é outra coisa? E por que o ser humano não precisa ler dois milhões arquivos para aprender a programar?

inteligência-artificial-programacao

E o que vai acontecer quando o modelo chegar num nível de inteligência de um adulto cientista que consegue programar modelos? Ele vai entrar num loop exponencial de evolução?

Bom, o que eu sei é que a gente vai precisar continuar estudando, a gente vai precisar continuar relevante no assunto… E uma das minhas missões aqui neste canal, e com vocês, é continuar trazendo conhecimentos e informações sobre onde tudo isso está indo. Em paralelo, eu quero cada vez mais lapidar a minha didática para conseguir repassar para vocês da melhor forma possível tudo o que eu aprender daqui para frente.

Poderá ver o vídeo no youtube Aqui

Picture of Edson Marcelo Caramelo

Edson Marcelo Caramelo

Administrador de Empresas formado pela Universidade Católica Dom Bosco, especialista em blogs, escritor e produtor de infoprodutos.

Posts Relacionados

Compartilhe:

Mais Postagens

Inteligência Artificial: Como Criar Estratégias de Sucesso
Marketing

Inteligência Artificial: Como Criar Estratégias de Sucesso

Introdução A inteligência artificial (IA) está mudando a forma como empresas desenvolvem e implementam suas estratégias. A capacidade de analisar grandes volumes de dados e automatizar processos permite que as organizações criem estratégias mais eficazes e personalizadas. Neste artigo, vamos explorar como a IA pode ser utilizada para criar estratégias de sucesso, destacando ferramentas essenciais,

Leia Mais »
Comparando Produtos e Serviços de IA em Finanças
IA e Mercado Financeiro

Comparando Produtos e Serviços de IA em Finanças

Introdução A Inteligência Artificial (IA) está transformando a indústria financeira, proporcionando soluções avançadas para análise, detecção de fraudes e suporte ao cliente. Este post explora vários produtos e serviços de IA, oferecendo uma comparação abrangente para ajudá-lo a tomar decisões informadas. Entendendo a IA em Finanças O que é IA em Finanças? IA em finanças

Leia Mais »
Inteligência Artificial Dominando os Robôs da Bolsa de Valores
IA e Mercado Financeiro

Inteligência Artificial Dominando Robôs da Bolsa de Valores

A Inteligência Artificial está dominando os robôs da bolsa de valores já a algum tempo. A intersecção entre a tecnologia e o financeiro sempre gerou inovações significativas, mas poucas são tão impactantes quanto a ascensão da inteligência artificial (IA) na bolsa de valores. Atualmente, os robôs de IA não apenas participam, mas dominam muitas das

Leia Mais »
Expansão dos GPUs da Nvidia: Perspectiva com os Novos Chips
IA e Mercado Financeiro

Expansão dos GPUs da Nvidia: Perspectiva com os Novos Chips

A Nvidia, conhecida mundialmente por suas unidades de processamento gráfico (GPUs), está expandindo seu portfólio de produtos para além dos GPUs tradicionais.  Recentemente, um banco realizou uma análise detalhada sobre os novos chips da Nvidia e seu impacto potencial em diversas indústrias. Este artigo explora essa análise e discute como a Nvidia está se posicionando para liderar em novos mercados. Introdução A Nvidia tem sido um nome dominante no mercado de GPUs, fornecendo hardware essencial para jogos, computação gráfica e, mais recentemente, inteligência artificial (IA) e aprendizado de máquina.  No entanto, a empresa está agora diversificando suas ofertas com novos chips que prometem revolucionar outras áreas da tecnologia. A Nova Geração de Chips da Nvidia Os novos chips da Nvidia são projetados para atender a uma ampla gama de aplicações além dos gráficos.  Esses chips incluem unidades de processamento de dados (DPUs) e unidades de processamento de inteligência artificial (APUs), que são otimizadas para tarefas de IA e aprendizado de máquina.  A introdução desses chips representa um passo significativo na estratégia da Nvidia para se tornar um fornecedor líder de soluções de computação de alto desempenho. Impacto na Indústria de Tecnologia A análise do banco destaca vários impactos potenciais dos novos chips da Nvidia: Parcerias Estratégicas Para maximizar o impacto de seus novos chips, a Nvidia está formando parcerias estratégicas com outras empresas de tecnologia.  Essas parcerias incluem colaborações com provedores de serviços em nuvem, fabricantes de hardware e empresas de software de IA.  Ao trabalhar em conjunto com esses parceiros, a Nvidia pode integrar seus chips em uma ampla gama de produtos e serviços, ampliando ainda mais seu alcance no mercado. Desafios e Oportunidades Embora a expansão da Nvidia além dos GPUs ofereça muitas oportunidades, também apresenta desafios. A empresa precisará competir com outros gigantes da tecnologia que já estão estabelecidos nesses mercados.  Além disso, a Nvidia terá que continuar inovando para manter sua vantagem competitiva. No entanto, a análise do banco sugere que a Nvidia está bem posicionada para enfrentar esses desafios. A empresa tem um histórico comprovado de inovação e uma forte base de clientes leais.  Além disso, a demanda crescente por soluções de IA e computação de alto desempenho oferece um mercado em expansão para os novos chips da Nvidia. Conclusão A expansão da Nvidia além dos GPUs representa uma evolução significativa na estratégia da empresa.  Com seus novos chips, a Nvidia está se posicionando para liderar em áreas como IA, computação em nuvem e automação.  A análise do banco destaca o potencial desses chips para transformar diversas indústrias e impulsionar a próxima geração de tecnologia.

Leia Mais »
Como as IA's Podem ser Usadas no Mercado de Trabalho
Inteligência Artificial

Como as IA’s Podem ser Usadas no Mercado de Trabalho

A presença crescente de Inteligências Artificiais (IAs) está revolucionando o mercado de trabalho, impactando tanto as funções existentes quanto a criação de novas oportunidades profissionais. Neste artigo, exploraremos como as IAs estão sendo usadas no mercado de trabalho, os benefícios que trazem e os desafios que apresentam. Transformando Processos de Recrutamento e Seleção Triagem de

Leia Mais »

Envie-nos uma Mensagem

Pular para o conteúdo