Machine Learning - A matemática da aprendizagem supervisionada

Machine Learning – a matemática da aprendizagem supervisionada

Não é preciso ser um gênio para aprender a criar modelos de Machine Learning, muito embora seja necessário ao menos compreender alguns dos conceitos matemáticos que fundamentam este fantástico subcampo da inteligência artificial. Sendo, neste caso, a teoria tão importante quanto a prática, ao final deste post você terá obtido vários insights sobre a matemática da aprendizagem supervisionada, o método de aprendizagem de máquina mais utilizado hoje em dia.

O Machine Learning (Aprendizado de Máquina) é um dos assuntos mais quentes do momento e, por tal motivo, é quase certo que você já tenha ouvido falar neste termo. Convenhamos, não é por acaso. Peixes grandes como a Microsoft, Google, Facebook, IBM, Oracle e Nvidia têm apostado alto nesta seara, investindo quantias generosas em P&D com o objetivo de proporcionar cada vez mais inovação e inteligência para seus principais produtos, os quais nós costumamos utilizar diariamente e que agilizam as nossas tarefas (no caso do Microsoft Word, Google Tradutor, Google Search). Além destes, há também várias outras empresas abraçando esta nova realidade, sendo que Embratel, Itaú e Danone estão entre elas.

O Machine Learning veio para ficar e está revolucionando mercados, tendo impulsionado muitos negócios ao permitir o desenvolvimento de produtos muito mais inteligentes e competitivos. Diante de tudo o que você já viu na internet até agora sobre este assunto, em algum momento já deve ter se perguntado sobre o que exatamente seria o Machine Learning e em quais princípios, ou algoritmos, isto se fundamenta. Vejamos.

De um modo geral, o ML é uma junção de matemática (álgebra linear, cálculo integral e derivadas, estatística, teoria da probabilidade, etc), software e dados (estruturados ou semi-estruturados). Esta combinação permite que as máquinas “aprendam” e desempenhem tarefas específicas sem serem explicitamente programadas para isto. Portanto, não estamos falando daquela abordagem determinística tradicional, normalmente baseada em regras, onde a máquina segue um “roteiro” que orienta todos os passos a serem seguidos sem a devida capacidade para lidar com imprevistos. O ML, pelo contrário, atua em um ambiente onde a incerteza é um conceito chave.

Ao ser exposto a uma certa quantidade de dados (dados de treino), o algoritmo de ML consegue identificar padrões e aprender com eles, gerando modelos capazes de obter generalizações (predição) em dados completamente novos. Atualmente, as três formas de aprendizado de máquina mais utilizadas são:

  • Supervisionada – normalmente usado em tarefas de classificação, onde os dados de treino são totalmente rotulados (a saída desejada é conhecida) e orientam o aprendizado da máquina. É como se um professor estivesse presente o tempo inteiro durante a fase de aprendizado. É o método de aprendizagem mais utilizado hoje em dia;
  • Semi-supervisionada – apenas parte dos dados possui rótulos e o restante não possui uma saída conhecida. Neste caso, o algoritmo baseia-se nos dados rotulados para formar agrupamentos daqueles que não foram rotulados, normalmente agrupando aquelas informações que possuem alguma similaridade entre elas;
  • Não supervisionada – frequentemente utiliza-se este método de aprendizado em análises exploratórias, onde o algoritmo não conhece a saída dos dados e precisa identificar estruturas, regularidades e relacionamentos nos dados para, então, apresentar uma saída.

A aprendizagem supervisionada é, de longe, a mais comum, onde a relação entre a entrada e a saída (f(x) = y) dos dados de treino já é conhecida e o algoritmo não precisa tentar encontrar esta relação sozinho.

MAchine Learning - aprendizagem Supervisionada

Para que a aprendizagem supervisionada possa gerar modelos capazes de fazer boas predições, é preciso tomar alguns cuidados, tais como ter dados representativos no domínio da tarefa e escolher o algoritmo mais adequado para cada situação. Para que isto seja possível, é necessário que você conheça estes algoritmos e saiba quando usar cada um deles (ou quando não usar). Mas, que algoritmos são esses? Já é o momento de apresentá-los:

A Matemática da Aprendizagem Supervisionada

k-Nearest Neighbors

Frequentemente aplicado em reconhecimento de padrões e mineração de dados, este é um dos mais básicos no leque de ferramentas de um Engenheiro de Machine Learning. O k-Nearest-Neighbor (K vizinhos mais próximos) é muito adotado em problemas de classificação e regressão. Ele recebe apenas um parâmetro, que é o número de vizinhos k (um número inteiro e positivo). Sendo um dos algoritmos mais simples, a construção do modelo limita-se ao armazenamento do conjunto de dados de treino. A predição em cima de novos dados é feita quando o KNN consegue encontrar os pontos de dados mais próximos a estes no conjunto de dados de exemplo.

Machine Learning - k-Nearest Neighbors

Na ilustração acima, os pontos em formato circular representam os dados de exemplo (ou de treino), ao passo em que os pontos em formato de x representam dados ainda não “vistos” pelo modelo. Dado um k inteiro positivo e uma observação x (como mostrado na figura), o classificador KNN primeiro identifica os k pontos no conjunto de treino que são mais próximos de x (na figura, k=1). Em seguida, o modelo estima a probabilidade condicional para uma classe j com base na fração dos pontos de dados de treino cujos valores de classe (o y da função) são iguais a j. Para compor a saída, o modelo aplica a regra de Bayes e classifica a observação de teste x com a classe que possuir a maior probabilidade de ser a correta (considerando as classes dos pontos na vizinhança). Trazendo isto para dentro de um contexto mais matemático, o KNN funciona assim:

MAchine Learning k-Nearest Neighbors Equation

Regressão Linear

A regressão linear é uma outra abordagem que está entre as mais simples. Foi desenvolvida no campo da estatística e é tratada como um modelo útil para entender o relacionamento entre valores numéricos de entrada e saída. O ML a “tomou emprestado” e, assim, a regressão linear se tornou uma das ferramentas mais úteis neste campo. Torna-se uma abordagem útil sempre que se deseja estimar uma resposta quantitativa, como o valor de um imóvel, em face de determinadas variáveis de entrada, tais como a quantidade de cômodos, latitude/longitude, renda per capita das pessoas, etc. Trata-se de um método largamente utilizado e é importante que você tenha um bom entendimento em torno dos princípios da regressão linear, antes de partir para metodologias de aprendizado mais complexas, as quais costumam ser vistas como generalizações ou extensões da mesma.

Resumidamente, o objetivo é estimar uma variável quantitativa Y com base em preditor(res) X e assume-se que haja um relacionamento linear entre X e Y. Matematicamente, nós podemos descrever a regressão linear assim:

Machine Learning Linear Regression Equation

Bo e B1 são coeficientes (também chamados de parâmetros) cujos valores não se conhece e serão estimados com base nos dados de treino.

Uma vez obtidos os valores aproximados destes parâmetros, seria possível, por exemplo, estimar um valor em vendas (Y) com base no quanto se está investindo em anúncios de Facebook (X). Isto ajuda a responder perguntas como: Qual plataforma de anúncios contribui mais para as vendas (qual variável de entrada afeta mais o valor da saída)? Evidentemente que se trata de uma estimativa a ser feita com base em um modelo gerado a partir de dados históricos (de treino) representativos. Um post interessante sobre regressão linear pode ser encontrado aqui.

Regressão Logística

A regressão logística é a análise de regressão utilizada quando a variável dependente é categórica, normalmente assumindo valores binários (como 0 ou 1). Ao ser utilizada em problemas de classificação, ela determina a probabilidade de ocorrência de uma classe específica com base nos valores das variáveis de entrada. Similar à regressão linear, a regressão logística torna-se um pouco diferente basicamente pelo uso da função que dá o nome a esta modelagem: função logística.

Considerando que o interesse aqui é obter a probabilidade de ocorrência de um determinado evento (classe), dadas as variáveis de entrada, os valores de saída deverão, assim, está contidos no intervalo [0,1]. Desta forma, para qualquer variável de entrada X, a função logística garantirá que a saída seja um valor compreendido entre 0 e 1.

Machine Learning Logistic Regression Equation

A função logística é representada pela seguinte curva:

Machine Learning Logistic Regression Curve

Eu recomendo o livro de James, Gareth (et al.), que traz uma ótima explicação sobre este assunto, e pode ser encontrado neste link.

Support Vector Machines (SVMs)

O SVM (Máquina de Vetores de Suporte) é um classificador que toma como entrada um conjunto de observações e estima, para cada valor dado, a classe à qual pertence este valor. O algoritmo consegue obter um hiperplano capaz de separar os dados em classes distintas. Pode ser usado tanto para classificar dados que sejam linearmente separáveis quanto aqueles que não são linearmente separáveis por um hiperplano. O SVM é essencialmente um classificador binário e linear, mas pode ser estendido para classificar dados em mais de duas classes e que não possam ser separados linearmente. Para isto, o SVM conta com uma técnica chamada Kernel Methods, a qual constitui-se numa ponte entre a linearidade e a não-linearidade. Um kernel é uma função que quantifica a similaridade entre duas observações. Exemplo de um kernel não linear, quando d > 1:

Machine Learning Support Vector Machines

A equação acima é conhecida como kernel polinomial de grau d, onde d é um número inteiro e positivo. Se d = 1, a equação torna-se linear. O kernel polinomial leva à presença de linhas curvadas no espaço de entradas:

Machine Learning SVM

Perceba que neste caso o ajuste da linha ao lados ocorre de uma maneira muito mais flexível (lado esquerdo). O livro de Hastie, Trevor et al explica este assunto em detalhes. Pode ser encontrado neste link.

Árvores de decisão e Random Forests

As árvores de decisão estão entre os modelos de ML mais populares. Apenas para citar um exemplo, o sensor de movimentos do Kinect (o famoso acessório do console Xbox, da Microsoft), utiliza um modelo classificador baseado em árvores de decisão. Trata-se de um conjunto de modelos em árvore chamado Random Forests. Lembre-se deste detalhe quanto estiver jogando Just Dance no Xbox One 😉.

Machine Learning Kinect

Os modelos em árvore são relativamente fáceis de interpretar e de treinar, podendo ser aplicados em uma larga variedade de tarefas. Entre estas tarefas estão: classificação, estimativa de probabilidade, regressão e clustering.

No contexto destes modelos em árvore, o Random Forests é um dos mais populares. Trata-se de um conjunto de múltiplas árvores de decisão que subdivide o espaço de entrada em regiões menores. Quando usado em tarefas de classificação, por exemplo, o random forest toma a estimativa (o voto) de cada árvore do conjunto para obter a classificação com base na maioria dos votos. A figura abaixo ilustra bem o funcionamento deste algoritmo.

Machine Learning Random Forest

Da próxima vez em que você ouvir alguém falar a frase “várias cabeças pensam melhor do que uma”, lembre de que o Random Forest baseia-se exatamente neste princípio.

Redes Neurais Artificiais

As redes neurais artificiais são algoritmos de Machine Learning que se baseiam no funcionamento do cérebro biológico e suas conexões sinápticas. Aliás, é por conta delas que cunhou-se o termo deep learning (aprendizagem profunda), o qual envolve o uso de redes neurais com várias camadas. Por muitos anos, o uso de RNAs se manteve inviável, dado que sempre exigiram tempo e capacidade computacional consideráveis. Mas este panorama mudou a partir do momento em que a computação paralela ganhou um novo impulso, graças ao surgimento de GPUs (Unidades de Processamento Gráfico) cada vez mais poderosas, ao mesmo tempo em que o custo de aquisição destes hardwares se tornou bem mais acessível. De fato, o poder de processamento paralelo oferecido pelas GPUs melhora significativamente a performance de treino de uma rede neural. Por tal motivo, estes dispositivos se tornaram essenciais para os processos de criação de inteligências artificiais e para o deep learning. Atualmente já existem serviços de Cloud Computing com GPUs dedicadas e especialmente dimensionados para tarefas de aprendizagem profunda, como o GPU Cloud Computing, da Nvidia, e o Amazon EC2 Elastic GPUs.

As RNA’s tornam-se bastante úteis a partir do momento em que passa a ser difícil resolver problemas com as abordagens mais tradicionais de aprendizado de máquina. Elas podem ser empregadas em tarefas como:

  • Classificação (Ex: imagens e textos)
  • Reconhecimento de padrões
  • Tarefas de predição
  • Análise de séries temporais
  • Processamento de sinais

Uma RNA é composta por neurônios artificiais interligados e organizados em camadas. Cada neurônio artificial é representado por uma função matemática que computa os pesos sinápticos (parâmetros) da rede. O ajuste destes parâmetros é feito automaticamente e em diversas iterações e determina o aprendizado da rede.

Machine Learning Neural Nets Biological Brain

A figura acima ilustra um modelo de neurônio artificial chamado Perceptron (lado direito), que é a base para as redes neurais multicamadas, comparando-o com um neurônio biológico (lado esquerdo). Os dendritos, que correspondem aos dados de entrada {x1, x2, …, xm}, também chamados de features, estão associados ao neurônio artificial por meio dos pesos sinápticos {w1, w2, …, wm}. Opcionalmente, um neurônio Perceptron pode ter uma entrada extra como sendo uma constante chamada bias, cujo valor (também chamado de valor de ativação) é sempre 1 e cujo peso associado é denotado por w0. O núcleo do corpo celular é representado por uma função somatória que combina as entradas do neurônio (eu prefiro chamar de combinador linear). Uma função de ativação, por sua vez, é aplicada ao resultado do somatório, gerando um valor de saída no axônio. A ideia central é extrair combinações lineares das entradas e, então, modelar a saída como uma função não linear. Para isto, costuma-se utilizar uma função de ativação não-linear, como a sigmóide, por exemplo. De fato, esta é uma das funções de ativação mais utilizadas – o nome “sigmóide” vem da forma em “S” do seu gráfico.

Machine Learning Neural Net Activation Sigmoid

É possível observar que a sigmóide possui um balanceamento entre um comportamento linear e não-linear, promovendo uma mudança gradual entre 0 e 1. Isto nos permite criar um algoritmo de aprendizado que se adapta aos poucos, reduzindo progressivamente os erros produzidos nas saídas dos neurônios artificiais.

De um modo geral, uma RNA multicamadas é o agrupamento de vários Perceptrons interligados, também chamado de Perceptron Multicamadas. Durante o treino, o algoritmo recebe um conjunto de dados como entrada (Xn), ajusta os pesos (Wm) e produz uma saída (Yk). Entretanto, normalmente a saída é acompanhada de um erro, que seria a diferença entre o valor alvo (valor de saída desejado) e a saída que foi produzida pela rede. O objetivo é promover tantas iterações quanto possível nos dados de treino até que este erro seja minimizado. Durante estas iterações, os pesos serão ajustados inúmeras vezes até que a rede seja capaz de generalizar com o mínimo de erro. Estes ajustes nos pesos ocorrem por meio da retropropagação do erro produzido na saída, na qual a rede o propaga pelo caminho inverso do fluxo (camada por camada), utilizando a derivada parcial com base no valor deste erro para promover o ajuste dos pesos até que tal erro se reduza ao mínimo possível.

O diagrama abaixo ilustra uma rede neural feed-foward (alimentada adiante) de duas camadas, sendo que uma delas é oculta.

Machine Learning Neural Net Feed Foward

Perceba que os pesos (parâmetros) são representados por ligações entre cada (neurônio) da rede. As setas verdes indicam o fluxo no qual ocorre o aprendizado. A seguinte função ilustra estes estágios:

Machine Learning Neural Net Feed Foward

É evidente, contudo, que esta é uma representação simplificada do processo de aprendizado de uma RNA, visto que o interesse aqui não é abordar este assunto de uma forma aprofundada. Por este motivo, eu recomendo que você veja o livro do Simon Haykin, o qual traz um estudo bastante abrangente das RNA’s.

As redes neurais possuem algumas variações, cada uma destinando-se à tarefas específicas. Entre estas variações, há duas que vêm recebendo bastante atenção:

  • Redes Neurais Recorrentes – muito utilizadas em tarefas relacionadas ao processamento de linguagem natural, como modelagem e marcação de sequências, reconhecimento de entidades, análise de sentimentos, reconhecimento de voz, tradução de textos, etc. Há um post muito bom que explica em detalhes sobre este tipo de rede neural, e pode ser encontrado neste link.

Machine Learning Neural Networks Named Entity Recognition

  • Redes Neurais Convolucionais – são muito utilizadas no campo de visão computacional, como classificação de imagens e reconhecimento de objetos em fotografias e vídeos. Entretanto, recentemente as ConvNets revelaram uma grande capacidade para processar linguagem natural, trazendo resultados bastante respeitáveis. Eu sugiro que você leia este paper, o qual ilustra bem esta capacidade das redes convolutivas para PLN.

Machine Learning Neural Networks Object Detection

As RNA’s entram em cena para nos ajudar a resolver problemas que normalmente parecem ser intratáveis. Problemas estes que envolvem não apenas uma complexidade maior, como também volumes de dados consideravelmente grandes. São algoritmos que estão em muita evidência agora, porque se mostraram capazes de resolver estes problemas, proporcionando resultados no estado-da-arte em diversas tarefas.

Atualmente, grandes produtos e serviços que fazem parte do nosso cotidiano e facilitam a nossa vida contam com tecnologias neurais. O Google Tradutor, por exemplo, já está na sua segunda geração, agora contando com modelos neurais capazes de compreender o contexto das sentenças e proporcionar traduções muito melhores. A Apple, por sua vez, está utilizando tecnologias baseadas em deep learning para tornar os seus produtos muito mais competitivos, como é o caso das versões mais recentes do IOS e do seu novo aparelho, que está para ser lançado, HomePod. O novo iPhone X, por exemplo, já conta com um chip neural.

Para concluir

O objetivo deste post foi trazer uma visão geral, não aprofundada, dos algoritmos de aprendizagem supervisionada mais frequentes em tarefas de Machine Learning. Embora eu tenha tentado limitar a apresentação de jargões matemáticos, é preciso entender que o Machine Learning é, por natureza, fundamentado nesta ciência. Por tal motivo, é importante que você compreenda estes fundamentos, caso queira atuar no mercado como um cientista de dados, um engenheiro de machine learning ou se apenas deseja incorporar o ML em seus produtos ou serviços. Por outro lado, para o usuário final, resta apenas usufruir dos benefícios proporcionados por esta ciência aparentemente “mágica”.

Bibliografia:

Para uma leitura mais aprofundada, eu recomendo a bibliografia abaixo.

Álgebra Linear com Aplicações – Anton, Howard

Deep Learning – Goodfellow, Ian

An Introduction to Statistical Learning: With Applications in R: 103 – James, Gareth

The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition – Hastie, Trevor et al.

Pattern Recognition and Machine Learning – Christopher M. Bishop

Like