BYOL: Aprender sem Negativos sem Entregar Tudo ao Colapso

por Frank de Alcantara em 28/07/2026

BYOL: Aprender sem Negativos sem Entregar Tudo ao Colapso

No SimCLR, cada imagem encontra uma companheira positiva e uma multidão de negativas. Retiremos a multidão. Se pedirmos apenas que duas views da mesma imagem produzam a mesma representação, a rede pode resolver o problema atribuindo o mesmo vetor a tudo. Cães, pontes e torradeiras finalmente unidos, embora por uma geometria inútil.

O BYOL, de Bootstrap Your Own Latent (algo como construir a própria representação por autoalimentação), aceita o risco e remove todos os pares negativos. Duas views da mesma imagem devem concordar, mas nenhuma imagem diferente entra no denominador. O método funciona apesar da solução constante, apoiado numa arquitetura assimétrica e numa dinâmica em duas escalas. A distinção importa: observamos resistência ao colapso; não recebemos uma prova universal de que a função constante seja impossível.

1. Duas redes, três cabeçalhos

Uma view $v=t(x)$ percorre a rede online:

\[y_\theta=f_\theta(v),\qquad z_\theta=g_\theta(y_\theta),\qquad q_\theta(z_\theta).\]

O encoder $f_\theta$ produz a representação, o projector $g_\theta$ leva essa representação ao espaço da tarefa pretexto e o predictor $q_\theta$ tenta alcançar o alvo.

A outra view $v’=t’(x)$ percorre a rede target:

\[y_\xi'=f_\xi(v'),\qquad z_\xi'=g_\xi(y_\xi').\]

O ramo alvo não tem predictor e não recebe gradiente. Ele é atualizado por uma EMA, de exponential moving average (média móvel exponencial):

\[\xi\leftarrow \tau\xi+(1-\tau)\theta, \qquad 0\le\tau<1.\]

O operador stop-gradient trata $z_\xi’$ como constante durante a diferenciação. Portanto, o gradiente altera $\theta$, mas nunca atravessa o alvo para alterar $\xi$.

2. A perda é uma regressão angular

Normalizamos predição e alvo:

\[\bar q_\theta= \frac{q_\theta(z_\theta)} {\lVert q_\theta(z_\theta)\rVert_2}, \qquad \bar z_\xi'= \frac{z_\xi'}{\lVert z_\xi'\rVert_2}.\]

A perda numa direção é

\[\mathcal{L}_{\theta,\xi} =\left\lVert\bar q_\theta-\operatorname{sg}(\bar z_\xi')\right\rVert_2^2 =2-2\frac{q_\theta(z_\theta)^\top z_\xi'} {\lVert q_\theta(z_\theta)\rVert_2\lVert z_\xi'\rVert_2},\]

na qual $\operatorname{sg}$ denota stop-gradient. A igualdade mostra que minimizar o erro quadrático entre vetores unitários equivale a maximizar o cosseno.

O treinamento troca as views e soma as duas direções:

\[\mathcal{L}_{BYOL} =\mathcal{L}(v,v')+\mathcal{L}(v',v).\]

Não há matriz $2B\times2B$, rótulo de negativo ou fila. O custo de similaridades deixa de ser quadrático no lote.

3. Um alvo lento

Se $\tau=0{,}99$, uma contribuição antiga decai geometricamente como $\tau^k$. Uma aproximação útil para a janela efetiva é

\[N_{\text{efetivo}}\approx\frac{1}{1-\tau}.\]

Assim, $\tau=0{,}99$ corresponde a cerca de 100 passos e $\tau=0{,}999$ a cerca de 1000. A aproximação não transforma a EMA numa média retangular; ela apenas oferece uma escala intuitiva de memória.

O alvo muda mais devagar do que a rede online. Em vez de perseguir simultaneamente um alvo que recebe o mesmo gradiente, o predictor tenta acompanhar uma referência amortecida pela história dos parâmetros.

Uma atualização basta para enxergarmos a diferença de escalas. Se $\xi=0{,}25$, $\theta=1{,}00$ e $\tau=0{,}99$, então

\[\xi_{\text{novo}} =0{,}99\cdot0{,}25+0{,}01\cdot1{,}00 =0{,}2575.\]

O parâmetro online pode mover-se por gradiente a cada passo; o alvo percorre apenas $1\%$ da distância naquele instante. Chamar o teacher de “rede congelada” seria tão incorreto quanto chamá-lo de cópia instantânea: ele é uma memória móvel.

4. Por que não colapsa?

A resposta segura possui três partes.

Primeiro, a solução constante continua admissível para a perda de alinhamento isolada. Não há um termo explícito de variância que a proíba.

Segundo, o sistema é assimétrico. Somente a rede online tem predictor e recebe gradiente; o alvo é uma média temporal com stop-gradient. Essas escolhas mudam a dinâmica de otimização, embora não apaguem matematicamente a solução degenerada.

Terceiro, ablações ajudam a separar necessidade prática de explicação definitiva. O artigo do BYOL mostra o papel da rede alvo lenta. O SimSiam obtém bom resultado sem EMA, mantendo predictor e stop-gradient. Análises posteriores relacionam o predictor à adaptação das direções do espaço e ao efeito de otimização implícita. Nenhum desses resultados autoriza a frase curta “a EMA impede o colapso” como teorema geral.

Esse cuidado será importante no I-JEPA. Lá, a EMA reaparece, mas em conjunto com mascaramento, predição contextual e escolhas próprias de arquitetura.

5. A conta muda de lugar

Retirar negativos elimina a matriz de similaridades $O(B^2)$. Ainda processamos duas views e mantemos dois conjuntos de parâmetros. O alvo não precisa guardar ativações para backpropagation, o que reduz sua memória de treinamento em relação a uma segunda rede diferenciável, mas seus pesos continuam ocupando memória.

Para $P$ parâmetros, a atualização da EMA realiza aproximadamente $P$ multiplicações por $\tau$, $P$ multiplicações por $1-\tau$ e $P$ somas por passo. É $O(P)$ e costuma ser menor do que o custo das convoluções ou da atenção, mas não é gratuito. Em treinamento distribuído, também precisamos manter os alvos coerentes com os parâmetros online sincronizados.

6. Uma dinâmica mínima em C++23

O programa abaixo não reproduz uma rede visual e não demonstra ausência de colapso. Ele isola a regra: o peso online e o predictor descem o gradiente; o alvo apenas segue a EMA.

#include <cmath>
#include <iomanip>
#include <iostream>

int main() {
    double online_weight = 1.0;
    double target_weight = 0.25;
    double predictor = 0.40;

    constexpr double learning_rate = 0.03;
    constexpr double momentum = 0.99;
    constexpr int steps = 50;

    for (int step = 0; step < steps; ++step) {
        const double error =
            predictor * online_weight - target_weight;

        const double online_gradient =
            2.0 * predictor * error;
        const double predictor_gradient =
            2.0 * online_weight * error;

        online_weight -= learning_rate * online_gradient;
        predictor -= learning_rate * predictor_gradient;

        target_weight =
            momentum * target_weight
            + (1.0 - momentum) * online_weight;
    }

    const double error =
        predictor * online_weight - target_weight;
    std::cout << std::fixed << std::setprecision(6)
              << "online=" << online_weight << '\n'
              << "target=" << target_weight << '\n'
              << "predictor=" << predictor << '\n'
              << "loss=" << error * error << '\n';
}

Observe a ordem. Atualizamos a rede online com o alvo do passo corrente e somente depois movemos o alvo. Misturar as duas atualizações altera a dinâmica simulada.

No MSVC 19.51, compilamos com cl /std:c++latest /permissive- /W4 /EHsc /utf-8 /O2 byol.cpp. Depois de 50 passos, a saída arredondada é online=1.027166, target=0.545041, predictor=0.464421 e loss=0.004624. O alvo continua atrasado, e é precisamente esse atraso que o pequeno sistema pretende tornar visível.

7. Laboratório: duas escalas de tempo

Altere $\tau$, o número de passos e a presença do predictor. O laboratório mostra um sistema escalar deliberadamente pequeno, suficiente para visualizar quem recebe gradiente e quem apenas acompanha.

8. Do vetor para uma distribuição

BYOL regressa um vetor normalizado. O próximo artigo manterá student, teacher, EMA e stop-gradient, mas transformará os vetores em distribuições. O DINO acrescentará centralização, temperaturas diferentes e múltiplos recortes. Com um Vision Transformer, seus mapas de atenção também revelarão uma propriedade que a perda nunca pediu por nome: objetos começarão a emergir.

Retirar os negativos não retira o problema do colapso. Apenas obriga a arquitetura e a dinâmica a enfrentá-lo de outra forma.

Acrônimos e Abreviações neste artigo

A seguir está a lista de todos os acrônimos e abreviações identificados no texto, organizados em ordem alfabética com o termo original em inglês e a tradução para o português:

Acrônimo / Abreviação Definição em Inglês Tradução em Português
BLAS Basic Linear Algebra Subprograms Subprogramas Básicos de Álgebra Linear
CPU / CPUs Central Processing Unit Unidade Central de Processamento
FLOPs Floating Point Operations Operações de Ponto Flutuante
FP32 32-bit Floating Point Ponto Flutuante de 32 bits
GEMM General Matrix Multiply Multiplicação Geral de Matrizes
GPU Graphics Processing Unit Unidade de Processamento Gráfico
IA Artificial Intelligence Inteligência Artificial
I-JEPA Image Joint-Embedding Predictive Architecture Arquitetura Preditiva de Incorporação Conjunta de Imagem
JEPA Joint-Embedding Predictive Architecture Arquitetura Preditiva de Incorporação Conjunta
KiB Kibibyte Kibibyte
MAE Masked Autoencoder Autocodificador Mascarado
MSE Mean Squared Error Erro Quadrático Médio
MSVC Microsoft Visual C++ Microsoft Visual C++
PCA Principal Component Analysis Análise de Componentes Principais
SIMD Single Instruction, Multiple Data Instrução Única, Múltiplos Dados
SimCLR Simple Framework for Contrastive Learning of Visual Representations Estrutura Simples para Aprendizado Contrastivo de Representações Visuais

Referências

CHEN, X.; HE, K. Exploring Simple Siamese Representation Learning. CVPR, 2021. Disponível em: https://openaccess.thecvf.com/content/CVPR2021/html/Chen_Exploring_Simple_Siamese_Representation_Learning_CVPR_2021_paper.html. Acesso em: 28 jul. 2026.

GRILL, J.-B. et al. Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning. NeurIPS, 2020. Disponível em: https://papers.nips.cc/paper/2020/hash/f3ada80d5c4ee70142b17b8192b2958e-Abstract.html. Acesso em: 28 jul. 2026.

TIAN, Y.; GANGULI, S. Understanding Self-Supervised Learning Dynamics without Contrastive Pairs. ICML, 2021. Disponível em: https://proceedings.mlr.press/v139/tian21a.html. Acesso em: 28 jul. 2026.

(Updated: )