Geleia de Menta

Blog/newsletter sobre tecnologia com perspectiva humana

Breve Pratica Sobre Aprendizado De Maquina

Última atualização em:

Contents

Pequena obs inicial: este texto aqui é na realidade uma grande nota de rodapé do que foi publicado na newsletter Distopia algoritmica parte 3: O problema do aprendizado. E absolutamente tudo aqui se refere apenas a este gráfico:

Este é um esquema para explicar graficamente o que acabei de explicar verbalmente: do lado esquerdo temos um gráfico que mostra os dados usados no treinamento distribuidos num plano cartesiano (2 dimensões: eixos X e Y), ao centro temos a fórmula do Perceptron de Rosenblat (sum(w*x)) com setas que indicam que o 'x' na fórmula indica o que temos, ou seja, os dados, e o 'w' é o que a gente tem de buscar, como nesse caso temos dados em 2 dimensões, temos um horizonte de busca projetado da seguinte

Gráfico mostrado na edição da newsletter.

O assunto em questão é como o aprendizado de máquina se trata na verdade de uma busca por um ponto mínimo ou máximo (mínimo erro ou máximo acerto por exemplo). Também era sobre a “geografia” que resultava da representação espacial dos dados com o erro, que aqui tem o sentido dado pela estatística, indicando a distância entre o ideal e o que se tem. Embora esta imagem acima esteja bem carregada de informações, o que ela indica é exatamente o que acabei de escrever. Usei o Perceptron, aquele mesmo de Rosenblatt que o NY Times falou que seria capaz de ter consciência de si mesmo (citei e falei dessa coisa toda da ficção aqui), usei ele por ser extremamente simples, basicamente uma generalização de uma função do 1º grau, aquela mesma que aprendemos no colégio durante a adolescência.

A fórmula base é essa: $\sum_i^n(w_i * x_i)$, se retirarmos o somatório, teremos exatamente uma função do 1º grau $f(x) = ax + b$, na verdade, onde o $a$ da função é o $w$ da fórmula do perceptron e o $x$ em ambos os casos significa a mesma coisa: o dado que a gente vai colocar na função. Ainda há esse $b$ mas explico mais à frente. Para facilitar a representação visual da coisa toda, gerei dados bidimensionais com o scikit-learn. Falar de dimensões me obriga a alguns esclarecimentos especialmente numa época de ascenção de tantos misticismos que distorcem conceitos científicos e filosóficos. Quando falo em dimensão falo de 1 eixo do plano cartesiano, então se medirmos diferentes coisas em frutas para criarmos um dataset para classificação de frutas, além de largura, altura e peso, poderíamos medir a grossura da casca, tamanho do caroço, grossura da polpa, e só nisso já teríamos 6 dimensões. Para simplificar resolvi apenas lidar com 2 dimensões nos dados pois assim seria possível visualizar melhor.

Mas voltando à fórmula, se $x$ é o que já temos, ou seja, o que está no dataset de treinamento, o $w$ é o que buscamos no treinamento, o que na realidade significa “mover” esses pontos do dataset para que a função de ativação, isto é, a função que realmente dará o resultado final, consiga dar a resposta esperada a partir dos dados de entrada. Sei que o mais natural e até mesmo didático é pensar em tudo de ajustando aos dados mas na realidade transformamos os dados para que se ajuste, por meio da função de ativação, ao que esperamos na saída. No caso usei a função sigmoide, apenas por causa dos limites dela, sendo entre 0 e 1, os valores dos pesos não seriam mostrados de forma tão distante no gráfico:

função sigmoide: $ \displaystyle \sigma = \frac{1}{1+e^{-x}} $

gráfico da função sigmoid

By Qef (talk) - Created from scratch with gnuplot, Public Domain, https://commons.wikimedia.org/w/index.php?curid=4310325

Então, atualizando o gráfico onde coloquei as anotações todas mas agora refazendo eles sem as anotações só para ficar mais fácil comparar isso da transformação dos dados:

Similar à primeira imagem deste texto, mas com uma linha a mais de gráficos mostrando a transformação dos dados

última linha adicionada: mantendo a relação aos mesmos pontos marcados na superfície de busca, a distribuição de cada ponto dos dados originais multiplicado pelos pesos pesos

olhando de perto o gráfico que mostra os dados originais e os dados transformados com os persos correspondentes a quando o erro é zero (ponto 5 marcado na superfície de busca).

olhando de perto o gráfico que mostra os dados originais e os dados transformados com os persos correspondentes a quando o erro é zero (ponto 5 marcado na superfície de busca).

Então, resumindo a coisa toda do treinamento:

um passo a passo esquematizado como uma linha do tempo: dados (entrada) -> a fórmula do perceptron definida como $b + \sum w*x $ (transformação dos dados) -> gráfico da função sigmoide (função de ativação) -> algum valor entre 0 e 1 (saída)

E agora só temos 2 detalhes a esclarecer: esse $b$ que coloquei na fórmula, e a métrica usada para medir o erro.

O $b$ na fórmula é chamado de bias, sim, viés em inglês, mas seguindo a mesma lógica que usamos antes, vemos aqui mais uma semelhança com uma função do 1º grau, mas se estamos aplicando aos dados com 2 dimensões, em vez de servir para mover apenas lateralmente como é na função, aqui ele move os dados na diagonal especificamente neste caso. isso é realmente muito importante considerando que o objetivo é adequar os dados à função de ativação.

E por fim temos o erro, aqui utilizei o MSE que é como é mais conhecido o Erro Quadrático Médio, ou EQM (não confundir com Experiência de Quase Morte), definido pela fórmula:

$\displaystyle \sum_{i}^{D}(x_i-y_i)^2$

Basicamente, se faz o somatório da subtração do resultado obtido pelo resultado esperado elevado ao quadrado (uma forma de escapar da possibilidade do valor ficar negativo).

E para quem quiser, o código usado nas visualizações está aqui

E se tiver vontade de conhecer outras funções usadas para calcular o erro e servir como função de ativação, recomendo ver as páginas de documentação de frameworks de deep learning, como a do pytorch e do tensorflow:


Se chegou até o final deste texto, espero que tenha gostado. Mas para continuar este projeto de divulgação crítica e política da ciência da computação e outros assuntos ligados à tecnologia sem todo o misticismo comum à publicidade, sua ajuda é muito importante. Faz um PIX 😊
pix copia e cola: 00020126430014BR.GOV.BCB.PIX0121geleiadementa@tuta.io5204000053039865802BR5925Lincoln de Macedo Santos 6009SAO PAULO61080540900062070503***630467FE