Últimas notícias

Fique informado
Como programar uma IA (inteligência artificial)?

Como programar uma IA (inteligência artificial)?

11/10/2018

A inteligência artificial entra no projeto em diversas partes

As aplicações de inteligência artificial (IA) são diversas, e muitas são bem impressionantes. A tecnologia pode ser usada para auxiliar carros autônomos a enxergarem placas de trânsito, gerar sistemas capazes de criar imagens inéditas e realistas e uma infinidade de outras utilidades surpreendentes, como assistentes de voz e responder dúvidas sobre suas férias.

No entanto, um projeto de inteligência artificial também começa como praticamente todo projeto de programação: com uma ideia, objetivos e linhas de código. E antes que essas aplicações interessantes surjam, há um longo e profundo trabalho de estudo e de desenvolvimento.

Por outro lado, criar um sistema de inteligência artificial é um projeto bem distinto de outras tarefas de desenvolvimento. Para ser bem tocado, ele exige não apenas uma experiência prática com programação como também um conhecimento acadêmico sobre os fundamentos de IA e machine learning. Essa diferença pode causar turbulências quando um programador vai de uma área para a outra.

Como programar uma IA na prática?

Humberto Sandmann é pesquisador de IA da RockSpoon. A empresa está desenvolvendo uma ferramenta (que ainda não chegou ao mercado) que usa inteligência artificial para dar recomendações de restaurantes a pessoas que costumam comer fora.

A ferramenta funcionará tanto para que os restaurantes se cadastrem quanto para que as pessoas recebam recomendações. Essas recomendações serão feitas com base no gosto daquele usuário, como o que ele gosta de comer, quais são suas restrições alimentares e qual é o tipo de ambiente que ele curte.

A inteligência artificial entra no projeto em diversas partes. Uma delas é a de juntar todos esses dados, de clientes e de restaurantes, e cruzá-los de maneira a recomendar um estabelecimento de acordo com o que cada pessoa quer. É uma tarefa bem complexa, uma vez que envolve um volume imenso de dados de diferentes tipos.

Diante desse desafio, segundo Humberto, o primeiro passo é entender a melhor maneira de se atingir o resultado desejado, em termos de custo e tempo. “Tem gente que pensa que ‘inteligência artificial’ é uma ferramenta só e que ela resolve qualquer problema, mas tem muito mais do que isso”, diz. “A natureza da técnica tem que cruzar com a natureza do problema que você tem.”

Sebastian Thrun, presidente da Udacity e pioneiro da IA, fala sobre o tema

Em outras palavras, o programador de inteligência artificial precisa ter um bom conhecimento sobre dados e técnicas de modelagem e aprendizado, para saber qual usar em cada caso. “Você precisa saber se os dados são clusterizáveis ou artesanais, por exemplo, se você vai poder usar redes neurais neles ou uma árvore bayesiana”, comenta.

Nesse caso, o sistema usa uma técnica de clusterização (do inglês “cluster”): ele olha para todo o conjunto “desorganizado” de dados e tenta encontrar padrões. É diferente, por exemplo, de um sistema que precise separar fotos entre aquelas que contém gatos e aquelas que não contém.

No caso das fotos, já existem duas categorias bem definidas (fotos com gatos e fotos sem gatos) e o sistema só precisa decidir qual foto se encaixa em cada categoria. No caso que Humberto coloca, no entanto, o sistema precisa ele próprio criar as categorias. Isso representa um nível maior de complexidade, o que exige que a programação da inteligência artificial seja feita de maneira mais cuidadosa. Se não, ela pode acabar gerando resultados inadequados, ou levando tempo demais para gerar os resultados desejados.

De maneira geral, porém, Humberto considera que o fluxo de projetos de inteligência artificial consiste em “levantar hipóteses, modelar e testar”. Em outras palavras, o projeto consiste em imaginar a melhor maneira para solucionar o problema, modelar essa maneira em linguagem computacional e avaliar os resultados obtidos com aquele modelo – para então, possivelmente, começar de novo.

Ferramentas úteis para programação de IA

No dia a dia, Humberto usa algumas bibliotecas que já trazem algoritmos e recursos prontos, o que é útil para dar mais agilidade ao processo.

Uma delas é o OpenCV, uma biblioteca open source de funções de programação voltadas especificamente para visão computacional. De maneira resumida, ela facilita o processo de permitir que os sistemas “entendam” imagens. O OpenCV é usado em casos que necessitam desse tipo de capacidade de interpretação de imagens.

Humberto também cita o SciKit, que contém uma série de recursos de código aberto voltados para machine learning. Trata-se de uma biblioteca que também é usada por empresas como Spotify, Evernote, Change.org e OkCupid.

Finalmente, Humberto cita também o KERAS, uma biblioteca open source de redes neurais, criada especificamente para permitir a realização de experimentos rápidos com redes neurais profundas. Resumidamente, ele facilita o processo de implementar e testar redes mais complexas.

Todas essas ferramentas têm em comum o suporte a Python. Humberto considera que essa linguagem de programação é boa ao facilitar muito o processo de rodar experimentos e provas de conceito rapidamente.

Ele também considera outras linguagens importantes, como C++, que por ser de nível mais baixo (entenda o que isso significa) permite um grau maior de customização. Ele também cita outras linguagens com as quais já trabalhou, como MatLab e R, mas confere à Python uma posição mais central.

Um dos motivos para isso é a agilidade. Rodar experimentos rapidamente é algo importante que Python e suas bibliotecas possibilitam. “Durante o processo de programar IA como a gente trabalha hoje em dia, tem muito ‘hit and miss’ [erro e acerto]. Você resolve rodar as coisas sem ter um conhecimento total para ver no que vai dar”, diz.

4 boas práticas para programação de IA

1. Faça experimentos rápidos

Essa é uma das boas práticas que Humberto recomenda para programar inteligência artificial: realizar experimentos rápidos com pedaços menores de códigos e dados. “Em vez de testar volumes muito grandes, rode volumes pequenos para ver se o algoritmo está em dia. Fazer algumas coisas simples ajuda a testar o framework em si”, recomenda.

Esse tipo de atitude pode poupar semanas de trabalho. Afinal, se a ideia se mostrar incorreta, a equipe saberá rapidamente. É melhor do que testar com todos os dados de uma só vez, esperar uma semana enquanto os algoritmos rodam e só então descobrir os problemas.

2. Escolha bem a arquitetura

Com relação ao uso de GPUs para rodar os algoritmos (saiba mais sobre GPUs aqui), Humberto também cita uma dica importante para quem trabalha na área: a arquitetura é mais importante do que velocidade”.

Nesse caso, isso significa que vale mais a pena trabalhar com placas gráficas de arquitetura mais recente, mesmo que elas sejam mais lentas, para evitar retrabalho. Se não, a equipe pode acabar tendo que adaptar tudo para uma nova arquitetura no futuro.

3. Saiba quando simplificar

Ele também cita um caso para mostrar como a experiência e o olhar crítico podem ajudá-lo a definir qual é o melhor momento para cada ferramenta.

Em outro projeto no qual trabalhou, Humberto criou um sistema para drones que monitoravam as linhas de transmissão de eletricidade para detectar invasões na faixa de segurança. Os drones eram equipados com LIDARs, radares de luz que servem para ajudar as máquinas a “enxergarem”.

Ao longo do desenvolvimento, porém, Humberto se deu conta que seria mais fácil trabalhar com ferramentas que entendessem as imagens capturadas pelo LIDAR em duas dimensões em vez de três.

Parecia menos sofisticado e contraintuitivo, mas a decisão acabou agilizando e facilitando o processo de desenvolvimento. “Nem tudo que reluz é ouro. Olhe para o volume de dados e veja se é adequado para o seu algoritmo.”

4. Continue estudando

Finalmente, Humberto cita a boa prática mais importante de todas para trabalhar com inteligência artificial: o estudo contínuo. “Você tem que estudar. As ferramentas e os frameworks não vão resolver os problemas por você.”