BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos Bate-papo com o autor do livro Hands-On Genetic Algorithms with Python

Bate-papo com o autor do livro Hands-On Genetic Algorithms with Python

Pontos Principais

  • Algoritmos genéticos são uma família de algoritmos de busca, otimização e aprendizado inspirados pelos princípios da evolução natural;

  • Os algoritmos genéticos podem ser utilizados para problemas de busca e otimização, como planejamento, agendamento, jogos e analytics;

  • Os algoritmos genéticos podem ser usados para melhorar modelos de machine learning e deep learning de diversas formas, como na seleção de features, ajuste fino de hiperparâmetros e otimização de arquitetura;

  • Os algoritmos genéticos podem ser utilizados em aprendizado por reforço, para otimizar a recompensa acumulada desejada;

  • A Programação Genética é um caso especial de algoritmo genético, que pode gerar programas de computador com a funcionalidade desejada;

  • Há vários outros algoritmos bio-inspirados que podem solucionar problemas usando modelos e comportamentos biológicos.

Hands-On Genetic Algorithms with Python, de Eyal Wirsansky, é um novo livro que explora o mundo dos algoritmos genéticos para resolver problemas de busca, otimização e tarefas relacionadas à Inteligência Artificial (do inglês Artificial Intelligence, AI), além de melhorar modelos de machine learning. O InfoQ entrevistou Eyal Wirsansky sobre como funcionam os algoritmos genéticos e para o que eles podem ser utilizados.

Além da entrevista, o InfoQ obteve um capítulo de amostra (em inglês) ou, se preferir, pode obtê-lo diretamente do autor ao assinar a mailing list de treinamento em AI.

InfoQ: Como funcionam os algoritmos genéticos?

Eyal Wirsansky: Algoritmos genéticos são uma família de algoritmos de busca inspirados nos princípios da evolução natural. Eles imitam o processo natural de seleção e reprodução, começando com um conjunto de soluções aleatórias, avaliando cada uma delas, e então selecionando as melhores para criar a próxima geração de soluções. Ao longo das gerações, as soluções obtidas se tornam melhores em resolver o problema. Ao mesmo tempo, a analogia com a evolução natural permite aos algoritmos genéticos superarem alguns obstáculos encontrados por algoritmos tradicionais de busca e otimização, especialmente para problemas com um grande número de parâmetros e representações matemáticas complexas.

InfoQ: Que tipo de problemas os algoritmos genéticos podem solucionar?

Wirsansky: Os algoritmos genéticos podem resolver quase todo tipo de problema, mas eles se destacam particularmente onde algoritmos tradicionais não podem ser utilizados, ou não conseguem produzir resultados úteis dentro de um tempo satisfatório. Por exemplo, problemas com representações matemáticas muito complexas ou inexistentes, problemas cujo número de variáveis envolvidas é muito grande, e problemas com dados de entrada ruidosos ou inconsistentes. Além disso, algoritmos genéticos são melhores equipados para lidar com problemas 'enganosos', nos quais os algoritmos tradicionais podem ficar 'presos' em soluções subótimas.

Os algoritmos genéticos podem lidar com casos em que não há como avaliar uma solução individual por si só, desde que haja um modo de comparar duas soluções e determinar qual delas é a melhor. Um exemplo pode ser um agente baseado em machine learning, que dirige um carro em uma corrida simulada. Um algoritmo genético pode otimizar e ajustar o agente por meio de diferentes versões competindo umas contra as outras, para determinar qual é a melhor versão.

InfoQ: Quais são os melhores casos de uso para os algoritmos genéticos?

Wirsansky: O caso de uso mais comum é quando precisamos compor uma solução a partir de uma combinação de diferentes partes disponíveis; queremos selecionar a melhor combinação, mas o número de possíveis combinações é muito grande para testar todas essas soluções. Geralmente, os algoritmos genéticos podem encontrar uma boa solução em tempo razoável. Por exemplo, agendar tarefas pessoais, planejar rotas de entrega de mercadorias, projetar estruturas de pontes, e também construir o melhor modelo de machine learning a partir de vários blocos disponíveis, ou encontrar a melhor arquitetura para um modelo de deep learning.

Outro caso de uso interessante é quando a avaliação é baseada na opinião e nas respostas do público. Por exemplo, podemos usar a abordagem do algoritmo genético para determinar os parâmetros de design de um web site - como a paleta de cor, o tamanho da fonte, e a localização dos componentes na página - que vão atingir a melhor resposta dos clientes, como conversão ou retenção. Essa ideia também pode ser aplicada para 'arte genética' - pinturas ou música criadas artificialmente para provocar sensações agradáveis ao olhar (ou ouvido) humano.

Os algoritmos genéticos também podem ser utilizados para otimização 'ongoing' - casos nos quais a melhor solução muda ao longo do tempo. O algoritmo pode rodar continuamente dentro do ambiente em mudança, e responder dinamicamente a essas mudanças, atualizando a melhor solução baseada na geração atual.

InfoQ: Como os algoritmos genéticos selecionam o melhor subconjunto de features para aprendizado supervisionado?

Wirsansky: Em muitos casos, reduzir o número de features - que são usados como entrada nos modelos de aprendizado supervisionado - pode aumentar a acurácia do modelo, pois alguns dos features podem ser irrelevantes ou redundantes. Isso também resulta em um modelo mais simples e de melhor generalização. Mas precisamos descobrir quais features que desejamos manter. Como isso se reduz a encontrar a melhor combinação de features entre um número potencialmente imenso de combinações possíveis, os algoritmos genéticos proveem uma abordagem muito prática. Cada solução potencial é representada por uma lista de booleanos, uma para cada atributo.

O valor booleano ('0' ou '1') representa a ausência ou presença do atributo correspondente. Essas listas de valores booleanos são usadas como material genético, que pode ser trocado entre duas soluções quando elas 'cruzam', ou ainda sofrer mutação quando os valores são alterados aleatoriamente. Usando as operações de 'cruzamento' e 'mutação', criamos novas gerações a partir das precedentes, ao passo que damos vantagem às soluções que geraram modelos com melhor desempenho. Depois de um tempo, temos algumas boas soluções, cada uma representando um subconjunto de features. Isso é demonstrado no capítulo 7 do livro (o capítulo da amostra) com o dataset 'Zoo' do UCI usando código em python, no qual o melhor desempenho foi obtido ao selecionar seis features em particular, dentre os dezesseis originais.

InfoQ: Que benefícios podemos obter ao utilizar algoritmos genéticos com machine learning para ajuste fino de hiperparâmetros?

Wirsansky: Todo modelo de machine learning utiliza um conjunto de hiperparâmetros - valores que são estabelecidos antes do treinamento, e que afetam o modo como o aprendizado é feito. O efeito combinado dos hiperparâmetros no desempenho do modelo pode ser significativo. Infelizmente, achar a melhor combinação de valores dos hiperparâmetros - também conhecido como ajuste fino de hiperparâmetros - pode ser tão difícil quanto achar uma agulha no palheiro.

Duas abordagens comuns são a grid search e a random search, cada uma com suas desvantagens. Os algoritmos genéticos podem ser usados de duas formas diferentes, para aperfeiçoar esses métodos. O primeiro modo otimiza a grid search, que em vez tentar cada uma das combinações no grid, busca somente um subconjunto de combinações, mas ainda obtém uma boa combinação. O outro modo conduz uma busca completa no espaço dos hiperparâmetros, já que os algoritmos genéticos são capazes de lidar com um grande número de parâmetros, bem como diferentes tipos de parâmetros - contínuos, discretos e categóricos. Essas duas abordagens são demonstradas no capítulo 8 do livro, com o dataset 'Wine' do UCI, usando código em python.

InfoQ: Como algoritmos genéticos podem ser usados em Aprendizado por Reforço?

Wirsansky: Aprendizado por Reforço (do inglês Reinforcement Learning, RL) é um ramo bastante excitante e promissor de machine learning, com potencial para lidar com tarefas complexas do dia-a-dia. Diferente do aprendizado supervisionado, o RL não apresenta um feedback imediato de 'certo/errado', mas provê um ambiente na qual uma recompensa acumulada de longa duração é desejável. Esse tipo de configuração pode ser vista como um problema de otimização, outra área onde algoritmos genéticos se sobressaem.

Como resultado, os algoritmos genéticos podem ser usados para aprendizado por reforço de diversas maneiras. Por exemplo, determinar os pesos e vieses de uma rede neural artificial que interage com o ambiente mapeando valores de entrada em valores de saída. O capítulo 10 do livro inclui dois exemplos de aplicação dos algoritmos genéticos em tarefas de RL, utilizando os ambientes 'mountain-car' e 'cart-pole' do toolkit OpenAI Gym.

InfoQ: O que é computação bio-inspirada?

Wirsansky: Os algoritmos genéticos são apenas um ramo de uma grande família de algoritmos chamada de Computação Evolutiva, todos inspirados pela evolução Darwiniana. Um membro particularmente interessante dessa família é a Programação Genética, que evolui programas para resolver um problema específico. Mais amplamente, como as técnicas de computação evolucionária são baseadas em vários sistemas e comportamentos biológicos, elas são consideradas parte da família de algoritmos conhecida como Computação Bio-inspirada.

Entre os membros mais fascinantes dessa família estão a Otimização por Colônia de Formigas - imitando o modo como certas espécies de formigas localizam a comida e marcam o caminho, preferindo localizações mais próximas e mais ricas de comida; os Sistemas Imunes Artificiais, capazes de identificar e aprender sobre novas ameaças, além de aplicar o conhecimento adquirido e responder mais rapidamente da próxima vez que uma ameaça similar for detectada; e a Otimização por Enxame de Partículas, baseada no comportamento de revoada de pássaros ou de cardumes de peixes, onde os indivíduos dentro do grupo cooperam em um objetivo comum, sem uma supervisão central.

Outro campo amplo e relacionado à computação bio-inspirada é o da Vida Artificial, envolvendo sistemas e processos que imitam a vida natural de diferentes maneiras, como simulações computacionais e sistemas robóticos. O capítulo 12 do livro inclui dois exemplos relevantes escritos em python, um deles resolvendo um problema usando programação genética, e o outro utilizando otimização por enxame de partículas.

Sobre o autor do livro:

Eyal Wirsansky é um engenheiro sênior de software, um líder de comunidade de tecnologia e um pesquisador e consultor de inteligência artificial. Eyal começou sua carreira de engenharia de software como um pioneiro no campo de voz sobre IP, e agora ele possui mais de 20 anos de experiência em criar uma variedade de soluções corporativas de alto desempenho. Durante a pós-graduação, ele focou sua pesquisa em algoritmos genéticos e redes neurais artificiais. Um resultado de sua pesquisa é um novo algoritmo de machine learning supervisionado que combina as duas técnicas citadas. Eyal lidera o grupo de usuários Java em Jacksonville (FL), hospeda o grupo de usuários virtual em Artificial Intelligence for Enterprise, e escreve o blog voltado ao desenvolvedor de inteligência artificial ai4java.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT