Máquinas que aprendem a partir de dicas

Autor: Pedro Luis Kantek Garcia Navarro- GPT


Este artigo foi originalmente escrito por Yaser S. Abu Mostafa e publicado pela revista Scientific American, de abril de 1995, páginas 68 a 73. Tradução livre de Pedro Luis Kantek Garcia Navarro.
O aprendizado de máquinas pode ser grandemente auxiliado adquirindo vantagem disponível a partir de dicas inteligentes.

Por Yaser S. Abu-Mostafa, professor de engenharia elétrica e ciência da computação no Instituto de Tecnologia da Califórnia e chairman da NeuroDollars, uma empresa baseada na Califórnia. Recebeu sua graduação na Universidade do Cairo em 1979, seu mestrado no Instituto de Tecnologia Georgia em 1981, e o seu doutorado na CalTech em 1983. Hoje, ele lidera um Grupo de Sistemas de Aprendizagem na CalTech e serve como um dos principais investigadores para o Centro da Fundação Nacional de Ciência para Engenharia Neuromórfica de Sistemas. Tem sido consultor no Citybank desde 88. Publicou largamente nas áreas de teoria da aprendizagem, redes neuronais, reconhecimento de padrões, teoria da informação e complexidade computacional.

Suponha a seguinte questão: Por que um elefante é grande, escuro e tem uma forma esquisita? Porque se ele fosse pequeno, branco e redondo, ele poderia ser uma aspirina. Esta resposta pode causar riso a ouvidos humanos, mas ela poderia prover informação importante para um sistema que tentasse distinguir elefantes de aspirinas. O conhecimento que nós normalmente obtemos não está disponível para máquinas, a menos que ele seja cuidadosamente codificado. Para as máquinas, aprender não é nada fácil.

A despeito das dificuldades, machíne learning é uma das tecnologias que mais cresce hoje em dia. Os últimos anos assistiram a uma explosão de aplicações variando desde leitura automática de CEP escrito a mão, até a previsão de assentos necessários na aviação. Realmente, da última vez que você recebeu um cartão de crédito bancário, existem boas chances que o seu crédito tenha sido estabelecido por uma máquina que aprendeu como avaliar riscos creditícios. E no futuro as máquinas que aprendem tendem a crescer cada vez mais.

Desenhar um programa de computador para manusear um serviço particular invariavelmente demanda conhecer este serviço, e como seus problemas podem ser resolvidos. Machine learning por seu turno, tem um apelo fundamental. Ao invés de escrever um programa especializado, pode-se simplesmente prover um treinamento adequado baseado em exemplos para que a máquina possa aprender sozinha.

Um sistema creditício com auto-aprendizado, poderia, por exemplo, usar dados históricos sobre "bons" e "maus" pagadores para basear seus julgamentos. A máquina não toma conhecimento sobre os detalhes do problema. Tudo o que a máquina faz é receber pares de dados (a entrada = informações pessoais e a saída = comportamento de crédito) e absorver quais informações esta relação contém. A máquina treinada serve para avaliar novos postulantes. Este tipo de procedimento, permite que a automação galgue um novo patamar além dos que usualmente conhecemos. Ele não se aplica apenas a computadores que fazem tarefas repetitivas, ele automatiza o verdadeiro problema de desenhar o sistema que fará tais tarefas.

Podemos, em princípio, aplicar a metodologia de machine learning para uma gama larga de problemas. Se, entretanto, os pares entrada-saída deixam de ter alguma informação essencial, a máquina pode falhar em adquirir proeficiência. Afortunadamente, podemos acrescentar a informação que falta na forma de uma dica inteligente. As dicas usadas em machine learning variam desde observações simples até conhecimento sofisticado.

Em aplicações de visão computacional, por exemplo, no qual o objetivo é reconhecer objetos, existem muitas dicas do tipo "invariantes". (Por exemplo, um homem ou mulher terá sempre cabeça, 2 braços e 2 pernas). A dica pode ser de que o objeto permanece o mesmo quando ele troca de posição no campo visual, ou quando ele muda de tamanho. Em aplicações do mercado financeiro, existem muitas dicas monotônicas. Por exemplo, se a entrada consistentemente aponta em um sentido ou direção, a saída deve consistentemente mover-se nessa direção. Cada aplicação particular tem suas próprias dicas que podem ajudar o processo de aprendizado.

Em primeiro lugar, se alguém conhece o suficiente sobre um problema para poder dar dicas à máquina, que necessidade temos de machine learning? Por que não empregar este conhecimento para escrever um sistema especialista para essa tarefa? Em certas ocasiões, pode-se fazer isso, mas é verdade que é muito mais fácil falar sobre aspectos de um problema do que especificar um método sobre a sua solução de acordo com um jogo de regras bem .definido.

As aplicações variam entre os dois extremos: problemas estruturados que são totalmente definidos e que não requerem exemplos, e problemas randômicos que são completamente indefinidos e dependem inteiramente de treinamento através de exemplos para obterem soluções. Machine learning usando dicas inteligentes é a maneira de tratar todo o (vasto) meio de campo.

Paradigma de machine learning

Como as máquinas aprendem? Muitos modelos diferentes têm sido propostos. Tipicamente a implementação usada deverá ter uma estrutura geral muito próxima à do problema, mas deverão ter, também, muitos parâmetros livres, que poderiam ser encarados como os diais e botões de um rádio. Os valores destes parâmetros determinarão como a máquina vai funcionar em última instancia. Diferentes valores produzirão resultados completamente diferentes.

O comportamento da máquina pode ser visto matematicamente como uma função que associa valores de entrada (os específicos do problema a ser resolvido) com valores de saída correspondentes (as decisões ou ações a serem tomadas). O objetivo em machine learning é fazer a máquina emular a função objetivo, o mapeamento desejado entre entradas e saídas. Podemos usar exemplos de treinamento da função objetivo para guiar a seleção dos valores para os parâmetros livres da máquina. Com cada exemplo, a máquina refina seus valores internos, de tal modo que ela casa as entradas e as saídas apropriadamente. Quando a máquina encontra um conjunto de valores que corresponde tão perto quanto possível ao da função objetivo, ela efetivamente "aprendeu". O machine learning é simplesmente a pesquisa da melhor posição para os diais e botões. Já que a pesquisa é guiada por exemplos de treinamento, este paradigma é chamado, com razão, aprendizado através de exemplos.

A forma mais largamente utilizada para machine learning é as chamadas redes neurais. Tais redes foram inspiradas no poder dos sistemas neurobiológicos. Eles consistem de muitos elementos computacionais interconectados de tal maneira que a saída de cada elemento influi na entrada de todos os demais. Os parâmetros ajustáveis de uma rede neural são chamados pesos sinápticos baseados na sua contrapartida biológica, as sinapses que conectam as células nervosas no cérebro. A flexibilidade das redes neurais e a simplicidade do seu treinamento têm feito delas o modelo para machine learning nos últimos 10 anos. Redes neurais agora encontram uso em um largo espectro de aplicações. Ainda que eletrônica especializada e mesmo redes óticas tenham sido construídas, em muitos casos a implementação de uma rede neural simples, é um programa rodando em um computador pessoal ou em uma workstation.

Com todo o treinamento requerido, nós podemos imaginar a necessidade de longas e tediosas sessões de treinamento, supervisionando o aprendizado da máquina. Afortunadamente, a responsabilidade de encontrar o ponto de ajustamento ótimo recai usualmente sobre o próprio algoritmo de aprendizado, um método que reduz o aprendizado a uma série de etapas repetitivas que o computador pode executar independentemente. Um dos sistemas de aprendizado mais comuns usados atualmente é o algoritmo de backpropagation para treinar redes neurais. Esta técnica foi popularizada primariamente por David Rumelhart enquanto estava na Universidade da Califórnia em San Diego.

Backpropagation usa cálculos simples para decidir quando trocar os parâmetros de uma rede neural. Ele toma um treinamento a partir de um exemplo, (a entrada e a correspondente saída) e faz pequenas modificações dentro da rede para minimizar a diferença entre a resposta real dada pela rede e aquela que era esperada. Essa etapa é repetida e repetida fazendo com que a rede aos poucos se aproxime do efeito desejado. Após passar por todos os exemplos diversas vezes, a rede pode replicar a função objetivo de maneira razoavelmente boa.

Deixe-nos mostrar como este trabalho poderia ocorrer no sistema de aprovação de limites creditícios. Um par entrada-saída poderia ser o conjunto de dados oferecidos pelo candidato a tomador (como idade, salário e estado civil) e seu eventual desempenho financeiro, bem como a resposta do banco (se o crédito foi ou não concedido). Uma rede neural treinada para dar limites, poderia idealmente predizer o comportamento do indivíduo apenas olhando para os dados providos por ele. Para aprender esta função, a rede teria que receber milhares de casos reais de pessoas que tomaram empréstimos, e isto permitiria à rede modificar seus parâmetros internos para aproximar suas previsões com os registros históricos.

Alguns dos parâmetros variáveis poderiam estar relacionados com salário e poderiam fazer a rede fornecer empréstimos a pessoas que ganham mais. Outros poderiam estar relacionados à idade ou o estado civil, favorecendo combinações particulares destes atributos. Eventualmente, a rede estaria pronta quando fornecesse as respostas corretas a muitos exemplos. Agora a rede pode ser usada para analisar pedidos "frescos" ( ' não exemplos, e sim reais) pela extrapolação de sua experiência para prever como os novos usuários se comportarão com o crédito cedido.

Aprendendo com dicas inteligentes

Sejam implementados em redes neurais ou em algum outro método, todos os processos de machine learning compartilham este mesmo paradigma de aprendizado por exemplos. Para que a máquina aprenda com sucesso, ela deve ser capaz de generalizar a partir dos exemplos limitados com os quais ela foi treinada. Será que os exemplos de treinamento fornecem suficiente informação para a máquina a fim de que ela possa estudar todos os novos casos? Talvez não. O fato da máquina ter sido bem treinada com os exemplos, não necessariamente implica que ela trabalhará igualmente bem em algum caso que ela nunca tenha visto.

Relembremos que a máquina não conhece nada sobre a função que ela está tentando aprender exceto o que ela pode ver nos dados de exemplo. Se os dados são deficientes - há muito poucos exemplos de treinamento, ou muita informação irrelevante contida dentro deles - a máquina talvez não possa generalizar apropriadamente. Ou os exemplos não vão cobrir todas as informações importantes. Suponha, por exemplo, que eu estou tentando treinar um computador em visão, para reconhecer árvores. Eu certamente não terei capacidade de especificar como reconhecer uma árvore em termos matemáticos exatos, então eu não posso estruturar o problema e dar à máquina regras rígidas a aplicar. Se eu simplesmente mostrar à máquina figuras de árvores e de objetos que não são árvores, eu estou dando tal informação, mas eu ainda não estou dizendo nada que eu saiba sobre o problema. Por exemplo, eu sei que uma árvore permanece uma árvore mesmo que ela seja deslocada no campo de visão da máquina, ou tenha seu tamanho aumentado ou diminuído. Pessoas fazem isso muito bem, mas as máquinas não, a menos que sejam especificamente instruídos a isso. Sem essas dicas, a máquina poderia precisar de um longo tempo, se é que isso seria possível, para encontrar tal espécie de "entendimento".

Mesmo uma simples dica pode incrementar em muito o aprendizado. Como no famoso jogo do adivinha, no qual as respostas a 10 ou 20 questões elementares podem reduzir significativamente a pesquisa, algumas poucas dicas podem fazer a diferença entre aprender a função e não aprendê-la completamente. Para tomar partido desta situação, introduzi um formalismo chamado "aprendendo com exemplos" seis anos atrás, e desde então ele tem se tornado uma feature de muitos sistemas de machine learning. O mais notável avanço
deste approach está em sistemas automáticos de comercialização em mercados financeiros e em sistemas para o reconhecimento de caracteres manuscritos.

O problema de cessão de crédito também pode se beneficiar de dicas inteligentes. Admite-se que é difícil definir o que define exatamente uma pessoa ser um "bom risco" ' mas uma dica é óbvia. Se duas pessoas são idênticas (nesse âmbito) exceto que uma ganha menos do que a outra, e a máquina aprova o crédito para a que ganha menos, ela também deveria aprová-lo para a que ganha mais. Esta é uma das multas possíveis dicas monotônicas (que crescem no mesmo sentido). Enquanto a máquina está aprendendo, deveria ser possível estabelecer os parâmetros livres da rede de tal maneira que os pares entrada-saída sejam satisfeitos, mas que igualmente o comportamento ditado pelas dicas o seja.

Uma aplicação de aprendizado que meus colegas e eu conduzimos no nosso Grupo de Sistemas de Aprendizado no Instituto de Tecnologia da Califórnia, é na área de mercados de câmbio mundiais. Nós executamos um experimento que prevê a taxas de câmbio do dólar em relação a quatro moedas estrangeiras. Procuramos testar se os resultados do sistema poderiam ser melhorados quando injetamos dicas ditadas pelo bom senso dentro do processo de aprendizagem. A dica usada refletia uma simetria que era óbvia para nós: se um dado padrão na história dos preços implica em certos movimentos (para cima ou para baixo) em dólares comparados com moedas estrangeiras, a moeda estrangeira deveria se mover da mesma maneira se tal padrão surgisse na sua própria história. Os resultados do experimento foram um sucesso. Nos quatro mercados a dica da simetria garantiu ao sistema um incremento consistente em seu desempenho.

Para assegurar que a melhoria no programa da rede neural foi obtido a partir das informações contidas na dica da simetria, nós rodamos o sistema com duas alternativas. A primeira foi uma dica não informativa, dando à máquina peças randômicas de informação desconexa. Para nossa satisfação, a máquina não melhorou. A performance foi similar a de quando não havia dica nenhuma. Depois, fornecemos dicas que davam à máquina informações deliberadamente errôneas. A performance deteriorou rapidamente, como podíamos esperar. A dica inteligente realmente ajudou.

Implementando as dicas

O principal desafio para usar dicas em machine learning está em automatizar o processo. Dicas aparecem em diversas formas, elas variam desde as mais sutis até as mais óbvias. Como orquestrar o aprendizado a
partir de muitas peças de informação passadas pelas tais dicas?

Primeiro, todas as representações de dicas devem ser padronizadas, para garantir que o algoritmo de aprendizagem possa trabalhar com todas elas no mesmo ritmo. A chave para conseguir tal intento vem da própria representação da função objetivo: os pares de entrada-saída servidos como exemplos. Devemos dizer para à máquina: quando eu entrar tal e tal coisa, você deve responder com qual e qual resposta. A identidade de exemplos de entrada-saída distingue completamente uma função objetivo de outra. Similarmente, se pudermos representar cada uma das dicas desejadas através de um conjunto de exemplos, não teremos nenhum problema com o tipo de dica que pretendemos introduzir.

Para representar a dica da monoticidade na aprovação de crédito, o exemplo deveria tomar a forma de duas pessoas com idênticos dados, exceto o salário. Quando os dois são apresentados à máquina, sua resposta poderia concordar com a dica (aprovando os dois, rejeitando os dois, ou aprovando apenas o crédito para o maior salário), ou poderia discordar da dica (aprovando apenas o de menor salário). O algoritmo de aprendizado deve ajustar os parâmetros da máquina para satisfazer a dica, exatamente como ele faria para incorporar mais um exemplo à sua função objetivo. Aprendizado a partir de dicas, desta maneira segue o mesmo caminho de outros mecanismos de aprendizagem.

O interessante é que os exemplos representando as dicas não precisam ser reais. Os dois solicitantes de empréstimo poderiam ser hipotéticos ou casos virtuais. A vantagem de usar exemplos virtuais é que eles não requerem que a máquina faça decisões corretas sobre uma pessoa real, mas que apenas ajam de maneira consistente com a dica. O princípio pode, também, aplicar-se à dica simétrica no sistema de câmbio, exemplos virtuais podem ser construídos a partir de padrões de preços que nunca ocorreram na história. Para a tarefa de reconhecer padrões visuais, podemos representar dicas de invariância usando desenhos de objetos que não têm nada a ver com a função objetivo real. O treinamento para este caso não exige que a saída da máquina seja boa ou ruim, apenas que permaneça consistente com a entrada devidamente transladada ou com tamanho aumentado ou diminuído.

Exemplos virtuais são extremamente importantes em muitas aplicações porque eles podem adicionar informação importante completando lacunas que os exemplos reais não podem fornecer. No sistema de câmbio, por exemplo, os dados reais são limitados a um pequeno conjunto de padrões de preços recentes. A capacidade de suplementar os padrões históricos com dados adicionais é o grande valor. A única preocupação que resta agora, é encontrar uma função de aprendizagem que consiga fazer o correto balanço entre as dicas e os dados reais.

O balanceamento

O algoritmo de aprendizagem deve ser capaz de ajustar os parâmetros da máquina para concordar inteiramente com os dados de entrada e com todos os exemplos de cada dica. Mas uma solução perfeita normalmente é impossível, então algum tipo de compromisso deve ser encontrado. Para encontrar este objetivo, a máquina precisa ser informada de quão próximo chegou a ele em cada etapa. Durante o processo de treinamento algumas dicas podem ser aprendidas melhor do que outras. Mas, se o computador conseguir informar qual dica foi efetivamente aprendida, ele pode prestar mais atenção a ela na próxima iteração. Este é o conceito chamado Minimização Adaptativa que eu desenvolvi para gerenciar diferentes dicas de forma a encontrar um equilíbrio entre elas e os exemplos reais.

O algoritmo de minimização adaptativa é "adaptativo" no sentido de que ele constantemente avalia quão bem a máquina está satisfazendo a ambos: as dicas e os dados reais, e continuadamente atualiza seus parâmetros. O termo "minimização" reflete que o algoritmo está tentando todo o tempo minimizar a medida quantitativa do erro entre as ações da máquina e o comportamento esperado para ela.

Ainda que eu tenha começado o trabalho nesta área com multas das idéias básicas na cabeça, eu tenho que admitir que minha primeira descoberta veio da necessidade, ao invés de vir na forma de "estalo". Eu tinha sido convidado a apresentar o esquema de dicas em um encontro de cientistas da computação, e apenas um dia antes da apresentação, eu fui avisado que teria 10 minutos a mais, além do tempo anteriormente acordado. O pensamento de ter meus assistentes embaraçados com uma sessão menor do que a prevista, fez com que eu passasse toda a noite anterior vendo como eu poderia expandir o algoritmo objeto de minha apresentação. Pela manhã, a idéia da minimização adaptativa chegou até mim, e no dia seguinte eu consegui fazer uma bela apresentação, muito bem recebida. Eu duvido que a minha audiência soubesse quão recentes eram aqueles resultados.

Impedimentos à aprendizagem

Ainda há muitos problemas que sobram na questão de aprendizado de máquinas. Talvez a falha mais grave seja a tendência das máquinas de "sobreaprender" a partir dos exemplos do treinamento, alguns deles podendo comprometer a habilidade da função objetivo trabalhar corretamente. "Sobreaprendizado" ocorre quando a máquina memoriza os exemplos de treinamento ao preço da generalização. Você poderia encontrar uma situação similar (e irônica) se viajar ao Egito e pegar um tour para ver as Pirâmides. Alguns guias locais darão uma elaborada narrativa para o tour, em inglês, e podem responder questões comuns a respeito dos faraós de maneira perfeita. Se você, encorajado por esse desempenho, resolver perguntar outras coisas, ficará surpreso ao ver que eles não falam inglês. Eles memorizaram as sentenças necessárias para o tour mas não generalizaram o aprendizado. Máquinas podem sofrer o mesmo fenômeno.

Outro problema comum em sistemas complexos de machine learning é o tempo excessivo de computação. Como o algoritmo de treinamento pesquisa o valor ótimo para parâmetros livres (chamado ótimo global), ele multas vezes obtém uma configuração pobre (chamada ótimo local), que é melhor que soluções similares, mas não é a melhor teoricamente possível. Não existe uma maneira eficiente para encontrar ótimos globais de forma genérica. Foi demonstrado que algumas tarefas de aprendizado são NP-completas, um termo técnico que caracteriza uma classe de problemas computacionais que requerem tempos imensos de processamento para encontrar ótimos globais. Na prática, entretanto, a solução não costuma sofrer. Uma performance satisfatória requer apenas que a máquina encontre um bom ótimo local.

A despeito da existência de tais dificuldades, a machine learning provou ser uma ferramenta importante na solução de uma larga classe de problemas do mundo real. Era um ponto clássico de pesquisa muitas décadas atrás, mas ele tem sido reinventado e expandido em anos recentes. Com a adição da aprendizagem via dicas e outros avanços técnicos que estão vindo, a machine learning certamente ainda estará muito presente nos dias que nos resta viver.