Logo do Venturus
  • 18 de dezembro de 2019
  • Inteligência Artificial

Machine Learning para Leigos

Nos últimos anos, seria preciso ser um eremita para não ter ouvido falar de conceitos estranhos, como Machine Learning (ML ou Aprendizado de Máquina, em português), Inteligência Artificial (IA, Artificial Intelligence ou AI em inglês) ou Deep Learning (ou Aprendizagem Profunda). Embora a maioria das pessoas tenha algum tipo de ideia sobre, pelo menos, a Inteligência Artificial, existem vários conceitos errados sobre o campo e suas capacidades atuais e sobre o futuro não apenas da IA, mas de como ela mudará as interações humanas.

Embora exista um interesse crescente na IA, aprendê-la não é, de forma alguma, uma tarefa fácil. Existem inúmeros recursos disponíveis on-line, mas muitos deles assumem que serão vistos por pessoas com experiência anterior em matemática e estatística ou são destinados a pesquisadores dispostos a aprender profundamente sobre formulações matemáticas. Os recursos para pessoas que querem apenas saber o que está acontecendo são escassos e vagos.

Dito isto, o objetivo deste documento é apresentar alguns conceitos básicos de IA e Machine Learning para pessoas com menos formação técnica. Ele não pretende ser outro guia de IA, com explicações detalhadas ou tutoriais para implementação. É minha convicção que, embora este documento não tenha profundidade, ele ainda será útil na introdução dos conceitos de Machine Learning para novas pessoas, sem uma montanha de detalhes técnicos.

O objetivo principal deste documento é aumentar a conscientização sobre o Machine Learning, permitindo que pessoas de diferentes origens se envolvam em discussões sobre possibilidades e ideias nesse campo. Isso também ajudaria pessoas a identificar as dores de outros e sugerir soluções de IA que não seriam visíveis de outra forma.

Inteligência Artificial

Em primeiro lugar, é importante distinguir Inteligência Artificial de outros termos populares, como Machine Learning e Deep Learning. Colocando de maneira muito simples, o Machine Learning é um subcampo da IA, da mesma forma que o Deep Learning é um subcampo do Machine Learning. Pode ficar mais claro na figura a seguir, roubada descaradamente da Internet:

Gráfico de aprendizado

Uma explicação tecnicamente mais correta seria que a Inteligência Artificial é o campo da Ciência da Computação que estuda maneiras de simular a inteligência humana. Ela possui vários subcampos, como Visão por Computador (Computer Vision em inglês), Processamento de Linguagem Natural (PLN, Natural Language Processing ou NLP em inglês) e Machine Learning.

Machine Learning é o subcampo da IA que visa automatizar o processo de tomada de decisão de uma máquina a partir de um conjunto de dados. Existem vários algoritmos para isso e eles podem ser classificados em:

  • Aprendizado supervisionado: algoritmos que fornecem às máquinas dados e seus rótulos esperados. Após o treinamento, o modelo deve ser capaz de classificar dados fora do conjunto de treinamento corretamente. Exemplos de algoritmos de aprendizado supervisionado são árvores de decisão, regressão linear, bayes ingênuos, máquinas de vetores de suporte e vizinhos K mais próximos;
  • Aprendizado não supervisionado: algoritmos em que se espera que a máquina detecte tendências nos dados sem nenhuma identificação prévia. Eles são úteis para identificar clusters (aglomerados) em dados. Alguns exemplos de algoritmos de aprendizado não supervisionado são meios K e análise de componentes principais;
  • Aprendizado por reforço: algoritmos que ensinam o modelo, dando reforços positivos para os resultados esperados e/ou reforços negativos para comportamentos indesejados. É semelhante a ensinar truques a um cão, de forma que ele aprende se espera receber recompensas;

Ilustração de aprendizado supervisionado e não-supervisionado.

Como mencionado anteriormente, o Deep Learning é um subcampo da ML. Uma definição técnica de Deep Learning é que se trata de uma rede neural composta por várias camadas, usada para obter melhores resultados — que, na maioria das vezes, é o mesmo que aprimorar a precisão da classificação de dados. O Deep Learning tornou-se mais popular nos últimos anos, devido ao aumento da disponibilidade de dados e ao maior poder de processamento dos computadores, especialmente graças à disponibilidade de processadores gráficos para usos mais gerais.

Machine Learning

Na seção anterior, foram introduzidos alguns conceitos básicos do Machine Learning. Nesta seção, apresentaremos outros conceitos relacionados ao desenvolvimento de uma solução alimentada por ML.

Em primeiro lugar, qual é o resultado de uma sessão de treinamento? É algo chamado modelo, uma API (Application Programming Interface ou Interface de Programação de Aplicativos) que pode ser consultada quanto ao resultado para o qual foi treinada. Dependendo do algoritmo usado, o modelo pode ser considerado um modelo de caixa preta ou modelo de caixa branca.

Um modelo de caixa branca pode ser facilmente analisado para determinar por que um determinado dado recebeu o seguinte resultado. Por exemplo, podemos verificar as condições de uma árvore de decisão ou a função linear resultante de uma regressão linear e concluir o motivo exato do resultado obtido.

Não é tão fácil quando o modelo é classificado como caixa preta. O resultado de uma rede neural ou de uma máquina vetorial de suporte é muito difícil de ser explicado. É, provavelmente, mais fácil apenas acreditar que os resultados estão corretos. Dito isto, os algoritmos de caixa preta tendem a ter um resultado muito bom se são frequentemente usados quando não é importante determinar o motivo da decisão.

Outro fator importante a considerar é o conjunto de dados usado para treinar e validar um modelo. Uma restrição comum é a disponibilidade dos dados, especialmente para algoritmos supervisionados, pois a interação humana é frequentemente necessária para anotar os resultados esperados. No entanto, para gerar um modelo preciso, geralmente é necessário fornecer uma boa quantidade de dados e os dados usados no treinamento não devem ser usados para testar a precisão de um modelo, como ele já os viu.

Equilibrar estes problemas pode ser uma preocupação desafiadora e a validação cruzada é usada para ajudar nesse processo. A validação cruzada consiste em separar os dados disponíveis em diferentes buckets (grupos) com tamanhos semelhantes e executar o treinamento e a validação várias vezes, usando um bucket diferente como o conjunto de validação em cada iteração. Portanto, o treinamento será executado com diferentes conjuntos de dados e vários resultados estarão disponíveis. A precisão final do modelo será a média dos resultados.

Tabela de treinamento de Machine Learning

Outra consideração importante em relação à precisão é: devo sempre alimentar meu modelo com mais dados, se eles estiverem disponíveis? Existem alguns conceitos importantes relacionados a esta questão. Primeiramente, uma vez que um modelo tenha sido treinado, dependendo do algoritmo usado para treiná-lo, ele não aceitará novos dados de treinamento. Em outras palavras, ele não aprenderá coisas novas.

Outro ponto é que treinar um modelo não é uma tarefa trivial. Às vezes, é necessário selecionar dados específicos do conjunto de dados que enfatizem alguns aspectos relevantes ao algoritmo, a fim de aumentar sua precisão. Dessa forma, é definitivamente possível que adicionar mais dados ao conjunto de treinamento apenas “confunda” o modelo, criando um resultado indesejável.

Finalmente, os modelos treinados com mais dados tendem a ser maiores e mais complexos. Embora possa não ser importante para aplicativos de uso geral, se o seu modelo for executado em um dispositivo móvel, a dimensão do modelo certamente pode se tornar um ponto de preocupação. Por exemplo, se você tiver um aplicativo que valide imagens tiradas de uma câmera de telefone celular, talvez não seja uma boa ideia ter um modelo excessivamente complexo, pois isso aumentaria o tamanho do aplicativo.

Em geral, há dois pontos principais ao treinar um modelo. É importante que o modelo seja capaz de ver dados suficientes para poder generalizar os dados importantes do problema. Quando o modelo não tiver visto dados suficientes, ele pode criar suposições errôneas sobre os dados, um problema chamado viés.

Por outro lado, o modelo não deve ser excessivamente específico sobre os detalhes dos dados que viu — em outras palavras, o modelo não deve memorizar os dados — e se tornar incapaz de prever os resultados de um conjunto diferente de dados. Quando um modelo se torna extremamente específico sobre o conjunto de dados usado para treiná-lo, dizemos que ele se tornou um modelo sobreajustado (ou overfitted).

Deep Learning

Como mencionado nas seções anteriores, nos últimos anos, a quantidade de dados disponíveis disparou, devido ao aumento da popularidade da Internet e da análise de dados. Além disso, os computadores são capazes de processar mais informações, com a disponibilidade de GPUs (Graphic Processing Units ou Unidades de Processamento Gráfico) para propósitos mais gerais. Especificamente, os procedimentos de treinamento do Machine Learning podem ser realizados em GPUs com maior velocidade.

Dadas essas circunstâncias, uma família de algoritmos em especial prosperou mais: redes neurais. No passado, algumas das desvantagens das redes neurais eram a grande quantidade de dados necessários para obter bons resultados e a baixa velocidade do treinamento. Os eventos recentes ajudaram a mitigar essas desvantagens, possibilitando o desenvolvimento de redes neurais com várias camadas, daí o nome Aprendizagem Profunda ou Deep Learning.

O Deep Learning em si não é uma técnica, mas uma rede neural com várias camadas. Mais interessante ainda, existem algumas especializações. Alguns deles tiveram resultados muito promissores: Redes Neurais Convolucionais (Convolutional Neural Networks ou CNNs) e Redes Adversas Generativas (Generative Adversarial Networks ou GANs).

Redes Neurais Convolucionais

Em primeiro lugar, o que esse nome sofisticado, Redes Neurais Convolucionais, significa? Uma rede neural é um algoritmo de aprendizado de máquina. Convolução é um nome muito técnico para uma “janela deslizante”, uma pequena janela que processa os dados que vê e gera um valor resumido. Nesse contexto, a parte “deslizante” refere-se ao fato de a janela ser, geralmente, muito menor do que os dados que vê e de que ela precisa passar por todos os dados em sequência.

Embora possa parecer uma novidade, os CCNs são usados há muito tempo para criar filtros de imagem. Em geral, os filtros de imagem são janelas que olham a vizinhança de um pixel da imagem e substituem o valor atual por um valor diferente, de acordo com o valor do pixel e de seus vizinhos.

No contexto do ML, a convolução é usada para enfatizar recursos específicos das imagens, como bordas ou formas específicas. De maneira semelhante aos filtros de imagem, a operação de convolução é usada para examinar os dados de um pixel e seus vizinhos e gerar um valor agregado que ainda representa significativamente os dados. Quando a operação estiver concluída, o resultado será uma imagem semelhante a original, mas com um contraste aprimorado em alguns recursos.

Não é incomum que uma rede neural tenha várias camadas convolucionais. Nesses casos, é comum que eles se cruzem com diferentes camadas para reduzir a dimensionalidade, melhorando os resultados gerais.

De acordo com as pistas que dei na explicação anterior, as CNNs são realmente úteis para aplicativos de imagem. As mais simples são usadas para rotular letras em um texto, enquanto as mais avançadas podem ser usadas para marcar pessoas em fotos em redes sociais ou para aplicar filtros de imagem em aplicativos sociais.

Rede neural computacional

Redes Adversas Generativas

Se uma única rede neural é capaz de obter resultados muito promissores, por que não combinar várias redes neurais para obter resultados ainda melhores? Essa é a premissa das Redes Adversas Generativas (Generative Adverse Networks ou GANs). Uma GAN consiste, basicamente, em um par de modelos, um tentando alcançar um resultado que seria considerado bom o suficiente para convencer um humano (o gerador) e outro que julga se um humano seria enganado por ele (o discriminador).

Uma maneira de ver esse conceito é como uma competição entre um falsificador e um detetive. O falsificador tenta enganar o oficial e aprende mais cada vez que é pego. Por outro lado, o detetive tenta detectar falsificações e aprende toda vez que é enganado. O resultado é uma IA capaz de gerar resultados realmente impressionantes.

As GANs são usadas, principalmente, quando é necessário gerar dados com base em outros tipos de dados. Por exemplo, é possível gerar imagens de animais com base apenas em descrições. Outros resultados impressionantes são fotos de pessoas que não existem, mas parecem indistinguíveis das pessoas reais à primeira vista.

Algumas das desvantagens das GANs são que elas são dolorosamente lentas e notoriamente difíceis de treinar. É necessário equilibrar a habilidade do gerador e do discriminador durante o processo de treinamento. Um gerador que seja bom demais seria capaz de explorar as fraquezas do discriminador, tornando impossível para o discriminador aprender o que esperar. Da mesma forma, um discriminador qualificado teria níveis de confiança extremamente bons em suas decisões, impossibilitando o gerador de encontrar os caminhos que poderia seguir para melhorar.

Desafios

Embora seja inegável que o campo da IA alcançou resultados muito impressionantes nos últimos anos, ele não atingiu, de forma alguma, o seu pico. Há vários desafios pela frente, não só do ponto de vista técnico, mas também do ponto de vista ético e legal.

Por exemplo, há um problema, conhecido há muito tempo, relacionado aos aplicativos ML para reconhecimento de imagem. Geralmente, os conjuntos de dados de imagens tendem a não ter nenhum tipo de ruído. Portanto, não deve surpreender que os modelos tendam a rotular dados ruidosos de forma incorreta. No entanto, considerando que, em muitos casos, os dados ruidosos são muito semelhantes a uma imagem pura, os resultados parecem decepcionantes, especialmente do ponto de vista leigo.

Outra preocupação com dados ruidosos é que modelos mais modernos ainda não conseguem generalizar dados de maneira consistente. Em um estudo recente, pesquisadores americanos analisaram os resultados de um popular conjunto de dados de imagens naturais. Ao descartar as imagens que a maioria dos modelos poderia prever com sucesso de antemão e deixar apenas as que não eram previstas com confiabilidade, eles descobriram que pequenos obstáculos, como variação climática, diferenças de textura ou até fotos tiradas em ângulos diferentes, eram suficientes para impedir a identificação correta.

Identificação de insetos

Esse problema também pode ser estendido para um caso mais geral. A maioria dos modelos é treinada considerando apenas o caminho feliz, em que apenas dados apropriados são usados para treinar e validar o modelo. Esses modelos podem se comportar de maneira imprevisível se forem alimentados com dados corrompidos e os resultados podem ser erros ultrajantes. À medida que os aplicativos ML se tornam mais disponíveis aos usuários finais, deve haver mais preocupações com a segurança dos modelos.

Um exemplo bastante recente dessa preocupação é o Tay , um bot do Twitter desenvolvido pela Microsoft. Ele estava disponível para o público em geral e poderia se adaptar, na tentativa de poder dialogar de uma maneira mais significativa. No entanto, no final do primeiro dia, havia publicado várias mensagens racistas, devido à falta de cuidados durante o período de treinamento e às explorações dos usuários finais.

Em suma, embora o ML tenha alcançado muitos resultados surpreendentes recentemente, não é, de forma alguma, um problema completamente resolvido. Ainda existem muitas áreas diferentes de aprimoramento, relacionadas não apenas à correção do modelo, mas também a requisitos não óbvios à primeira vista, como segurança.

Outra área de preocupação está relacionada a aplicativos desenvolvidos com ML. Os resultados impressionantes no campo de geração de imagens tornam difícil distinguir imagens e vídeos reais daqueles gerados com ML. Isso introduziu o problema dos deepfakes, em que os rostos das pessoas são substituídos em fotos e vídeos.

Inicialmente, isso não deve ser um problema generalizado, pois a criação desse tipo de mídia exige algum conhecimento no campo, tempo e dinheiro. No entanto, com a popularização da área e a criação de aplicativos de suporte para isso, como FSGAN e Zao — que esteve envolvido em uma polêmica sobre seus termos de uso —, ficou claro que o deepfake se tornará uma questão proeminente no futuro próximo.

Por fim, em alguns aplicativos, será ser importante poder explicar como uma decisão foi tomada. Por exemplo, se um banco se recusar a conceder um empréstimo, ele deve ter um bom raciocínio para a decisão e deve ser possível auditar essa motivação. Isso nem sempre é possível, dependendo do algoritmo usado para treinar um modelo.

Recentemente, esse direito de explicação se tornou mais importante ainda, devido ao Regulamento Geral de Proteção de Dados da União Europeia, que afirma que “[o titular dos dados deve ter] o direito … para obter uma explicação da decisão tomada”. Embora essa decisão tenha entrado em vigor em 2018, os impactos na área ainda não são claros.

Esses pontos deixam claro que, embora o ML seja um poderoso facilitador para uma infinidade de aplicativos, ele deve ser regulamentado até certo ponto. Devido à novidade de muitas das aplicações e aos resultados impressionantes obtidos com elas, o público em geral pode não ter conhecimento de possível uso indevido de informações, no sentido de privacidade ou manipulação em potencial.