MAE (Masked Autoencoders):视觉领域的预训练黑科技

📂 所属阶段:第四阶段 — 视觉新范式(Transformer 篇)
🔗 相关章节:Swin Transformer · Vision-Language 多模态


1. MAE 核心思想

MAE = Masked Autoencoders for Self-Supervised Learning

灵感:NLP 中的 BERT(Masked Language Model)

步骤:
1. 随机遮盖 75% 的 Patches
2. 编码器处理可见 Patches
3. 解码器重建被遮盖的 Patches
4. 通过重建损失训练

优势:
- 无需标注数据
- 学到更好的特征表示
- 下游任务微调效果更好

2. MAE 实现原理

"""
MAE 训练流程:

1. 输入:224×224 图像
2. 分成 196 个 16×16 Patches
3. 随机选择 75%(147 个)遮盖
4. 编码器:处理 49 个可见 Patches
5. 解码器:重建 196 个 Patches
6. 损失:只计算被遮盖 Patches 的重建误差
"""

import torch
import torch.nn as nn

class MAE(nn.Module):
    def __init__(self, image_size=224, patch_size=16, mask_ratio=0.75):
        super().__init__()
        self.image_size = image_size
        self.patch_size = patch_size
        self.mask_ratio = mask_ratio
        
        num_patches = (image_size // patch_size) ** 2
        self.num_patches = num_patches
        self.num_masked = int(num_patches * mask_ratio)
        
        # 编码器和解码器
        self.encoder = nn.TransformerEncoder(
            nn.TransformerEncoderLayer(d_model=768, nhead=12),
            num_layers=12
        )
        self.decoder = nn.TransformerDecoder(
            nn.TransformerDecoderLayer(d_model=768, nhead=12),
            num_layers=8
        )
    
    def forward(self, x):
        # 随机遮盖
        mask = torch.rand(x.shape[0], self.num_patches) < self.mask_ratio
        
        # 编码可见 Patches
        visible_patches = x[~mask]
        encoded = self.encoder(visible_patches)
        
        # 解码重建
        reconstructed = self.decoder(encoded, x)
        
        # 计算重建损失(只在被遮盖位置)
        loss = ((reconstructed[mask] - x[mask]) ** 2).mean()
        return loss

3. 使用预训练 MAE

import torch
from timm.models import mae_vit_base_patch16

# 加载预训练 MAE
model = mae_vit_base_patch16(pretrained=True)

# 微调下游任务
# 移除解码器,只保留编码器
encoder = model.encoder

# 添加分类头
classifier = nn.Linear(768, 1000)

# 微调
x = torch.randn(1, 3, 224, 224)
features = encoder(x)
output = classifier(features)

4. 小结

MAE 的意义:

1. 自监督学习:无需标注数据
2. 更好的预训练:下游任务性能 +3-5%
3. 可扩展性:可以预训练更大的模型

2026 年趋势:
- 自监督学习成为主流
- 无标注数据也能训练好模型
- 预训练 + 微调 = 标准流程

💡 记住:MAE 证明了自监督学习在 CV 中的有效性。这是未来深度学习的方向。


🔗 扩展阅读