MAE: Mascarar 75% da Imagem e Reconstruir o que Falta

por Frank de Alcantara em 28/07/2026

MAE: Mascarar 75% da Imagem e Reconstruir o que Falta

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.

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.

(Updated: )