MAE: Mascarar 75% da Imagem e Reconstruir o que Falta
por Frank de Alcantara em 28/07/2026
Esconder $15\%$ dos tokens já basta para dar trabalho ao BERT. Numa imagem natural, esconder $15\%$ dos patches pode deixar informação demais: textura, cor e contornos vizinhos denunciam facilmente o que falta. O MAE, de Masked Autoencoder (autoencoder mascarado), responde com uma medida pouco tímida. Esconde $75\%$ da imagem e entrega ao encoder apenas o quarto restante.
Índice da Série: Representações e Modelos de Mundo
- 1. Autoencoders: o Gargalo, a Reconstrução e o Latente
- 2. Difusão Latente: Comprimir Antes de Gerar
- 3. SimCLR: Aprender por Contraste e Pagar pelos Negativos
- 4. BYOL: Aprender sem Negativos sem Entregar Tudo ao Colapso
- 5. DINO: Autodestilação e Objetos que Emergem da Atenção
- 6. MAE: Mascarar 75% da Imagem e Reconstruir o que Falta (Você está aqui)
- 7. Prever, não gerar: o template JEPA e o problema do colapso
Antes de atravessar a ponte entre modalidades, vale ler Masked Language Modeling: Esconder Tokens para Aprender Contexto e BERT: O Encoder que Lê dos Dois Lados. Eles separam o objetivo MLM da arquitetura BERT. Aqui faremos a mesma distinção entre mascaramento e modelo. Palavras são símbolos discretos e densos em significado; pixels vizinhos carregam muita redundância. A taxa de $75\%$ não é uma excentricidade decorativa. É o que impede a tarefa visual de virar preenchimento local com diploma de pós-graduação.
1. Da imagem para 196 patches
Considere uma imagem de $224\times224$ pixels dividida em patches de $16\times16$. Cada lado contém
\[\frac{224}{16}=14\]posições, totalizando
\[N=14^2=196\]patches. Com taxa de máscara $r=0{,}75$, sorteamos
\[N_m=0{,}75\cdot196=147\]patches ocultos. Restam
\[N_v=196-147=49\]visíveis.
O sorteio é feito por imagem. Uma permutação aleatória dos índices separa visíveis e mascarados, preservando índices capazes de restaurar a ordem espacial mais tarde.
2. A assimetria que economiza computação
O encoder ViT recebe somente os 49 patches visíveis, acompanhados de suas posições. Os 147 mask tokens não atravessam o encoder.
Depois, um decoder menor recebe:
- as 49 representações produzidas pelo encoder;
- 147 mask tokens aprendíveis;
- embeddings posicionais para restaurar as 196 posições.
O decoder prevê os pixels de cada patch. A perda é calculada somente nas posições mascaradas:
\[\mathcal{L}_{MAE} =\frac{1}{N_m} \sum_{i\in\mathcal{M}} \left\lVert x_i-\hat{x}_i\right\rVert_2^2.\]O artigo também normaliza opcionalmente os pixels de cada patch pela média e pelo desvio padrão locais antes da reconstrução. Essa escolha altera o alvo: reduz a pressão para reproduzir brilho e contraste absolutos do patch.
3. Quanto o encoder economiza?
Na autoatenção densa, a parte quadrática cai aproximadamente na razão
\[\frac{N_v^2}{N^2} =\left(\frac{49}{196}\right)^2 =\frac{1}{16} =6{,}25\%.\]Mas um bloco Transformer não contém apenas a matriz de atenção. Projeções lineares e o MLP escalam aproximadamente com $N$, então sua razão é
\[\frac{N_v}{N}=\frac14=25\%.\]Por isso, dizer que “o treinamento inteiro ficou 16 vezes mais barato” seria errado. A economia quadrática vale para componentes específicos. O artigo do MAE relata aceleração de três vezes ou mais no treinamento, resultado que inclui arquitetura, decoder leve e implementação.
O decoder volta à sequência completa, mas é deliberadamente menor e existe apenas no pré-treinamento. Em tarefas posteriores, ele é descartado.
4. MLM, autoencoder de ruído e MAE
Os três métodos corrompem uma entrada e pedem recuperação, mas diferem no que circula pela rede.
| Método | Entrada corrompida do encoder | Alvo | Particularidade |
|---|---|---|---|
| Denoising autoencoder | entrada ruidosa completa | entrada limpa | corrupção pode ser contínua |
| MLM no BERT | sequência completa com substituições | identidades discretas dos tokens selecionados | perda somente nos selecionados |
| MAE visual | apenas patches visíveis | pixels dos patches ocultos | máscara removida antes do encoder |
No BERT, tokens [MASK] ocupam posições dentro do encoder. No MAE, os mask tokens entram somente no decoder. Essa diferença evita gastar o codificador pesado com 75% de posições artificiais.
5. O que a reconstrução ensina e cobra
Uma taxa baixa de máscara permite interpolar vizinhos locais. Taxas altas obrigam o modelo a usar contexto mais amplo. O MAE encontra bom equilíbrio em 75% para imagens naturais e ViTs, não uma constante universal para toda modalidade.
O alvo em pixels preserva informação que pode ajudar reconhecimento, mas também cobra textura, cor e detalhe de baixa relevância semântica. O autoencoder já expôs essa tensão. A difusão latente a reduz movendo a geração para um latente.
O I-JEPA dará outro passo: mascarará regiões, mas preverá representações produzidas por um encoder alvo. Não haverá obrigação de reconstruir cada pixel oculto.
6. Mascaramento reproduzível em C++23
O programa embaralha os 196 índices com semente fixa, escolhe 147 posições mascaradas e calcula o erro quadrático somente nelas. Em um sistema real, cada alvo seria um vetor com $16\cdot16\cdot C$ componentes.
#include <algorithm>
#include <array>
#include <cmath>
#include <cstddef>
#include <iostream>
#include <numeric>
#include <random>
int main() {
constexpr std::size_t patch_count = 196;
constexpr std::size_t masked_count = 147;
std::array<std::size_t, patch_count> permutation{};
std::iota(permutation.begin(), permutation.end(), 0);
std::mt19937 generator{7};
std::shuffle(
permutation.begin(),
permutation.end(),
generator);
std::array<bool, patch_count> is_masked{};
for (std::size_t i = 0; i < masked_count; ++i) {
is_masked[permutation[i]] = true;
}
std::array<double, patch_count> target{};
std::array<double, patch_count> prediction{};
for (std::size_t i = 0; i < patch_count; ++i) {
target[i] = std::sin(static_cast<double>(i) * 0.1);
prediction[i] = target[i] + 0.05;
}
double squared_error = 0.0;
for (std::size_t i = 0; i < patch_count; ++i) {
if (!is_masked[i]) {
continue;
}
const double error = prediction[i] - target[i];
squared_error += error * error;
}
std::cout << "visible=" << patch_count - masked_count
<< " masked=" << masked_count << '\n'
<< "masked_mse="
<< squared_error
/ static_cast<double>(masked_count)
<< '\n';
}
A saída esperada informa 49 patches visíveis, 147 mascarados e erro médio $0{,}0025$, pois cada previsão foi deslocada por $0{,}05$.
No MSVC 19.51, compilamos com cl /std:c++latest /permissive- /W4 /EHsc /utf-8 /O2 mae.cpp. A semente altera quais índices são ocultados, mas não altera o erro deste exemplo, pois todas as previsões recebem o mesmo deslocamento. Essa invariância é uma propriedade dos dados sintéticos escolhidos, não do MAE.
7. Laboratório: a sequência que o encoder vê
Altere a taxa de máscara e a semente. As células verdes chegam ao encoder; as cinzas são removidas. A terceira medida mostra apenas a razão quadrática da matriz de atenção, não o custo total do modelo.
8. A fronteira JEPA
Chegamos a três respostas para a tarefa autossupervisionada:
- reconstruir a entrada, como o autoencoder e o MAE;
- comparar exemplos, como o SimCLR;
- destilar uma representação, como BYOL e DINO.
O próximo artigo combina partes dessas histórias e recusa outras. O JEPA usa contexto mascarado, alvo lento e previsão, mas abandona tanto os negativos quanto a reconstrução de pixels. A pergunta deixa de ser “como pintar o que falta?” e passa a ser “qual representação deveria ocupar aquela região?”.
O MAE economiza ao esconder do encoder aquilo que pretende reconstruir. O JEPA mudará também aquilo que merece ser reconstruído.
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
DEVLIN, J.; CHANG, M.-W.; LEE, K.; TOUTANOVA, K. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT, 2019. Disponível em: https://aclanthology.org/N19-1423/. Acesso em: 28 jul. 2026.
DOSOVITSKIY, A. et al. An Image Is Worth 16x16 Words: Transformers for Image Recognition at Scale. ICLR, 2021. Disponível em: https://openreview.net/forum?id=YicbFdNTTy. Acesso em: 28 jul. 2026.
HE, K. et al. Masked Autoencoders Are Scalable Vision Learners. CVPR, 2022. Disponível em: https://openaccess.thecvf.com/content/CVPR2022/html/He_Masked_Autoencoders_Are_Scalable_Vision_Learners_CVPR_2022_paper.html. Acesso em: 28 jul. 2026.
Índice da Série: Representações e Modelos de Mundo
- 1. Autoencoders: o Gargalo, a Reconstrução e o Latente
- 2. Difusão Latente: Comprimir Antes de Gerar
- 3. SimCLR: Aprender por Contraste e Pagar pelos Negativos
- 4. BYOL: Aprender sem Negativos sem Entregar Tudo ao Colapso
- 5. DINO: Autodestilação e Objetos que Emergem da Atenção
- 6. MAE: Mascarar 75% da Imagem e Reconstruir o que Falta (Você está aqui)
- 7. Prever, não gerar: o template JEPA e o problema do colapso
(Updated: )