Aprendizagem de Máquina ao Alcance de Todos - (2)

Voltando sem muitas delongas ao exemplo da primeira parte desse artigo, vamos considerar novamente o nosso banco de dados de pessoas caracterizadas cada uma por um “registro” seguindo o mesmo formato, com campos de peso, altura, idade, sexo, etc. Agora, vamos supor que além dessa caracterização por dados biométricos sabemos que essas pessoas estão classificadas em dois grupos, digamos que com e sem histórico de problemas cardíacos. Em jargão de biologia, as pessoas com histórico cardíaco são “Casos”, as sem são “Controles”.

Em Aprendizagem de Máquina, a chamada Aprendizagem Supervisionada consiste em treinar um “modelo” (uma função ou algoritmo de classificação) a reconhecer casos e controles automaticamente. É o tipo de problema aplicável exatamente a massas de dados com informação de categoria, como a do exemplo acima. Essa massa de dados é chamada de “conjunto de treinamento”, justamente porque sua função é servir como uma coleção de exemplos que são usados para “dizer” ao classificador onde ele está errando e onde ele deve melhorar - daí o “supervisionado” no nome desse tipo de aprendizagem.

Exatamente como um método de classificação pode conseguir resultados melhores ou piores dado um conjunto de exemplos? Bom, existem inumeráveis algoritmos de aprendizagem supervisionada - redes neurais, métodos evolutivos, árvores de decisão, todos eles podem ser usados para classificação. Para fins didáticos, porém, vou focar aqui em um método bem geométrico, as SVMs (do Inglês Support Vector Machines).

Como já disse na Parte 1, cada “campo” do banco de dados descrevendo as coisas sendo classificadas (no exemplo pessoas) é visto como uma dimensão (no sentido espacial da coisa mesmo) em aprendizagem de máquina. Se os registros tiverem só três campos - digamos, peso, altura e idade - temos três dimensões, e as pessoas são “vistas” por um algoritmo de ML como pontos num espaço tridimensional com eixos de idade, peso e altura. Assim Fulano pode ocupar o ponto em 1,80 metros, 75 quilos e 36 anos, enquanto Beltrano está no ponto 1,72m, 60Kg, 28a. Esse é um exemplo não tão difícil de visualizar porque usa um espaço tridimensional como aquele de largura, comprimento e altura onde vivemos, mas na prática os problemas de ML lidam quase sempre com “hiperespaços” multidimensionais. Em problemas de Bioinformática são comuns espaços com milhares de dimensões, por exemplo.

De qualquer forma, voltando às SVMs, o que elas fazem é (supersimplificando a coisa) encontrar uma “hipersuperfície” que divide esse “espaço” do problema em dois lados. Uma divisão boa é aquela que deixa os pontos representando Casos de um lado da superfície e os pontos representando Controles do outro lado. No nosso exemplo das pessoas com e sem problemas cardíacos ocupando um espaço tridimensional, vamos enxergar o espaço 3D como um cubo e supor que a maioria dos casos ocupa a metade do cubo correspondendo a pessoas com mais peso e mais idade, enquanto os controles se concentram nas pessoas mais novas e magras. Um plano cortando o cubo em dois na diagonal, paralelo ao eixo de altura, já dá uma divisão razoável então. Talvez essa divisão razoável deixe muitos pontos ainda nos lados errados, então podemos experimentar outras coisas como inclinar o plano (talvez em relação ao eixo de altura, para fatorar pessoas que são pesadas porque são grandes), ou mesmo experimentar uma superfície que não seja plana, mas sim curva, correndo em uma forma meio ondulada que divida os dois conjuntos de pontos quase perfeitamente. (No caso de SVMs, o tipo de superfície é determinado pela chamada “função de kernel” - que no caso do plano é uma função linear.)

Finalmente, é interessante também computar a superfície de forma a que, além de separar o mais corretamente possível os pontos, ela também mantenha uma certa distância desses pontos, sem “passar raspando” em nenhum deles. Isso tem a ver com o que talvez seja a mais desejada e mais difícil de obter das características de um bom classificador: a capacidade de generalização. Isto é, a capacidade de corretamente classificar elementos novos, desconhecidos, que não estavam no conjunto de treinamento. No caso das SVMs, podemos visualizar que uma superfície correndo muito “rente” pelos pontos limítrofes da, digamos, Categoria Caso, pode erroneamente classificar um monte de pontos como Controle, mesmo eles caindo perto dos pontos de Caso, simplesmente porque a superfície está rente demais e não inclui pontos próximos que provavelmente também são Casos. Em casos assim, podemos “antropomorfizar” o que aconteceu dizendo que o classificador na verdade não aprendeu nada, apenas “decorou” os pontos que foram mostrados a ele…

No fim das contas, todo classificador gerado por aprendizagem supervisionada faz essencialmente a mesma coisa que a SVM - seccionar o espaço do problema em regiões correspondentes a categorias. Só que eles trabalham sob princípios que não são tão obviamente geométricos (e didáticos) como no caso da SVM, daí não vou falar sobre eles aqui. Finalmente, aprendizagem supervisionada não é categorização - coisas como regressão simbólica também caem nessa subdivisão de ML. Mas acho que isso já fugiria um pouquinho do nível “feijão com arroz” implicado pelo título. :)

Inteligência Artificial 0 Comentários

Alan Turing

Antes de chegarmos ao centésimo post deste blog (será o próximo), não podíamos deixar passar em branco que exatamente ontem, véspera de dia de São João, também foi o aniversário de uma das pessoas mais importantes da ciência da computação, o matemático britânico Alan Turing.

Graças ao Turing, temos o conceito de algoritmo e construções lógico-matemáticas como a máquina de Turing (uma abstração que descreve o funcionamento de uma máquina lógica determinística, exatamente como nossos computadores) e o teste de Turing, que descreve um procedimento que diferenciaria uma pessoa de um programa, com base na inteligência do interlocutor, ou em sua capacidade de mimetizar a inteligência de um ser humano real.

Assim, Alan Turing não só teorizou sobre o funcionamento dos computadores muito antes deles existirem, mas também lançou sementes de discussão sobre a Inteligência Artificial.

Alan Turing também passou maus bocados desde o início da guerra fria por conta de seu homossexualismo que era condenado (mais ainda) na época. Em 1954, Alan Turing morreu por suicídio, comendo uma maçã envenenada, uma referência à Branca de Neve (que alguns atribuem erroneamente à logo colorida da maçã da apple). Um triste fim para um gênio: morrer por causa do preconceito e da intolerância da “moral” do pós-guerra.

A vida de Alan Turing também rendeu um filme feito para a TV em 96 chamado “Breaking the code” (não sei se chegou a sair no Brasil). E no site oficial do Turing, há também uma “oração“, um texto muito legal e crítico do Andrew Hodges, que escreveu o livro “Enigma“, talvez a mais bem conhecida biografia de Turing.

Mas este post não é apenas para homenagear o Alan Turing, mas também para anunciar a parceria do Instituto Turing, o braço de pesquisa e educação do Vetta Labs, com a ETEG, uma empresa que dentre outras atividades, é referência em treinamento de TI em Belo Horizonte. A ETEG disponibiliza, junto com seu rol de cursos (a grande maioria relacionada a JAVA), os cursos de Eclipse RCP e BIRT, AJAX Básico, Toolkits AJAX e Ruby On Rails. Fica a dica.

Biografia, Desenvolvimento, Inteligência Artificial, Teoria da Computação 0 Comentários

Aprendizagem de Máquina ao Alcance de Todos - (1)

Volta e meia surge algum artigo aqui no blog falando de aplicações de inteligência artificial e frequentemente usando termos que podem soar meio misteriosos para muitos, como o críptico “aprendizagem de máquina”, às vezes também usado em sua forma original em Inglês, “machine learning”. Penso que talvez esse termo pode ainda evocar na cabeça de muitos uma imagem de coisa scifi incompreensível, então decidi escrever este artigo (em dois “capítulos”) sobre o beabá da aprendizagem de máquina para mostrar que, uma vez explicado, o tal Machine Learning (ou ML) pode até parecer meio prosaico…

A definição vaga e por alto (e não sei se existe uma definição exata e profunda, a propósito :) de ML como um todo é: um método ou algoritmo para descobrir de forma automatizada padrões em uma massa de dados. Acho que essa definição não diz muito coisa sem exemplos, então vamos dar alguns nomes a alguns bois.

Vamos supor que você tenha um banco de dados com características de várias pessoas. As características podem ser qualquer coisa (digamos, peso, altura, idade, etc), desde que possam ser comparadas de forma quantitativa ou lógica. Esse conjunto de valores de características descrevendo cada pessoa é chamado vetor de características, em jargão de ML.

Já que o valor da altura de uma pessoa é comparável com o valor da altura de outra, o mesmo acontecendo com peso, idade e demais dimensões (=outro jargão de ML - bem, na verdade de ciências exatas em geral, nesse caso :) do vetor de características, então acaba que dois vetores inteiros podem ser comparados um com o outro, levando em conta todas as suas dimensões ao mesmo tempo. É possível criar o que chamamos de medida de similaridade, que é simplesmente uma conta envolvendo todas as dimensões de dois vetores que no final solta um número - quanto mais alto esse valor, mais similares são esses vetores.

De posse dessa medida, já é possivel fazer coisas divertidas em ML - por exemplo juntar as pessoas parecidas umas com as outras, dividindo o conjunto original em vários subconjuntos de pessoas parecidas. Esse tipo de processo é o chamado clustering - ou aglomeração, traduzindo - e é a base da vertente de ML chamada de aprendizado não-supervisionado.

A parte do “aprendizado” nesse nome vem do fato de que antes os elementos do conjunto de dados sendo analisado eram completamente amorfos, não-estruturados, “farinha do mesmo saco” por assim dizer; após o clustering, porém, temos grupos separados nos quais veremos padrões. No exemplo do clustering de pessoas, talvez se forme um aglomerado de pessoas baixas e gordas, outro de pessoas altas, um de pessoas velhas de peso médio, e por aí vai.

Já a parte do “não supervisionado” vem do fato de que não é preciso dizer ao algoritmo de clustering sendo usado (existe uma infinidade deles) se os resultados que ele está produzindo são bons ou ruins, ele mesmo toma suas próprias “decisões” de como fazer melhor a aglomeração. Aliás, é difícil dizer quantitativamente e de forma geral, irrestrita, se um clustering é bom ou ruim, no sentido de que é algo um tanto subjetivo - existe uma multiplicidade de métricas de qualidade de clustering, com aplicações apropriadas caindo em vários casos diferentes.

Existe também, é claro, a aprendizagem supervisionada, o outro grande campo da Aprendizagem de Máquina. Mas isso é assunto para a Parte 2 deste artigo…

Data Mining, Inteligência Artificial 0 Comentários

Marketing científico

Já faz alguns anos, o Drucker já alertava para a interdisciplinaridade iminente.

Aí está o Kenji aqui pesquisando um pouco sobre Marketing Viral (não, eu não quero fazer vídeos engraçados no youtube, embora eu tenha até uma certa experiência com isso…) quando eu caio nos interessantes estudos da Dina Mayzlin, da Yale School of Management, que estuda o marketing WOM (word of mouth), no qual o marketing viral, tão celebrado hoje em dia, se enquadra, graças ao potencial da web de propagação rápida de…. errr… informação ;-) .

Já no primeiro paper, eu caio no estudos da moça sobre Autômatos Celulares, Classificadores de conversas (chat) em fóruns financeiros e economia experimental (como uma alternativa às abordagens econométricas tradicionais).

Eu tenho a impressão que o Omni (chamamos o Lúcio aqui no Labs de Omni por motivos históricos) já trabalhou com classificadores de chat uns anos atrás, nesta mesma linha, de detectar o sentimento em conversas. Depois tenho que bater um papo com ele sobre isso. Provavelmente já deve ter gente fazendo coisa parecida nos twitters da vida.

Classificadores são velhos conhecidos, a Biomind trabalha com classificadores como forma de encontrar possíveis genes relacionados a doenças como câncer desde quase a fundação da empresa.

Autômatos Celulares, (irony on) essa novidade da ciência moderna (irony off), remonta dos estudos de crescimentos em cristais de 1940.

E finalmente, a tal da economia experimental, da qual eu nunca tinha ouvido falar (casa de ferreiro espeto de pau, tenho dois doutores em economia na família, dos bons), parece ter surgido em 90, então imagino que seja terreno fértil para muita pesquisa ainda.

Então talvez haja diversão para gente como eu no Marketing ;-) .

Autômatos, Data Mining, Economia, Inteligência Artificial 0 Comentários

Sobre futebol e robôs

Imagination will often carry us to worlds that never were. But without it we go nowhere.” Carl Sagan

Este é o primeiro de uma série de posts descrevendo uma paixão antiga minha, fruto de um trabalho de pesquisa iniciado há mais de 12 anos: o futebol de robôs. Apesar (ou justamente por isso) de ser um perna-de-pau de primeira na vida real, me envolvi nesta que é, para a maior parte dos mortais, uma modalidade esportiva (?) no mínimo curiosa.

O futebol de robôs surgiu na primeira metade dos anos 90 como uma forma divertida de desenvolver as habilidades de robôs autônomos atuando em equipe para atingir uma determinada meta. Para os que acham que é uma mera brincadeira, há diversos exemplos sérios e concretos de como a tecnologia desenvolvida pode ser útil para a humanidade:

  • tarefas repetitivas mas não facilmente automatizáveis, como limpar a sua casa:

Rosie the robot

  • lavar as louças:

Ops, como eu ia dizendo, diversos exemplos sérios e concretos:

  • tarefas em ambientes inóspitos ou perigosos, como dar manutenção em gasodutos, implantar bases submarinas para extração de petróleo ou reparar linhas de transmissão de alta-tensão;

  • situações extremas onde é necessário tomadas muito rápidas de decisão, como a automação do controle de veículos na iminência de um acidente;

  • e qualquer outra situação onde o ser humano não possa ou não deva agir, por risco ou por incapacidade, e que haja necessidade de tomada de decisão rápida com base em variáveis do ambiente e em eventual comunicação com outros agentes (planejamento em equipe).

A menção ao futebol de robôs geralmente traz ao imaginário leigo imagens de robôs humanóides driblando, fazendo embaixadinhas e comemorando os gols. Apesar disto ser o objetivo final destes projetos, algo assim só deverá ser alcançado, na mais otimista das hipóteses, daqui a 20 anos. Hoje até já temos robôs humanóides, mas uma partida típica nesta categoria ainda se parece mais com um jogo de idosos portadores de esclerose múltipla, ou outra disfunção motora:

Portanto, para evitar frustrações, vamos assumir que me refiro especificamente à categoria das “caixinhas com rodas”: pequenos robôs capazes de “empurrar” a bola até o gol, desviando dos adversários quando possível:

Sim, eu sei que tem muito menos glamour do que os tais humanóides esclerosados acima, mas como sempre dizia meu grande orientador na graduação, Prof. Mário Campos, KISS (Keep It Simple, Stupid).

Nesta categoria, de pequenas caixinhas com rodas, os dois campeonatos mais conhecidos são a copa RoboCup e a copa Mirosot. Foi nessa última que nós participamos nos idos de 1998 e 1999, inclusive conquistando um honroso título de campeão sul-americano em 1999 (ok, os outros times não eram lá muito fortes também, mas ninguém precisa ficar sabendo disso).

Então vamos começar a falar do que interessa: a tecnologia. O projeto de um time de futebol de robôs envolve diversos estágios multi-disciplinares:

  • projeto mecânico;

  • projeto elétrico e eletrônico;

  • componentes de software para suporte (sensoriamento e transmissão de comandos);

  • componentes de software para estratégia e controle.

Tentarei dar uma breve visão dos últimos dois itens, especialmente nos componentes de visão (sensoriamento), controle e estratégia. São estes três os itens que mais me interessam, e que, suponho, sejam de maior interesse dos leitores deste blog. Portanto, este artigo será seguido de três outros, cada um descrevendo uma dessas três áreas.

Espero também que os leitores mais técnicos me perdoem pelo estilo literário menos científico. Mantendo a linha editorial do blog, pretendo escrever da forma mais simples possível para o leigo. Sempre que possível, deixarei referências para quem quiser se aprofundar no assunto.

Renato Mangini é arquiteto de software sênior. Foi sócio fundador da Vetta Technologies e da Vetta Labs e hoje ele trabalha em sua startup de tecnologia (nome e produto ainda não divulgados). Sua formação acadêmica inclui um bacharelado em Ciência da Computação e um mestrado inacabado, ambos pela UFMG, e cursa agora um MBA no Ibmec.

Inteligência Artificial, Robótica 0 Comentários

Analisando Dados “Misteriosos”

Naquele estranho (e meio nojento - tudo bem, muito nojento) filme de 1986 do Cronenberg, “A Mosca”, em algum momento a repórter interpretada pela Geena Davis pergunta ao cientista vivido pelo Jeff Goldblum como ele conseguiu construir um teleportador do nada no galpão dele. O cientista responde que na verdade ele não fez aquilo sozinho e nem do nada, ele contratava equipes de cientistas ao longo do globo pedindo coisas esquisitas do tipo “quero um analisador molecular obedecendo tais e tais especificações”, e aí uns meses depois lá chegava o analisador molecular. As equipes independentes de cientistas que resolviam esses sub-problemas e criavam esses componentes só enxergavam o que precisavam enxergar, não tinham noção de onde a solução que eles desenvolveram seria aplicada, e principalmente não tinham a menor idéia do projeto do teleportador que o personagem principal estava desenvolvendo.

No mundo real, longe das referências nerd envolvendo obras de ficção científica, devo dizer que nós aqui do Vetta Labs às vezes nos sentimos um pouco como os cientistas do filme que construíram o analisador molecular sabe-se lá para ser usado em que. Como diz o ditado, “o segredo é a alma do negócio”, e isso é particularmente aplicável quando o negócio envolve a análise de informações de outras empresas que querem ao mesmo tempo terceirizar serviços de mineração de dados e preservar o sigilo de seus contratos e seus clientes.

Pois bem, uns meses atrás, em mais um daqueles exemplos das maravilhas do outsourcing de pesquisa, fomos contratatos pela Novamente para analisar os dados de um terceiro cliente-cujo-nome-não-será-revelado, que como dá para suspeitar pela omissão do nome era justamente desses que preferem manter seus dados e planos envoltos em mistério. Recebemos uma base de dados composta por dezenas de milhares de tuplas, cada uma formada por um punhado de valores correspondendo a um pequeno conjunto de variáveis. O problema que nos foi colocado foi tentar prever uma das variáveis em especial com base nos valores de todas as outras, com uma taxa de acerto superior a um certo limite mínimo aceitável. A variável a ser predita era, para todos os fins práticos, lógica, do tipo “sim” ou “não”. As demais variáveis eram bem variadas, algumas claramente numéricas, outras também lógicas, e finalmente umas que talvez fossem numéricas ou talvez fossem simbólicas. O caso é que não tínhamos nem muita certeza do tipo de algumas das variáveis porque não nos foi dada qualquer informação sobre as mesmas. Os nomes de algumas variáveis até davam pistas do que elas deviam ser (mas não exatamente em que unidades elas estavam sendo medidas), porém outras variáveis tinham nomes herméticos que não ajudavam muito do ponto de vista da, digamos, semântica dos dados.

Assim, inventando uma base de dados parecida para fins de exemplificação, vamos supor que temos um conjunto aparentemente desprovido de sentido de quatro variáveis chamadas TUTU, PEDRA, CAVALO e CHUVA, e com base nelas temos de prever se o valor de uma quinta variável RESPOSTA é “sim” ou “não”. Existem dezenas de milhares de combinações-exemplo de valores de TUTU, PEDRA, CAVALO e CHUVA com valores conhecidos de RESPOSTA, e com base nelas devemos achar regras engraçadas como, digamos, “Se TUTU vale mais que 0.65, PEDRA tem valor ‘mole’ ou ‘redonda’, CAVALO pode ter qualquer valor e CHUVA vale ‘forte’, então RESPOSTA é ’sim’, caso contrário ‘não’”, regras essas capazes de prever RESPOSTA corretamente com uma acurácia maior que um mínimo estipulado pelo cliente.

Numa situação dessas, o bom minerador de dados deve se ater àquela máxima que acredita-se o filósofo-patrono das ciências exatas, o Pitágoras, soltou uns 25 séculos atrás: “Tudo são números”. É verdade que, como já exemplificamos várias vezes aqui no blog, quando mais informação você tem sobre uma base de dados, melhor, e às vezes é inclusive interessante usar outras bases de dados direta ou indiretamente relacionadas para “amplificar” a base objeto do seu estudo. Porém, nas situações em que não podemos (ou não devemos :) saber mais a respeito dos dados, o puro uso da lógica e da matemática podem ainda assim ser surpreendentemente efetivos.

Foi assim no caso dessa base de dados “misteriosa”. Devo dizer que criar uma abordagem capaz de passar do limite de acurácia mínimo pedido pelo cliente foi bem… desafiador, talvez inclusive devido ao desconhecimento da semântica dos dados. Mas, no final, chegamos a uma método bem robusto capaz de resolver até nossas dúvidas sobre o tipo exato de algumas variáveis. Nessa metodologia (da qual falarei apenas por alto para não “falar demais” :), desenvolvemos uma maneira de medir a “capacidade de predição” de uma variável quando assumia um dado valor (não importando se esse valor é um número, uma string, lógico, etc), e também para qual resposta (”sim” ou “não”) tendia esse dado valor de dada variável. No final, ao contrário do exemplo acima, nossas regras verificavam não os valores diretos das variáveis, mas sim a capacidade de predição dos valores que elas estavam assumindo na tupla em questão, e com base nisso decidiam se a tupla apontava para “sim” ou um “não”.

Conseguimos com essa abordagem ultrapassar (por pouco) a acurácia mínima pedida pelo cliente, inclusive em um segundo conjunto de tuplas completamente desconhecidas, seguindo o mesmo formato de dados, que o cliente nos forneceu para uma validação adicional. É possível que agora formalizemos um serviço de análise e desenvolvimento de mais longo prazo - e quem sabe até com um véu de mistério menos espesso. De qualquer forma, a lição que ficou foi: os números são seus amigos, não se desespere se eles são a única coisa ajudando você em seu trabalho de análise de dados. ;-)

Data Mining, Inovação, Inteligência Artificial 0 Comentários

Sobre Navalha de Occam e Mininum Description Lenght (MDL)

Quem assistiu o filme Contato, certamente deve se lembrar da cena na qual a protagonista Eleanor Arroway interpretada por Jodi Foster é inquirida sobre a viagem que ela afirma ter feito utilizando o tal equipamento alienígena construído com recursos terrestres. Durante o interrogatório, Michael Kitz personagem vivido por James Woods pergunta a Eleanor se ela conhecia a Navalha de Occam. Já sem muitos argumentos a heroína se cala e a hipótese que ela não tenha feito a tal viagem é escolhida pelos inquiridores. Mas afinal, o que é essa tal navalha?

William Ockham foi um cara que viveu no século XIV e a ele é atribuído o tal princípio com a peculiar denominação “Navalha de Occam”. Também chamada de “Lei da parcimônia” a Navalha de Occam diz que se você tiver duas ou mais explicações para um determinado fenômeno é melhor você escolher a mais simples, contanto que ela explique o fenômeno tão bem quanto as outras. Era isso que Michael Kitz queria dizer ao perguntar a Eleanor se ela conhecia esse princípio. A pergunta podia ser feito da seguinte forma: tenho duas histórias aqui, uma simples e outra toda complicada e até um pouco absurda. Ambas explicam o que ocorreu satisfatóriamente. O que você, como cientista, escolheria Sra. Arroway?

Vamos a um segundo exemplo. Imagine a seguinte situação: você tem n pontos e quer descobrir qual polinômio se ajusta melhor a esses dados. Bom, sabemos que sempre existe um polinômio de grau igual a (n-1) que se ajustará perfeitamente aos n pontos. Mas, essa é a melhor escolha? A resposta é: depende. Veja a figura abaixo. Vemos claramente que um polinômio com grau 3 já oferece um bom ajuste aos dados. Usar um polinômio de grau maior do que 3 é trabalho demais pra pouca melhora no ajuste. Isso é chamado de Overfitting.

Mininum Description Lenght (MDL) é um método de inferência indutiva que implementa a mesma filosofia presente na Navalha de Occam. Esse método fornece soluções genéricas para o chamado Problema de Seleção de Modelo. Que é o caso dos pontos mencionado anteriormente. Uso uma reta ou uma parábola para descrever meus dados? E o legal mesmo é o insight por trás desse método. Para ele, aprender é encontrar regularidade nos dados. Bom até aí tudo bem. Mas ora, dados regulares têm um coeficiente de compressão alto, certo? Então quanto mais conseguirmos comprimir os dados mais aprenderemos sobre eles! Falando mais formalmente, se tivermos um conjunto de hipóteses H sobre um conjunto de dados D, então o que estamos procurando são hipóteses (uma ou mais) em H que forneçam a maior compressão de D.

Essa é a idéia geral do assunto e apesar de ser uma teoria bem legal é também um bocado cabeluda. Para aqueles que quiserem saber mais, há um material muito bom sobre MDL em Peter Grünwald.

Inteligência Artificial, Teoria da Informação 1 Comentário

Otimização inspirada em formigas

O campo de inteligência artificial é cheio de técnicas inspiradas na natureza. Os dois exemplos mais famosos são redes neuronais, que emulam grupos de neurônios e suas conexões, e algoritmos genéticos, que tentam resolver um problema codificando a solução nos genomas de uma população artificial, sujeita à sobrevivência e recombinação dos mais fortes. Talvez falemos mais dessas técnicas por aqui, se houver interesse.

Hoje eu vou falar de uma outra técnica, ou família de técnicas: Ant Colony Optimization (ACO), ou otimização de colônias de formigas. ACO foi inventada por Marco Dorigo em 1992, e se baseia na capacidade de grupos de formigas de apresentar comportamento coletivo muito mais inteligente que o que uma formiga sozinha seria capaz de fazer. Por exemplo, formigas podem achar o melhor caminho entre o formigueiro e uma fonte de comida. Se algum obstáculo mudar o terreno, elas se adaptam rapidamente e encontram um novo caminho, como você pode ver na figura abaixo.

Adaptando o caminho

Isso acontece porque as formigas se “comunicam” de forma indireta, através do ambiente, usando feromônios. As formigas deixam uma trilha de feromônio pelo caminho que seguem. Quanto menor o caminho, mais forte o feromônio. Outras formigas tendem a seguir o feromônio mais forte. Caminhos alternativos, e piores, são abandonados porque o feromônio mais fraco depositado ali evapora com o tempo. Esse é o princípio básico de Ant Colony Optimization. O Dorigo usou essa capacidade para resolver o clássico problema do Caixeiro Viajante, com excelentes resultados.

Isso foi em 92. Hoje, o trabalho do Dorigo e de outros pesquisadores deu origem a todo um subcampo de pesquisa em computação, chamado de Inteligência de Enxame, que se baseia na premissa de usar agentes muito simples, mas que colaboram entre si, para atingir objetivos complexos e de forma robusta, ou seja, tolerante a falhas e mudanças no ambiente. Um exemplo interessante, também baseado em formigas, é clustering. As formigas sabem naturalmente agrupar objetos por grupos e fazem isso para limpar o formigueiro, separando comida de lixo.

Antes do agrupamentoDepois do agrupamento

A combinação de robustez e inteligência coletiva é muito interessante pro pessoal que trabalha com robótica. Agentes simples são baratos, se você tem um grupo de robôs que pode se adaptar à perda de um deles, por falha mecânica, falta de energia ou qualquer outro motivo, diminuem as chances de seu enorme investimento em robôs ir por água abaixo por um detalhe bobo.

O casamento de inteligência de enxame com robótica atende pelo nome de Swarm Robotics. Os robozinhos, sempre trabalhando em equipe, realmente têm um comportamento coletivo interessante. Por exemplo, eles aprendem que podem se conectar, formando um objeto maior, para passar por um obstáculo intransponível para um único robô:

Saltando um obstáculo

Eles também conseguem transportar grandes objetos, navegar um terreno em formação e otras cositas más. Aqui tem um bando de videos bacanas.

Inteligência Artificial, Robótica 0 Comentários

O que é inteligência?

Como funciona o cérebro humano? A resposta desta pergunta solucionaria um dos maiores mistérios sobre a natureza do homem. Mas, como ainda não temos esta resposta, buscamos, através de diversas teorias, explicar como nós somos capazes de resolver problemas, memorizar enormes quantidades de dados, reconhecer padrões sensoriais (imagens, sons, cheiros, etc.) com grande rapidez, além de realizar diversas outras tarefas que não sabemos ao certo como são tratadas no nosso cérebro.

Uma das mais importantes teorias sobre o cérebro, mais especificamente sobre o córtex cerebral, foi cunhada pelo neurocientista Vernon Mountcastle e se refere às colunas corticais e aos padrões cerebrais. O córtex cerebral é a camada mais externa, constituída de tecido nervoso cinzento, que encobre a parte interna do cérebro (tecido nervoso branco) de todos os mamíferos. Nos humanos, o córtex possui seis camadas, cada uma da espessura uma carta de baralho. Acredita-se que quanto mais camadas, mais ‘inteligente’ a espécie - os golfinhos possuem apenas três camadas. Não entrarei em detalhes sobre a parte da teoria que fala sobre as colunas corticais, mas de uma forma geral elas mapeiam o córtex em uma arquitetura de colunas conectadas de forma hierárquica e dispostas nas seis camadas que constituem o córtex cerebral. Essa dica não ajuda muito a entender como as colunas funcionam (quem quiser se aventurar busque por: An Organizing Principle for Cerebral Function…” 1978, por Vernon Mountcastle), mas será importante para compreender como os padrões cerebrais são transformados em memórias e vice-versa.

Mas o que são estes tais padrões cerebrais? Você já deve ter ouvido falar das sinapses e dos pulsos elétricos (provavelmente nas aulas de biologia que você assitiu no segundo grau), utilizados pelas células cerebrais (neurônios), para se ‘comunicarem’ entre si. Não se lembra? Tudo bem. Imagine que o cérebro é formado por uma malha de bilhões de fios metálicos que trafegam freneticamente energia elétrica de um ponto a outro do cérebro. Hmm, mas e os padrões? Bom, os padrões podem ser compreendidos como sequências de pulsos elétricos, que passam a ter um significado se levado em consideração o intervalo de tempo que estes pulsos chegam ao cérebro. Para ficar mais interessante, pense em todos os seus órgãos sensoriais (olhos, ouvidos, pele, etc.) como conversores de padrões. Eles capturam, no ambiente externo, dados brutos de diversos tipos, fazem o devido tratamento e entregam os resultados ao cérebro no formato destes pulsos elétricos temporalmente ordenados. Dessa forma, o cérebro “apenas” tem que se preocupar em receber os padrões, reconhecê-los, catalogá-los, armazená-los e prover alguma forma de serem recuperados futuramente. É importante ressaltar que qualquer parte do córtex é capaz de tratar padrões provenientes de quaisquer fontes sensoriais.

Ei, espera aí. Qualquer parte do córtex é capaz de tratar padrões de qualquer origem? Mas como ficam aquelas teorias que sempre ouvimos falar sobre o cérebro ter uma área responsável por reconhecer padrões visuais, outra para lidar com a língua falada, outra para realizar raciocício matemático, etc. ? Mountcastle acredita que o córtex não é constituído de forma modular. Segundo ele, qualquer área do córtex é capaz de lidar com informações de qualquer natureza. Ah! É por isso que eu já vi vários casos de pessoas acidentadas perderem boa parte do cérebro e depois de um tempo de recuperação voltaram a viver suas vidas normalmente (ou quase). Sim, é muito provável que o cérebro funcione desta forma e, levando isto em consideração, podemos dizer que o córtex trabalha com um “algoritmo genérico de manipulação de padrões”. Ou seja, qualquer padrão que chegue ao cérebro ou trafegue por ele é tratado da mesma forma, sem essa de módulo que faz isso pra cá e módulo que faz aquilo pra lá.

O modelo forjado por esta teoria permitiu o avanço de diversas pesquisas sobre a organização e o processamento dos padrões cerebrais. Um exemplo disso: o criador do mundialmente conhecido Palm Pilot e entusiasta dos estudos sobre o córtex cerebral, Jeff Hawkins, que escreveu um livro em 2005 chamado OnIntelligence. Neste livro ele reforça com diversos outras suposições, relatos e experimentos as teorias de Mountcastle e ainda faz especulações sobre vários outros assuntos ainda não explicados sobre o funcionamento do cérebro. É importante ressaltar o autor de OnIntelligence é um computeiro e um sujeito bastante prático. Ele deixa claro que o seu objetivo, no final das contas, é converter as teorias criadas por neurocientistas, biólogos, psicólogos, filósofos e outros estudiosos (incluindo ele próprio) num modelo computacional aplicável à construção de máquinas inteligentes. Mas, o que chama atenção em seu livro é a forma com que ele aborda os principais fundamentos das teorias sobre o córtex cerebral, além de explicá-las de forma prática. De uma forma sintética, as principais responsabilidades do córtex, apresentadas por Hawkins, são:

  • Armazenamento sequencial de padrões: Quando o cérebro precisa armazenar alguma informação, os padrões que chegam ao córtex são armazenados de forma sequencial. Isso significa que o cérebro cria elos de comunicação entre os padrões de entrada, constituindo a memória a partir de um encadeamento de padrões. Como o tempo é levado em consideração durante este sequenciamento, as cadeias geradas também possuem informações temporais, que indicam o momento de chegada e/ou ativação de cada padrão. A ativação se refere ao acionamento de um padrão já armazenado no córtex, que também pode compor uma nova memória, combinando-se com outros novos padrões.
  • Capacidade de invocar padrões auto-associativos: Ao tentar se lembrar de algum fato, nosso cérebro começa a busca pelo padrão que inicializa a cadeia referente à memória que explica tal fato. Depois que este padrão foi recuperado, ele invoca o padrão consequente através do elo criado entre os dois. Este processo se repete até que toda a cadeia tenha sido recuperada e o fato relembrado. Por isso você consegue se lembrar do alfabeto de A a Z com facilidade, mas não consegue de Z a A, pois você não foi ‘treinado’ e não possui os padrões sequenciais necessários para se lembrar do alfabeto de trás p/ frente. É claro, que se você fizer um treinamento - pensando no córtex, este treinamento seria o armazenamento de padrões temporais que representam as letras de Z a A - semelhante ao que você fez para se lembrar de A a Z, você conseguirá facilmente realizar esta tarefa.
  • Armazenamento de padrões num formato invariante: Imagine que você está num parque brincando com uma criança. Você tem uma bola em suas mãos. A criança pede a bola e você a joga. Então a criança repete o seu gesto e joga a bola para você. Você a pega e continua a brincadeira. Todo o mecanismo necessário para realizar as ações que você e a criança executaram é tratado de forma ‘inconsciente’. Você não se preocupa com a velocidade da bola, as forças que atuam sobre ela, o seu peso, etc. Simplesmente a joga e depois a pega. Isto porque existe uma invariante armazenada no seu cérebro que representa ‘pegar algo’ e ‘jogar algo’. Uma invariante nada mais é do que um conjunto de padrões genéricos, que serve como modelo para o processamento de padrões mais específicos. Não existe, de forma detalhada, uma teoria que explique como são formadas as invariantes mas, acredita-se que as invariantes são as responsáveis por conseguirmos lidar com uma variedade enorme de estímulos durante o dia, sem ficar a todo momento se perguntando “o que é aquilo?” ou “como isto funciona?”.
  • Armazenamento padrões em hierarquia: Como já foi dito anteriormente, as colunas corticais são organizadas hierarquicamente. Os padrões mais genéricos e invariantes ficam no alto desta hierarquia. Padrões mais específicos ficam mais abaixo nesta hierarquia. Quando o estímulo vem dos órgãos sensoriais, os padrões são ativados num fluxo de baixo para cima nesta hierarquia de colunas. Mas quando imaginamos alguma coisa ou tentamos nos lembrar de um fato, os padrões são ativados de cima para baixo, das invariantes para os padrões específicos. Esta organização permite o reaproveitamento de padrões por diversos fragmentos de memória, evitando a replicação desnecessária e formando uma malha que facilita a recuperação posterior de informações.
  • Recuperação da memória auto-associativa: Basicamente, a recuperação de memórias funciona assim. Temos diversos padrões sequenciais armazenados no córtex. Você então passa a ele uma seqüência de padrões que representa uma caneta. Então o cérebro te devolve uma seqüência de padrões que representa a caneta e por fim você entende que é uma caneta. Parece meio estúpido a princípio, mas o mecanismo de recuperação de informação no córtex é algo extremamente poderoso. Por exemplo, se você passa, ao invés dos padrões da caneta inteira, padrões que apenas representam a ponta da caneta, ou a caneta de cabeça p/ baixo, ou apenas metade da caneta ou uma caneta deformada pelo fogo de um isqueiro ou… A resposta será a sequência completa de padrões que representam a caneta e você entenderá que é uma caneta. O nosso cérebro completa as informações com diversos padrões, realiza buscas nas invariantes, faz conexões associativas com outras cadeias de padrões e te devolve a resposta de maneira completa, desde que ela já esteja previamente armazenada. Estar previamente armazenada exige que seu cérebro já tenha sido exposto àqueles padrões.
  • Antecipação dos fatos: O cérebro prevê o futuro o tempo todo, mas não é como a mãe Diná que ‘enxerga um futuro distante’. As conseqüências de todas as nossas ações a curto prazo são antecipadas pelo nosso cérebro. Quando chegamos em casa depois do trabalho e giramos a maçaneta da porta, o cérebro já antecipa o quanto de força será necessário aplicar sobre a maçaneta para girá-la e empurrar a porta. Se as forças aplicadas abrirem a porta como o de costume, a antecipação é confirmada e o cérebro continua seu papel de ‘vidente a curto prazo’. Caso alguém tenha mexido na porta e a força aplicada não seja o suficiente para abrí-la ou enquanto você a empurra para trás ela fizer um rangido que antes não fazia, haverá uma violação na previsão e o cérebro tentará buscar padrões que expliquem o porquê disso. Logo, você pode considerar todo e qualquer tipo de aprendizado como um treinamento que construirá padrões a serem utilizados para antecipar fatos.

Se você sempre imaginou o cérebro como um processador utilizado em computadores, você pode estar se perguntando: Mas é só isso? Nosso cérebro somente lida com memórias em formato de padrões? Ele apenas faz o armazenamento e a recuperação de padrões? Nada de cálculos e processamentos complexos assim como os processadores fazem? Nada disso. Quando esticamos os braços para segurar uma bola jogada para nós, nosso cérebro não calcula a trajetória da bola, muito menos integra as forças para realizar a cinemática inversa, ele simplesmente consulta a memória e traz a resposta. Isso mesmo. O cérebro sempre consulta as respostas dos problemas que queremos resolver. Por isso temos que aprender técnicas para lidar com problemas complexos. Usamos estas técnicas para organizar as variáveis do problema na memória, recuperar os padrões necessários para reconhecer estas variáveis através de associações e, por fim, alcançar a solução (que também será armazenada). Problemas desconhecidos são resolvidos através de analogias a problemas conhecidos já armazenados em nossa memória.

Bom, agora que você já conhece um pouco sobre as teorias que são utilizadas para explicar o funcionamento do nosso cérebro, podemos definir o que é inteligência de uma forma bem simples. Basicamente, inteligência é a capacidade de antecipar as coisas. Os testes de QI exploram justamente esta capacidade. Portanto, segundo esta teoria, é possível que o cérebro seja treinado para se tornar inteligente (inclusive para tirar notas altas em testes de QI). Quanto mais invariantes e padrões mais genéricos para a resolução de problemas diversos, mais eficiente o cérebro será na antecipação de situações desconhecidas ou consideradas complicadas para a maioria das pessoas. Esta é apenas uma definição sintética de inteligência, baseada nas teorias de Mountcastle e Hawkins. Se você se interessou pelo assunto, vale a pena ler os trabalhos destes dois pesquisadores. Lembrando que Hawkins é um cara da computação e seu trabalho é uma releitura, fortemente direcionada à sua área, das teorias de Mountcastle.

Curiosidade: Os transistores que compõem um processador são muito mais rápidos que os neurônios. Enquanto os neurônios trafegam informações na ordem de milisegundos, transistores gastam apenas nanosegundos. Mas por que os processadores ainda não superaram o cérebro humano na resolução de problemas comuns para o cérebro, como por exemplo o reconhecimento de imagens. Ainda tomando como base as teorias descritas neste artigo, o cérebro apenas consulta a resposta na memória, não realiza os cálculos complexos que são efetuados pelos softwares.

Inteligência Artificial, Memória, Processamento de Sinais 2 Comentários

Daphne Koller

é mais uma daquelas mentes brilhantes que trazem um certo orgulho aos brasileiros.

Daphne, aos 12 anos, começou a se interessar por computação (1981). De lá prá cá, teve uma carreira em rápida ascensão, e hoje, aos 39, é professora em Stanford (entrou no departamento de ciência da computação em Setembro de 95), onde faz parte do laboratório de robótica.

E virou notícia dia 28 de Abril (site da ACM) quando recebeu seu ACM-Infosys Foundation Award in Computing Sciences pelos seu trabalho integrando técnicas de IA com formas de resolver problemas do mundo real. Mais especificamente, a Infosys Foundation pagou para ela US$ 150.000, uma mixaria diante dos US$ 500.000 que ela havia recebido em 2004 pela Fundação MacArthur. E a notícia chegou aqui, via New York Times ontem, dia 4 de Maio.

Daphne tem uma vasta gama de interesses, principalmente em redes bayesianas (que ganharam popularidade com os filtros anti-spam), biologia computacional, visão computacional, robótica e percepção, aprendizado supervisionado, lógica probabilística, tomada de decisão e muitos et ceteras que muito nos interessam.

Ave Daphne, aqueles que se esforçam te saúdam. :-D

Biografia, Biotecnologia, Inovação, Inteligência Artificial, Linguagem Natural, Probabilidade 0 Comentários

« Previous Entries Next Entries »