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. Vamos retirar 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 em uma arquitetura assimétrica e em uma 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, cujos parâmetros são $\theta$. Chamaremos de $y_\theta$ a representação do encoder, de $z_\theta$ a saída do projector e de $q_\theta(z_\theta)$ a previsão final:

\[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, cujos parâmetros são $\xi$. Chamaremos de $y_\xi’$ sua representação e de $z_\xi’$ sua projeção:

\[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), na qual $\tau\in[0,1)$ é o momento que controla quanto do alvo anterior será preservado:

\[\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$.

A Figura 1 separa os dois mecanismos de atualização que ocupam o mesmo treinamento: a perda e o gradiente movem apenas o ramo online; a EMA faz o ramo alvo acompanhar seus parâmetros em uma escala mais lenta.

Dois ramos do BYOL, com gradiente e predictor apenas no ramo online, stop-gradient no alvo e atualização dos pesos alvo por EMA

Figura 1: O ramo *online* recebe gradiente através do *predictor*; o ramo alvo não recebe gradiente nem possui *predictor* e é atualizado exclusivamente pela média móvel exponencial dos parâmetros.

1.1 De consistência temporal a BYOL

O alvo lento possui uma história anterior ao BYOL. O Mean Teacher, de Tarvainen e Valpola, mostrou em 2017 que a média exponencial dos pesos de uma rede podia fornecer alvos de consistência mais estáveis em aprendizado semissupervisionado. O MoCo, em 2020, usou um encoder de momento para manter coerentes as chaves de um dicionário contrastivo. O BYOL retirou o dicionário e os negativos, manteve o alvo de momento e acrescentou um preditor somente ao ramo online. Pouco depois, o SimSiam mostrou que um método próximo podia funcionar sem EMA, preservando preditor e stop-gradient. A sequência histórica impede atribuir todo o efeito a uma única peça.

Os formatos explicitam as responsabilidades. Para um lote com $B$ exemplos, seja $d_f$ o número de coordenadas da representação do backbone e $d_z$ o número de coordenadas do espaço projetado. Suponha

\[y_\theta\in\mathbb{R}^{B\times d_f}, \qquad z_\theta,z_\xi'\in\mathbb{R}^{B\times d_z}, \qquad q_\theta(z_\theta)\in\mathbb{R}^{B\times d_z}.\]

O projector pode mudar a dimensão do backbone de $d_f$ para $d_z$; o predictor deve devolver a dimensão do alvo que será comparado. O ramo alvo possui encoder e projector, mas não predictor. Depois do pré-treino, usamos $y_\theta$ para a tarefa posterior e descartamos os dois cabeçalhos.

O stop-gradient não altera o valor da função. Se $u=\operatorname{sg}(v)$, então $u=v$ na passagem direta, mas

\[\frac{\partial u}{\partial v}=0\]

na passagem reversa. É uma operação sobre o grafo de diferenciação, não uma aproximação numérica. Sem ela, a perda empurraria os dois ramos diretamente para se encontrarem; com ela, apenas o ramo online persegue o alvo do passo atual.

1.2 Exercícios de lápis e papel

1. Para $B=32$, $d_f=2048$ e $d_z=256$, escreva os formatos de $y_\theta$, $z_\theta$ e $q_\theta(z_\theta)$.

Solução: Substituindo as dimensões nas definições da Seção 1.1,

\[y_\theta\in\mathbb{R}^{32\times2048},\] \[z_\theta\in\mathbb{R}^{32\times256}\]

e

\[q_\theta(z_\theta)\in\mathbb{R}^{32\times256}.\]

O projector reduz cada representação de $2048$ para $256$ coordenadas, e o predictor preserva as $256$ coordenadas exigidas pelo alvo.

2. Se o projector for uma única camada linear, escreva o formato de sua matriz de pesos.

Solução: Escrevendo o lote nas linhas e calculando $Z=YW_g$, precisamos transformar $d_f=2048$ colunas em $d_z=256$ colunas. Portanto,

\[W_g\in\mathbb{R}^{2048\times256}.\]

Um vetor de viés, caso exista, terá $256$ coordenadas.

3. Explique por que o ramo alvo não precisa guardar ativações para calcular gradientes de seus parâmetros.

Solução: O stop-gradient impede que a diferenciação atravesse a saída do ramo alvo. Seus parâmetros não são atualizados por backpropagation, mas pela EMA dos parâmetros do ramo online. Como não precisamos calcular derivadas das camadas do alvo, suas ativações intermediárias podem ser descartadas depois da passagem direta; basta conservar a saída usada na perda.

4. Considere $u=\operatorname{sg}(3v)$. Calcule o valor de $u$ em $v=2$ e sua derivada em relação a $v$.

Solução: Na passagem direta, o stop-gradient não altera o valor:

\[u=\operatorname{sg}(3\cdot2)=6.\]

Na passagem reversa, todo o argumento é tratado como constante. Logo,

\[\frac{\partial u}{\partial v}=0.\]

5. Indique quais módulos permanecem para uma sonda linear depois do pré-treino: encoder, projector, predictor e ramo alvo.

Solução: Permanece apenas o encoder do ramo online, cuja saída $y_\theta$ alimenta a sonda linear. O projector e o predictor pertencem à tarefa de pré-treinamento e são descartados. O ramo alvo também é descartado, pois servia apenas para fornecer alvos lentos durante o treino.

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 em uma 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.

2.1 A igualdade angular e seu gradiente

Para vetores unitários $a$ e $b$,

\[\lVert a-b\rVert_2^2 =(a-b)^\top(a-b) =a^\top a+b^\top b-2a^\top b =2-2a^\top b.\]

Como $a^\top b=\cos\angle(a,b)$, a perda varia de $0$, quando os vetores coincidem, a $4$, quando apontam em sentidos opostos. Vetores ortogonais produzem perda $2$.

Sem considerar por um momento a derivada da normalização, a derivada de $\lVert a-\operatorname{sg}(b)\rVert^2$ em relação a $a$ é

\[\nabla_a\mathcal{L}=2(a-b),\]

enquanto $\nabla_b\mathcal{L}=0$ por causa do stop-gradient. A normalização real projeta parte desse gradiente no plano tangente à esfera, pois alterar apenas a norma do vetor bruto não muda sua versão normalizada.

Na prática usamos uma pequena constante $\epsilon$ no denominador,

\[\bar q=\frac{q}{\max(\lVert q\rVert_2,\epsilon)},\]

ou uma forma equivalente, porque normalizar o vetor zero é indefinido. Essa proteção numérica não resolve colapso representacional; apenas impede divisão por zero.

2.2 Exercícios de lápis e papel

1. Calcule a perda angular para vetores unitários com cossenos $1$, $0$, $1/2$ e $-1$.

Solução: Para vetores unitários, $\mathcal{L}=2-2\cos\theta$. Portanto,

\[\begin{array}{c|c} \cos\theta&\mathcal{L}\\ \hline 1&0\\ 0&2\\ 1/2&1\\ -1&4 \end{array}\]

Vetores coincidentes produzem perda zero; vetores opostos produzem o valor máximo $4$.

2. Para $a=(1,0)$ e $b=(0,1)$, calcule $\nabla_a\mathcal{L}$ ignorando a derivada da normalização.

Solução: Usando $\nabla_a\mathcal{L}=2(a-b)$,

\[\nabla_a\mathcal{L} =2\bigl((1,0)-(0,1)\bigr) =2(1,-1) =(2,-2).\]

3. Calcule $\nabla_b\mathcal{L}$ no exercício anterior quando há stop-gradient.

Solução: O vetor $b$ aparece dentro de $\operatorname{sg}(b)$ e é tratado como constante durante a diferenciação. Assim,

\[\nabla_b\mathcal{L}=(0,0).\]

4. Normalize o vetor $(3,4)$ e verifique que sua norma passa a ser $1$.

Solução: A norma original é

\[\sqrt{3^2+4^2}=5.\]

O vetor normalizado é

\[\left(\frac35,\frac45\right).\]

Sua norma vale

\[\sqrt{\left(\frac35\right)^2+\left(\frac45\right)^2} =\sqrt{\frac{9+16}{25}} =1.\]

5. Explique por que somar as duas direções permite que cada view passe uma vez pelo ramo online e uma vez pelo ramo alvo.

Solução: Na parcela $\mathcal{L}(v,v’)$, a view $v$ passa pelo ramo online e $v’$ fornece o alvo. Na parcela $\mathcal{L}(v’,v)$, os papéis são trocados. A soma garante, portanto, que cada view produza uma previsão pelo ramo online e também uma referência pelo ramo alvo.

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 em uma 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.

3.1 A EMA aberta em sua história

Indexe os passos por $t$:

\[\xi_t=\tau\xi_{t-1}+(1-\tau)\theta_t.\]

Substituindo a recorrência repetidamente, com $k$ indicando a idade de um parâmetro passado em relação ao passo atual,

\[\xi_t =\tau^t\xi_0 +(1-\tau)\sum_{k=0}^{t-1}\tau^k\theta_{t-k}.\]

O peso do parâmetro online de $k$ passos atrás é $(1-\tau)\tau^k$. Desprezado o transiente inicial, esses pesos somam $1$:

\[\sum_{k=0}^{\infty}(1-\tau)\tau^k=1.\]

A idade média dessa distribuição geométrica é

\[\mathbb{E}[k] =\sum_{k=0}^{\infty}k(1-\tau)\tau^k =\frac{\tau}{1-\tau}.\]

Essa quantidade vale $99$ passos para $\tau=0{,}99$ e $999$ para $\tau=0{,}999$. A janela $1/(1-\tau)$ usada na Seção 3 difere por apenas um passo.

Outra escala útil é a meia-vida $h$, a idade na qual o peso relativo cai à metade:

\[\tau^h=\frac12 \quad\Longrightarrow\quad h=\frac{\log(1/2)}{\log\tau}.\]

Para $\tau=0{,}99$, $h\approx68{,}97$ passos. Janela efetiva e meia-vida respondem perguntas diferentes: a primeira resume a idade média; a segunda informa quando uma contribuição individual perde metade do peso.

3.2 Exercícios de lápis e papel

1. Abra manualmente $\xi_2$ em função de $\xi_0$, $\theta_1$ e $\theta_2$.

Solução: As duas primeiras atualizações são

\[\xi_1=\tau\xi_0+(1-\tau)\theta_1\]

e

\[\xi_2=\tau\xi_1+(1-\tau)\theta_2.\]

Substituindo $\xi_1$ na segunda equação,

\[\xi_2 =\tau^2\xi_0 +\tau(1-\tau)\theta_1 +(1-\tau)\theta_2.\]

2. Para $\tau=0{,}9$, calcule os pesos de $\theta_t$, $\theta_{t-1}$ e $\theta_{t-2}$.

Solução: O peso de um parâmetro com idade $k$ é $(1-\tau)\tau^k$. Como $1-\tau=0{,}1$,

\[w(\theta_t)=0{,}1,\] \[w(\theta_{t-1})=0{,}1\cdot0{,}9=0{,}09\]

e

\[w(\theta_{t-2})=0{,}1\cdot0{,}9^2=0{,}081.\]

3. Some a série infinita de pesos para $\tau=0{,}9$ e confirme que vale $1$.

Solução: A soma geométrica é

\[\sum_{k=0}^{\infty}(1-\tau)\tau^k =0{,}1\sum_{k=0}^{\infty}0{,}9^k =0{,}1\frac{1}{1-0{,}9} =1.\]

4. Calcule a idade média para $\tau=0{,}95$.

Solução: Aplicando $\mathbb{E}[k]=\tau/(1-\tau)$,

\[\mathbb{E}[k] =\frac{0{,}95}{1-0{,}95} =\frac{0{,}95}{0{,}05} =19.\]

A contribuição escolhida segundo os pesos da EMA possui idade média de $19$ passos.

5. Use $h=\log(1/2)/\log\tau$ para estimar a meia-vida de $\tau=0{,}9$.

Solução: Substituindo $\tau=0{,}9$,

\[h =\frac{\log(1/2)}{\log(0{,}9)} \approx6{,}58.\]

Depois de aproximadamente $6{,}58$ passos, o peso relativo de uma contribuição cai à metade.

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.

4.1 A solução constante continua sendo ótima

Considere a perda esperada simplificada

\[\mathcal{L} =\mathbb{E}_{v,v'} \left\lVert q_\theta(g_\theta(f_\theta(v))) -\operatorname{sg}(g_\xi(f_\xi(v'))) \right\rVert_2^2.\]

Se todos os módulos dos dois ramos produzem o mesmo vetor constante $c$ e o preditor satisfaz $q_\theta(c)=c$, cada parcela é $\lVert c-c\rVert^2=0$. Como uma norma ao quadrado nunca é negativa, a configuração é mínimo global. EMA e stop-gradient mudam a dinâmica de chegada; não removem esse ponto do conjunto de soluções.

Podemos diagnosticar colapso por estatísticas do lote. Empilhe as representações de $B$ exemplos nas linhas de $Z\in\mathbb{R}^{B\times D}$, em que $D$ é o número de coordenadas de cada representação. Defina a média de cada coordenada

\[\mu_d=\frac1B\sum_{i=0}^{B-1}Z_{id}\]

e sua variância

\[v_d=\frac1B\sum_{i=0}^{B-1}(Z_{id}-\mu_d)^2.\]

No colapso constante, $v_d=0$ para todo $d$. A perda de BYOL não contém um termo explícito que imponha $v_d>0$. Métodos como VICReg acrescentam essa exigência diretamente; o BYOL confia na assimetria, no preditor, na normalização, na arquitetura e na dinâmica do otimizador.

As análises lineares de Tian, Chen e Ganguli mostram que o preditor pode adaptar velocidades de aprendizagem ao longo dos autovetores da covariância e tornar instável parte da dinâmica colapsada. O resultado é explicativo, mas possui território: redes lineares simplificadas e hipóteses específicas. A rede profunda herda a intuição, não um certificado universal.

4.2 Exercícios de lápis e papel

1. Substitua $f(v)=c$, $g(c)=c$ e $q(c)=c$ na perda e prove que ela vale zero.

Solução: Com todos os módulos produzindo o mesmo vetor constante, a previsão e o alvo de qualquer par de views são iguais a $c$. Logo,

\[\mathcal{L} =\left\lVert c-\operatorname{sg}(c)\right\rVert_2^2 =\lVert c-c\rVert_2^2 =0.\]

Como uma norma ao quadrado não pode ser negativa, essa configuração constante é um mínimo global da perda isolada.

2. Para representações escalares $(2,2,2,2)$, calcule média e variância.

Solução: A média é

\[\mu=\frac{2+2+2+2}{4}=2.\]

Todas as diferenças em relação à média são nulas. Portanto,

\[v=\frac{(2-2)^2+(2-2)^2+(2-2)^2+(2-2)^2}{4}=0.\]

3. Para $(0,1,2,3)$, calcule média e variância usando divisor $B$.

Solução: A média é

\[\mu=\frac{0+1+2+3}{4}=1{,}5.\]

A variância populacional vale

\[v =\frac{(0-1{,}5)^2+(1-1{,}5)^2+(2-1{,}5)^2+(3-1{,}5)^2}{4} =\frac{2{,}25+0{,}25+0{,}25+2{,}25}{4} =1{,}25.\]

4. Explique por que perda zero entre duas views não implica variância positiva entre imagens diferentes.

Solução: A perda de alinhamento verifica apenas se as duas views de cada imagem recebem a mesma saída. Uma rede constante satisfaz essa condição para todos os pares e produz perda zero, embora também atribua a mesma representação a imagens distintas. A concordância dentro do par não mede a diversidade entre pares.

5. Compare, em uma frase, prevenção explícita de colapso por variância com resistência dinâmica por preditor e stop-gradient.

Solução: Um termo explícito de variância penaliza diretamente representações sem dispersão, enquanto o preditor e o stop-gradient alteram a dinâmica de otimização para resistir ao colapso sem retirar matematicamente a solução constante do conjunto de mínimos.

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.

5.1 Pesos, ativações e comunicação são contas diferentes

Se cada parâmetro ocupa $s$ bytes, os pesos dos dois ramos custam aproximadamente $2Ps$. O otimizador do ramo online acrescenta estados. Adam, por exemplo, mantém primeiro e segundo momentos, mais $2Ps$, sem contar uma eventual cópia mestra em precisão maior. O ramo alvo não precisa desses momentos porque não recebe gradiente.

Ativações seguem outra escala. O ramo online precisa conservar valores intermediários para retropropagação; o ramo alvo pode executar sem construir um grafo de gradiente. Se uma passagem do backbone guarda $A$ bytes de ativações e o alvo usa apenas uma fração pequena para a saída, a memória não duplica simplesmente de $A$ para $2A$. Pesos duplicam; ativações diferenciáveis, não.

Compare com SimCLR. Ambos processam duas views por imagem. SimCLR acrescenta a matriz de similaridades $O(B^2)$; BYOL acrescenta uma cópia dos pesos $O(P)$ e uma atualização EMA $O(P)$. Qual é mais barato depende de $B$, $D$, $P$, arquitetura e implementação. Notação assintótica localiza o crescimento, mas a máquina paga constantes e tráfego.

5.2 Exercícios de custo e memória

1. Para $P=25$ milhões e FP32, calcule a memória dos pesos de um ramo em MiB.

Solução: Um ramo contém $25\,000\,000$ valores de quatro bytes:

\[25\,000\,000\cdot4=100\,000\,000\ \text{bytes}.\]

Convertendo para MiB,

\[\frac{100\,000\,000}{2^{20}} \approx95{,}37\ \text{MiB}.\]

2. Calcule a memória dos pesos dos dois ramos.

Solução: Os dois ramos contêm $2P=50\,000\,000$ parâmetros. Logo,

\[\frac{50\,000\,000\cdot4}{2^{20}} \approx190{,}73\ \text{MiB}.\]

3. Acrescente dois estados FP32 de Adam apenas ao ramo online e calcule o total de pesos mais estados.

Solução: Os pesos dos dois ramos ocupam $2P$ valores. Os dois momentos de Adam acrescentam outros $2P$ valores somente para o ramo online. O total é

\[4P=100\,000\,000\ \text{valores FP32}.\]

Em memória,

\[\frac{100\,000\,000\cdot4}{2^{20}} \approx381{,}47\ \text{MiB}.\]

Esse total não inclui gradientes, ativações nem uma possível cópia mestra dos pesos.

4. Conte as operações escalares aproximadas da EMA para $P=25$ milhões.

Solução: Para cada parâmetro, a atualização $\xi\leftarrow\tau\xi+(1-\tau)\theta$ realiza duas multiplicações e uma soma. Assim,

\[3P=3\cdot25\,000\,000=75\,000\,000\]

operações escalares aproximadas por atualização.

5. Explique por que não se deve concluir que BYOL usa exatamente o dobro da memória de ativações do encoder.

Solução: O ramo online precisa conservar ativações intermediárias para a retropropagação, mas o ramo alvo não recebe gradiente e pode descartá-las durante a passagem direta. Os pesos dos dois ramos duplicam, porém a parcela dominante de ativações diferenciáveis não precisa duplicar. O total real depende da implementação e das saídas que precisam permanecer vivas para a perda.

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.

6.1 Exercícios de rastreamento manual

1. Com os valores iniciais, calcule error, online_gradient e predictor_gradient no primeiro passo.

Solução: Com online_weight=1.0, target_weight=0.25 e predictor=0.40,

\[\text{error}=0{,}40\cdot1{,}0-0{,}25=0{,}15.\]

Os gradientes são

\[\text{online_gradient} =2\cdot0{,}40\cdot0{,}15 =0{,}12\]

e

\[\text{predictor_gradient} =2\cdot1{,}0\cdot0{,}15 =0{,}30.\]

2. Aplique learning_rate=0.03 e calcule os novos valores de online_weight e predictor.

Solução: A descida do gradiente produz

\[\text{online_weight} =1{,}0-0{,}03\cdot0{,}12 =0{,}9964\]

e

\[\text{predictor} =0{,}40-0{,}03\cdot0{,}30 =0{,}391.\]

3. Use os valores atualizados para calcular target_weight ao fim do primeiro passo.

Solução: A EMA usa o novo valor online_weight=0.9964:

\[\text{target_weight} =0{,}99\cdot0{,}25+0{,}01\cdot0{,}9964 =0{,}2475+0{,}009964 =0{,}257464.\]

4. Explique por que mover a atualização da EMA para antes do gradiente mudaria o alvo usado naquele passo.

Solução: Na ordem atual, o erro do primeiro passo usa target_weight=0.25, e a EMA só se move depois da atualização por gradiente. Se a EMA viesse antes, o alvo passaria imediatamente para

\[0{,}99\cdot0{,}25+0{,}01\cdot1{,}0=0{,}2575,\]

e o erro usado no gradiente seria $0{,}40-0{,}2575=0{,}1425$, não $0{,}15$. A troca de ordem altera, portanto, a própria direção e a magnitude do passo de otimização.

5. Se momentum=0, determine o valor do alvo depois de cada passo e descreva o que acontece com a separação de escalas.

Solução: Com momentum=0, a atualização se reduz a

\[\text{target_weight} =0\cdot\text{target_weight} +1\cdot\text{online_weight} =\text{online_weight}.\]

Depois de cada passo, o alvo se torna uma cópia instantânea do peso online recém-atualizado. O atraso temporal desaparece e os dois ramos deixam de evoluir em escalas diferentes.

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.

TARVAINEN, A.; VALPOLA, H. Mean Teachers Are Better Role Models: Weight-Averaged Consistency Targets Improve Semi-Supervised Deep Learning Results. Advances in Neural Information Processing Systems, v. 30, 2017. Disponível em: https://proceedings.neurips.cc/paper/2017/hash/68053af2923e00204c3ca7c6a3150cf7-Abstract.html. Acesso em: 29 jul. 2026.

TIAN, Y.; CHEN, X.; 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: )