Aprendizado de Métricas

Visão geral

Aprendizado de métricas (metric learning) é uma família de métodos que aprendem um espaço de representações vetoriais (embedding space) em que a distância corresponde à similaridade semântica. Em vez de prever diretamente um rótulo de classe, um modelo de aprendizado de métricas mapeia uma entrada (x) (uma imagem, um trecho de texto, um par usuário-item, um clipe de áudio) para um vetor (f_\theta(x) \in \mathbb{R}^d) tal que:

  • Itens semelhantes ficam próximos (pequena distância / alta similaridade)
  • Itens diferentes ficam distantes (grande distância / baixa similaridade)

Isso é útil sempre que você se importa mais com recuperação (retrieval), correspondência (matching), agrupamento (clustering), verificação (verification) ou raciocínio por vizinho mais próximo (nearest-neighbor reasoning) do que com classificação de rótulos fixos.

Resultados comuns do aprendizado de métricas incluem:

  • Um classificador de k-vizinhos mais próximos (k-NN) que funciona bem com representações vetoriais aprendidas (veja k-NN, Naive Bayes)
  • Busca eficiente em um banco de dados vetorial (vector database) (vizinhos mais próximos aproximados (approximate nearest neighbors))
  • Melhor agrupamento e visualização (relacionado a Agrupamento e Redução de Dimensionalidade)

Por que aprendizado de métricas?

O aprendizado supervisionado tradicional treina um modelo (p(y \mid x)) para prever rótulos. O aprendizado de métricas, em vez disso, treina (f_\theta(x)) para que a geometria codifique significado. Essa mudança é poderosa quando:

  • O número de classes é grande (ou cresce ao longo do tempo)
  • Você precisa recuperar itens “mais semelhantes”, não apenas classificar
  • Você precisa lidar com reconhecimento de conjunto aberto (open-set recognition) (novas identidades não vistas no treinamento)
  • Os rótulos são fracos ou vêm de relações par a par (pairwise relations) (igual/diferente, dados de clique, coocorrência)

Um exemplo concreto: verificação facial vs classificação facial

  • Classificação facial: “Qual destas 10.000 identidades conhecidas é este rosto?”
  • Verificação facial: “Estes dois rostos são da mesma pessoa?”

Verificação é naturalmente um problema de distância: aprender representações vetoriais em que pares da mesma pessoa tenham pequena distância e pares de pessoas diferentes tenham grande distância. Isso generaliza para novas pessoas sem retreinar a cabeça do classificador.

Formulação central

O aprendizado de métricas normalmente consiste em:

  1. Função de representação vetorial: uma rede neural (neural network) (ou modelo linear)
    [ z = f_\theta(x) ]

  2. Função de similaridade / distância:

    • Distância Euclidiana: (d(z_i, z_j) = \lVert z_i - z_j\rVert_2)
    • Similaridade do cosseno: (s(z_i, z_j) = \frac{z_i^\top z_j}{\lVert z_i\rVert \lVert z_j\rVert})
  3. Objetivo de treinamento que impõe:

    • (d(z_i, z_j)) pequeno para pares “positivos”
    • (d(z_i, z_k)) grande para pares “negativos”

Frequentemente as representações vetoriais são normalizadas em L2, de modo que a distância Euclidiana e a similaridade do cosseno se tornam intimamente relacionadas:

  • Se (\lVert z\rVert_2 = 1), então minimizar (\lVert z_i - z_j\rVert_2) é equivalente a maximizar a similaridade do cosseno.

O que “métrica” significa (e quando não significa)

Uma métrica matemática verdadeira satisfaz:

  • Não-negatividade, identidade dos indiscerníveis, simetria, desigualdade triangular

Na prática, muitos sistemas de “aprendizado de métricas” otimizam uma pontuação de similaridade que pode não satisfazer estritamente todos os axiomas de métrica (especialmente com funções de similaridade aprendidas). O termo persiste porque o objetivo ainda é aprender uma estrutura do tipo distância.

Aprendizado de métricas clássico (raso)

Antes do aprendizado profundo (deep learning), aprendizado de métricas frequentemente significava aprender uma distância de Mahalanobis (Mahalanobis distance):

[ d_M(x_i, x_j) = (x_i - x_j)^\top M (x_i - x_j) ] onde (M \succeq 0) (semidefinida positiva (positive semidefinite)).

Equivalentemente, se (M = L^\top L), então: [ d_M(x_i, x_j) = \lVert Lx_i - Lx_j\rVert_2^2 ] Assim, aprender (M) é como aprender uma representação linear (Lx).

Métodos clássicos notáveis incluem:

  • LMNN (Large Margin Nearest Neighbor): incentiva vizinhos da mesma classe a ficarem mais próximos do que pontos de classes diferentes por uma margem.
  • NCA (Neighborhood Components Analysis): otimiza diretamente a acurácia esperada de classificação por k-vizinhos mais próximos com uma distribuição suave de vizinhos.

Esses métodos ainda são úteis para alguns problemas tabulares, mas o aprendizado de métricas profundo domina para imagens, texto e dados multimodais.

Aprendizado de métricas profundo: arquiteturas

O aprendizado de métricas profundo usa uma espinha dorsal de rede neural (neural network backbone) (f_\theta) (rede neural convolucional (CNN), Transformador (Transformer), etc.) treinada com perdas baseadas em métricas.

Padrões arquiteturais comuns:

  • Redes siamesas (Siamese networks): duas torres idênticas (pesos compartilhados) processam um par ((x_i, x_j)) e computam uma similaridade/distância.
  • Redes de triplas (triplet networks): três torres (pesos compartilhados) processam amostras âncora, positiva e negativa.
  • Modelos de representação vetorial de torre única (single-tower embedding models): computam representações vetoriais para um lote e aplicam uma perda no nível do lote (comum em aprendizado contrastivo).

Isso se encaixa naturalmente com Redes Neurais e treinamento via Descida do Gradiente e Retropropagação.

Funções de perda (o coração do aprendizado de métricas)

Perda contrastiva (contrastive loss) (baseada em pares)

Dado pares ((x_i, x_j)) com rótulo (y=1) se semelhantes, (y=0) se diferentes:

[ \mathcal{L} = y \cdot d(z_i, z_j)^2

  • (1-y)\cdot \max(0, m - d(z_i, z_j))^2 ]
  • Aproxima positivos
  • Afasta negativos para além de uma margem (margin) (m)

Nota prática: A seleção de pares importa muito; pares aleatórios frequentemente são fáceis demais.

Perda de triplas (triplet loss) (âncora–positiva–negativa)

A perda de triplas impõe:

[ d(z_a, z_p) + m < d(z_a, z_n) ]

Uma forma comum: [ \mathcal{L} = \max\big(0, d(z_a,z_p) - d(z_a,z_n) + m\big) ]

  • (z_a): representação da âncora
  • (z_p): positiva (mesma classe / mesma identidade / relevante)
  • (z_n): negativa (diferente)

A perda de triplas é amplamente usada, mas pode ser ineficiente sem boa mineração (mining) (veja abaixo).

Perdas em lote N-pair / multiclasse

Perdas de pares/triplas podem ser pouco eficientes em termos de amostras. Objetivos baseados em lote usam mais negativos por âncora:

  • Perda de N pares (N-pair loss): um positivo por âncora, múltiplos negativos extraídos de outros exemplos no lote.
  • Perdas baseadas em representantes (proxies) (proxy-based losses): substituem muitos negativos por “representantes” de classe aprendidos (vetores representando classes), o que pode estabilizar o treinamento quando há muitas instâncias por classe.

Perdas de aprendizado de métricas no estilo softmax (softmax-style) (com “cara” de classificação)

Alguns dos modelos de representação vetorial modernos mais fortes usam representações normalizadas e cabeças de classificação lineares com uma margem angular:

  • ArcFace / CosFace / SphereFace (populares em reconhecimento facial)

Mesmo parecendo classificação, a geometria é explicitamente moldada para que as representações vetoriais se tornem discriminativas para correspondência baseada em distância.

Aprendizado contrastivo auto-supervisionado (self-supervised contrastive learning) (um primo próximo)

Métodos como SimCLR / MoCo / BYOL aprendem representações vetoriais sem rótulos usando vistas aumentadas (augmented views) como positivas e outras amostras como negativas (ou usando preditores (predictors)). Isso muitas vezes é considerado parte da família de aprendizado de métricas porque o objetivo é a estrutura de similaridade no espaço de representações vetoriais.

Isso é especialmente relevante quando pares rotulados são escassos, e frequentemente produz representações úteis para recuperação e agrupamento.

Amostragem e mineração: a diferença entre “funciona” e “não funciona”

O desempenho do aprendizado de métricas frequentemente depende de quais pares/triplas você usa no treinamento.

Por que amostragem ingênua falha

Em um conjunto de dados grande:

  • A maioria dos negativos aleatórios já está bem distante → perda perto de zero → sem sinal de aprendizado
  • Exemplos mais difíceis impulsionam o aprendizado, mas são raros

Estratégias comuns de mineração

  • Mineração de negativos difíceis (hard negative mining): escolher negativos que estão mais próximos da âncora (os mais difíceis).
    Risco: pode causar instabilidade no início do treinamento (o modelo pode escolher falsos negativos ou casos ruidosos).

  • Negativos semi-difíceis (semi-hard negatives): negativos que estão mais distantes do que os positivos, mas ainda dentro da margem.
    Frequentemente um bom padrão para perda de triplas.

  • Lote-todo (batch-all) / lote-difícil (batch-hard):

    • Lote-todo: usar todas as triplas válidas em um lote
    • Lote-difícil: para cada âncora, escolher o positivo mais difícil e o negativo mais difícil dentro do lote
  • Amostragem ponderada pela distância (distance-weighted sampling): amostrar negativos com base na distribuição de distâncias em espaços de alta dimensionalidade (resolve problemas de “concentração de medida (concentration of measure)”).

Regra prática: Se a perda de treinamento rapidamente vai para ~0, mas a qualidade de recuperação é ruim, você provavelmente tem um problema de “negativos fáceis”.

Exemplo prático: treinando perda de triplas em PyTorch

A seguir, um exemplo simplificado usando mineração lote-difícil. (Sistemas reais adicionam precisão mista, treinamento distribuído, melhor logging, etc.)

import torch
import torch.nn.functional as F

def pairwise_distances(z):
    # z: (B, D), assume L2-normalized
    # squared euclidean distances
    dot = z @ z.t()
    return 2.0 - 2.0 * dot  # because ||a-b||^2 = 2 - 2cos for normalized vectors

def batch_hard_triplet_loss(z, labels, margin=0.2):
    # z: (B, D) normalized embeddings
    # labels: (B,)
    B = z.size(0)
    dist = pairwise_distances(z)  # (B, B)

    labels = labels.view(-1, 1)
    is_pos = (labels == labels.t()).fill_diagonal_(False)
    is_neg = (labels != labels.t())

    # hardest positive for each anchor: max distance among positives
    pos_dist = dist.masked_fill(~is_pos, float("-inf"))
    hardest_pos, _ = pos_dist.max(dim=1)

    # hardest negative: min distance among negatives
    neg_dist = dist.masked_fill(~is_neg, float("inf"))
    hardest_neg, _ = neg_dist.min(dim=1)

    loss = F.relu(hardest_pos - hardest_neg + margin).mean()
    return loss

# Example step
model = ...  # outputs embeddings
x, y = next(iter(loader))
z = F.normalize(model(x), dim=1)
loss = batch_hard_triplet_loss(z, y)
loss.backward()

Pontos práticos-chave:

  • Normalize as representações vetoriais (F.normalize) a menos que você tenha um motivo para não fazê-lo.
  • Use tamanhos de lote suficientemente grandes (ou bancos de memória) para que cada âncora veja negativos significativos.
  • Acompanhe métricas de recuperação durante o treinamento, não apenas a perda.

Como o aprendizado de métricas é avaliado

O aprendizado de métricas geralmente é avaliado em tarefas de recuperação ou verificação.

Métricas de recuperação (qualidade de ranqueamento)

Dada uma consulta, ranqueie itens do banco por distância:

  • Recall@k: existe ao menos uma correspondência verdadeira no top k?
  • Precision@k: fração do top k que é relevante
  • mAP (precisão média — mean average precision): resumo da precisão ao longo das posições do ranque
  • NDCG: quando a relevância é graduada (relacionado a Aprendizado para Ranqueamento)

Métricas de verificação (correspondência binária)

Dado pares (igual/diferente):

  • Curva ROC (ROC curve), AUC (área sob a curva — area under the curve)
  • TAR@FAR (taxa de aceitação verdadeira a uma taxa fixa de aceitação falsa), comum em biometria

Qualidade de agrupamento

Se as representações vetoriais forem usadas para agrupamento (veja Agrupamento):

  • Índice Rand Ajustado (ARI)
  • Informação Mútua Normalizada (NMI)
  • Índice de silhueta (silhouette score) (com ressalvas em alta dimensionalidade)

Onde o aprendizado de métricas é usado (aplicações)

Recuperação de imagens e vídeos

Dada uma imagem de consulta, encontrar itens visual/semanticamente semelhantes:

  • Busca de produtos (“encontre sapatos semelhantes”)
  • Recuperação de marcos (landmarks)
  • Desduplicação / detecção de quase duplicatas

O modelo é treinado para que itens do mesmo produto/categoria ou com atributos correspondentes fiquem próximos.

Reconhecimento facial e reidentificação de pessoas (person re-identification)

Domínio clássico de aprendizado de métricas:

  • Treinar representações vetoriais em que a identidade forme agrupamentos bem compactos
  • Na inferência, comparar com similaridade do cosseno ou distância Euclidiana

Isso suporta naturalmente cenários de conjunto aberto (novas identidades fora do treinamento).

Busca em linguagem natural e similaridade semântica

Representações vetoriais de sentenças/documentos permitem:

  • Busca semântica (semantic search)
  • Detecção de perguntas duplicadas (duplicate question detection)
  • Agrupar documentos por tópico

Sistemas modernos frequentemente usam codificadores Transformador (veja Arquitetura Transformer) treinados com objetivos contrastivos ou de ranqueamento, de modo que paráfrases fiquem mais próximas do que textos não relacionados.

Sistemas de recomendação e modelos de duas torres (two-tower models)

Muitos recomendadores aprendem representações vetoriais para usuários e itens, otimizando para que:

  • Interações observadas (clique/compra) fiquem próximas
  • Não-interações fiquem distantes

Isso é intimamente relacionado a Sistemas de Recomendação. Pipelines práticos frequentemente:

  • Treinam com negativos amostrados (sampled negatives)
  • Servem com busca de vizinhos mais próximos aproximados sobre representações vetoriais de itens

Desduplicação, resolução de entidades e vinculação de registros

Para nomes, endereços, títulos de produtos ou registros estruturados:

  • Aprender representações vetoriais para que registros da “mesma entidade” fiquem próximos apesar de diferenças de grafia
  • Comparar com um limiar para correspondência

Detecção de anomalias (distância até a variedade)

Se dados “normais” formam uma variedade (manifold) compacta no espaço de representações vetoriais, a distância pode indicar anormalidade. O aprendizado de métricas pode melhorar a separabilidade para Detecção de Anomalias, especialmente quando você tem rótulos fracos sobre o que deve ser considerado “comportamento normal semelhante”.

Engenharia prática: servindo métricas aprendidas

Busca vetorial e índices ANN

No tempo de inferência, o aprendizado de métricas frequentemente vira:

  1. Embutir a consulta (\rightarrow z_q)
  2. Encontrar os vizinhos mais próximos entre milhões de representações vetoriais

Para fazer isso de forma eficiente:

  • Use bibliotecas de vizinhos mais próximos aproximados (ANN) (ex.: HNSW, IVF-PQ no FAISS)
  • Escolha a métrica consistente com o treinamento: similaridade do cosseno vs L2

Definição de limiar e calibração (calibration)

Para tarefas de verificação, você frequentemente precisa de um limiar (t) tal que:

  • corresponde se (d(z_i,z_j) < t)

Limiar(es) devem ser selecionados em um conjunto de validação com a mesma distribuição e podem exigir recalibração quando:

  • Os dados mudam (drift)
  • O modelo de representações vetoriais é atualizado
  • Você altera parâmetros do índice ANN (o que pode afetar distâncias aproximadas)

Armadilhas comuns e como evitá-las

Colapso de representações vetoriais (embedding collapse)

O modelo mapeia tudo para o mesmo vetor (especialmente em configurações auto-supervisionadas mal projetadas).

Mitigações:

  • Use negativos (contrastivo) ou truques de parada de gradiente (stop-gradient)/preditor (estilo BYOL)
  • Monitore a variância das representações vetoriais e as distâncias par a par
  • Adicione normalização e escalonamento de temperatura (temperature scaling) com cuidado

Lotes ruins (sem positivos/negativos úteis)

Se um lote não contém positivos para uma âncora, perdas no estilo de triplas quebram ou ficam ruidosas.

Mitigações:

  • Use amostragem balanceada por classe (class-balanced sampling) para que cada lote inclua múltiplos exemplos por classe
  • Para dados par a par, garanta pares suficientes por lote

Overfitting à identidade em vez de semântica

Se “positivo” é definido de forma estreita demais (ex.: mesmo SKU apenas), as representações vetoriais podem não generalizar para noções mais amplas de similaridade.

Mitigações:

  • Use positivos em múltiplos níveis (mesma categoria, mesmos atributos, mesma instância)
  • Combine aprendizado de métricas com tarefas auxiliares (auxiliary tasks) (classificação, predição de atributos)

Desalinhamento entre objetivo de treino e avaliação

Otimizar perda de triplas não garante o melhor Recall@k, a menos que mineração e composição de lote combinem com o uso de recuperação.

Mitigações:

  • Avalie métricas de recuperação durante o treinamento
  • Considere perdas com representantes (proxy losses) ou perdas contrastivas do tipo softmax em lote (batch-softmax contrastive losses) que aproximem melhor o ranqueamento de recuperação

Relação com famílias de modelos próximas

O aprendizado de métricas se sobrepõe a vários outros tópicos na taxonomia de “Modelos”:

  • k-NN, Naive Bayes: o aprendizado de métricas frequentemente existe para tornar k-vizinhos mais próximos eficaz em espaços brutos de alta dimensionalidade.
  • Agrupamento: boas representações vetoriais tornam o agrupamento mais significativo e estável.
  • Redução de Dimensionalidade: ambos aprendem representações, mas o aprendizado de métricas é tipicamente supervisionado/relacional e otimizado para distâncias semânticas, em vez de reconstrução ou preservação de variância.
  • SVMs: ideias clássicas de grande margem influenciam perdas como LMNN e perdas profundas baseadas em margem.
  • Aprendizado para Ranqueamento: métricas de recuperação e ranqueamento (NDCG, mAP) são intimamente ligadas; alguns objetivos de aprendizado de métricas podem ser vistos como perdas de ranqueamento.
  • Sistemas de Recomendação: recuperação de duas torres é essencialmente aprendizado de métricas sobre representações vetoriais de usuário/item.

Quando escolher aprendizado de métricas (e quando não)

Escolha aprendizado de métricas se você precisa:

  • Recuperação/busca, correspondência, verificação
  • Generalização em conjunto aberto (novas classes no teste)
  • Uma representação vetorial reutilizável para múltiplas tarefas downstream

Prefira classificação/regressão padrão se:

  • Você só se importa em prever um conjunto fixo de rótulos
  • Recuperação não faz parte do requisito do produto
  • Você não tem uma noção confiável de “similaridade” nos rótulos ou interações

Resumo

O aprendizado de métricas treina modelos de representação vetorial para que a distância reflita significado. As principais escolhas de projeto são:

  • A função de distância/similaridade (cosseno vs L2, normalização)
  • A perda (contrastiva, de triplas, com representantes, softmax com margem angular, contrastiva auto-supervisionada)
  • A estratégia de amostragem/mineração (frequentemente a maior alavanca prática)
  • A avaliação orientada à recuperação (Recall@k, mAP, ROC/TAR@FAR)

Quando bem feito, o aprendizado de métricas viabiliza sistemas escaláveis e flexíveis para busca, recomendações, verificação, agrupamento e mais — frequentemente com melhor generalização do que classificadores de rótulo fixo em conjuntos de dados reais e em evolução.