Você já se perguntou como nosso cérebro interpreta a luz para que possamos identificar cores, formatos, ou mesmo quem é seu pai, sua irmã e aquela pessoa no espelho? É óbvio que seria muito legal poder entender e ensinar esta habilidade para as máquinas, não é mesmo? E para fazer isso, como sempre, usamos conceitos matemáticos.
Este é o meu cachorro, Teorema, dê uma boa olhada nele:
Então analise estes outros animais:
Agora me diga qual (apenas um) destes animais mais se parece com o Teorema? Imagino que você tenha escolhido o animal da primeira imagem ou da última. Você consegue dizer EXATAMENTE o que nestas imagens levou você a concluir isso? Pense um pouco enquanto vê uma imagem relaxante:
Ok, talvez não tenha sido tão simples entender quais informações são transmitidas para nossos olhos e depois para nosso cérebro que nos fazem chegar a conclusão sobre as similaridades do conteúdo das imagens. Você pode ter pensado em algumas coisas como a cor do pêlo, a cor do focinho, o formato das orelhas, a distância entre os olhos, o comprimento das orelhas, o tamanho do corpo e por aí vai.
Todas essas informações são díficeis de analisar e nosso cérebro faz isso muito rápido. Problemas como esse, de análise de imagem, são estudados hoje em dia com o auxílio de redes neurais de convolução (Convolution Neural Networks) e são extrememante importantes em aplicações e pesquisas pelo mundo todo, mas não é sobre isso que vamos falar neste texto. Vamos abordar este assunto em sua forma mais primitiva, usando as definições de similaridade usadas na matemática para encontrar quais objetos são mais parecidos com outros.
Similaridade
Para determinar a similaridade entre dois objetos são necessárias informações numéricas sobre as características destes objetos. Na época das eleições escrevi um texto que utilizava dados sobre alguns políticos fictícios, vamos usar os mesmos dados:
Temos os candidatos A, B, C e D e quantidades entre zero e um para duas de suas características: Honestidade (Hon) e Experiência (Exp). Supomos o seguinte: inicialmente iríamos votar no candidato X que, por algum motivo, não pôde se candidatar e suas características são Honestidade = 0.4 e Experiência = 0.2. Talvez não pareça uma boa escolha, mas quem sabe ele seja um conhecido e você conhece o potencial dele (ou qualquer outro motivo que faria você votar em alguém).
Bom, a questão agora é que sem esse candidato disponível a ideia é determinar qual dos restantes mais se parece com X. Desta forma estaríamos escolhendo um candidato com projetos, ideias e princípios similares aos de X. Então queremos responder: entre A, B, C e D qual é o mais similar a X?
Para responder a isso vamos nos voltar para as características. Já que possuímos apenas duas, é fácil analisar. Podemos fazer um gráfico em que um eixo tem a Honestidade e outro a Experiência:
Note que cada candidato está representado por um ponto neste espaço (o quadrado de 1 x 1) que chamamos de Espaço de Características (Features Space). A similaridade é um conceito muito parecido com distância no Espaço de Características, algumas vezes é exatamente igual. Podemos então afirmar que aquele ponto (um entre A, B, C e D) que estiver mais próximo do ponto azul (candidato X) é o mais similar ao mesmo. Simples, não? Basta pegar uma régua e medir.
Não tão simples. Acontece que não há apenas uma maneira de medir distância. Estranhou? Fique calmo, vamos entender.
Para simbolizar a similaridade ou distância entre dois candidatos usaremos uma simbologia, d(candidato1,candidato2), por exemplo, a distância entre os candidatos X e A é d(X,A). Essa função matemática que mede distâncias é chamada de métrica e possui algumas propriedades:
- d(A,B) = d(B,A) – a distância entre A e B é a mesma entre B e A;
- d(A,B) > 0, se A ≠ B – a distância não pode ser negativa e se A e B são pontos diferentes a esta é sempre maior que zero;
- d(A,A) = 0 – a distância entre um ponto e ele mesmo é zero;
- d(AC) ≤ d(A,B)+d(B,C) – se temos os pontos A, B e C a distância entre A e C sempre será menor ou igual a distância entre A e B somada a distância entre B e C.
A última propriedade pode parecer estranha. Para entender, podemos usar como pontos os três vértices de um triângulo retângulo como o da figura abaixo:
A hipotenusa vale cinco e é menor que a soma dos catetos, 7. Você pode testar com qualquer triângulo, isso sempre será verdade. Se isso tudo lembrou você do teorema de Pitágoras, está no caminho.
Similaridade como distância euclidiana
A distância euclidiana é a famosa linha reta entre dois pontos, em um plano (2 dimensões). Como temos aqui, ela é dada pelo famoso teorema de pitágoras, a2=b2+c2. Daqui em diante vamos usar o símbolo HXY significando a diferença de valor de honestidade entre os candidatos X e Y, e de modo semelhante EXY será a diferença de valor de experiência entre os mesmos. Então,
Como exemplo vamos calcular d(X,A):
HXA = 1.0 – 0.4 = 0.6;
EXA = 0.5 – 0.2 = 0.3;
Esse valor é o mesmo que o comprimento da linha reta entre X e A. Se desenharmos um círculo com o ponto X no centro d(X,A) seria o raio do círculo. Fazendo o mesmo com os outros pontos, chegamos no seguinte gráfico:
Esta é a maneira mais intuitiva de medir distâncias. É o que utilizamos mais no dia-a-dia. Assim vemos que há um empate, d(X,A) = d(X,B). Vamos discutir esse resultado no final do texto.
Similaridade como Cityblock
A distância Cityblock possui outros nomes como distância L1, métrica do táxi e distância de Manhattan. Ela é bem simples de entender. Repare que na figura anterior há pequenos quadrados, com lados 0.2 x 0.2 cada. Agora, imagine que cada quadrado compõe um quarteirão em uma cidade e as linhas que formam os quadrados são as ruas. Se quisermos andar de X até A não podemos seguir a linha calculada com a distância euclidiana. Precisamos seguir pelas ruas, por isso se chama a métrica do táxi. Então para calcular d(X,A) usamos:
Ou seja, andamos 0.6 unidades no eixo Honestidade e mais 0.3 unidades no eixo Experiência. Um gráfico para esta distância seria do tipo:
Obs: note que a hipotenusa (distância em linha reta) 0.67 é menor que a soma dos catetos, 0.9, obedecendo a propriedade 4.
Similaridade como cosseno
Esta noção de similaridade é menos intuitiva, pois usa o conceito de vetores e o ângulo entre os mesmos. Vamos lá, imagine que um vetor (uma flecha) sai da origem do sistema de coordenadas (Honestidade = 0 e Experiência = 0, chamaremos de ponto O) e termina no ponto X. Este vetor é usado para localizar o ponto no nosso espaço de características. Não é diferente de simplesmente dizer que X possui H = 0.4 e E = 0.2, é apenas outra maneira de ver isso. Se fizermos o mesmo para todos os pontos teremos um gráfico como este:
A similaridade entre dois pontos é calculada então da seguinte maneira (não se assuste, vou explicar):
Se soubermos qual é o ângulo entre os vetores X e A, podemos usar uma calculadora simples e calcular a similaridade. Podemos ver pela imagem acima que os vetores de X e A estão sobre a mesma linha reta, logo o ângulo entre eles é zero graus e sua similaridade é cos(0) = 1. Já para a similaridade entre X e B não sabemos o ângulo e precisamos usar a equação acima. O numerador (a parte de cima da divisão) significa multiplicar os valores de Honestidade de X e B e somar com a multiplicação dos valores de Experiência de X e B (se não lembrar os valores olhe lá na tabela rapidinho), resultando em:
No denominador (a parte de baixo da divisão) o símbolo ||X|| é o mesmo que a distância euclidiana (lá da primeira similaridade) da origem até X, d(O,X), isto é simplesmente o comprimento da flecha. Calculamos assim d(O,X) e d(O,B)
e finalmente temos a similaridade entre X e B (sem arredondar os valores acima):
Agora podemos até calcular o ângulo entre eles se quisermos: θ = cos-1(0.93) = 21.57 graus.
Conclusão
Bom, chega de papo. O que tiramos disso tudo? É melhor reunir todos os cálculos em uma tabela que resume todas as contas:
Vamos lembrar que o nosso objetivo é determinar qual entre os quatro candidatos é o mais similar ao X e a partir disso calculamos a similaridade de três maneiras diferentes: distância euclidiana, distância cityblock e cosseno. Para as duas primeiras – distância – procuramos o menor valor na tabela e, para o cosseno, procuramos o maior valor (podemos entender isso como distância se fizermos 1-cosseno).
Assim, verificamos que… estamos confusos. Com cosseno temos que A é o escolhido, com distância cityblock é C e com distância euclidiana há um empate entre A e B.
Então você chegou até aqui para eu dizer que não tenho uma escolha correta para indicar. O objetivo deste texto é mostrar mais uma vez como a matemática está em tudo ao seu redor. Mesmo um conceito tão simples “o que é mais parecido?” pode ser tratado matematicamente e necessita de trabalho para entender qual é a medida de similaridade mais adequada, como é o caso das imagens de cachorros vistas lá no início. Isso mostra também o quanto nosso cérebro é poderoso. Desde que nascemos já começamos a identificar similaridades através dos sentidos.
A visão talvez seja nossa principal ferramenta de obtenção de informação do mundo externo e por conta disso que o estudo das redes neurais de convolução iniciou com a ideia de modelar o funcionamento da nossa visão. Assim, hoje, além de olhos, nós estamos dando às máquinas a capacidade de interpretar sua visão.
Espero que tenha gostado, um abraço e um beijo :)