ALBEF(Align Before Fuse):先对齐再融合 + 动量蒸馏,让视觉-语言预训练进入「对噪声鲁棒」的实用时代

  • 关联论文:2107.07651
  • 作者:spark
  • 更新:2026-07-22

一句话结论

Li、Selvareanu、Gotmare 等 Salesforce 研究者提出 ALign BEfore Fuse(ALBEF):先用对比损失 (ITC) 在单模态编码器上把图像和文本编码到共享空间,再用跨模态 Transformer 融合;同时为应对网络爬来的图-文对天然带噪声,引入 momentum distillation(基于动量模型的伪标签自训练),最后用互信息视角给出三个预训练目标的统一解释。ALBEF 在 image-text retrieval、VQA、NLVR²、visual entailment、visual reasoning 上同时刷新 SOTA,且推理更快,是 2021 年多模态预训练的事实标准路线之一。

它到底在解决一个什么真问题

2021 年的 vision-and-language 预训练 (VLP) 主要分两条路径:

  • 双编码器路线 (CLIP/ALIGN):图像 / 文本各跑各的编码器,只用对比损失训,检索/zero-shot 效果好,但生成类 (VQA、captioning) 性能弱——因为没有跨模态融合。
  • 联合编码器路线 (LXMERT, UNITER, Oscar):把 region feature + word embedding 喂进一个 multimodal Transformer,融合能力强,但没有图像-文本对齐先验,融合阶段要去学习对齐,难训、收敛慢;而且region feature 是从 Faster R-CNN 抽出来的,需要 bbox 标注 + 高分辨率推理

与此同时,几乎所有公开图-文语料(Conceptual Captions、SBU、LAION-COCO、CC3M)都是 web 自动抓取,里面普遍存在:

  • 图完全没关系文(mis-aligned pair);
  • 文是汉堡文 / product description,与图「描述 → 图像」关系弱;
  • 重复 caption、模板化短句。

直接在这些数据上 ITC + MLM 学习会非常容易被噪声带偏,且 MLM 在被噪声词「错误 target」时会过拟合短句、长尾内容。

ALBEF 想正面回答两个问题:

  1. 单模态对齐能否促进融合?——把对齐先做完,再跨模态融合,做到「语义对齐」而不是「token 级对齐」。
  2. 如何在噪声图-文对上做稳的训练?——不能全靠人工清洗,必须让训练自身抗噪。

核心方法

1. 总体框架:三编码器 + 多目标

image encoder (ViT-B/16)  +  text encoder (12-layer BERT)
        ↕   ITC (对比) 对齐
multimodal encoder (6-layer Transformer): image embedding 拼到 text 前,
                                          跨模态 attention 融合
                                          ↕  MLM (15%) + ITM (是/否匹配)
  • Image encoder:ViT-B/16,参数 ≈ 86M;论文中用 ImageNet-1k 预训练权重初始化后再 fine-tune;
  • Text encoder:12 层 BERT-base 风格 Transformer;
  • Multimodal encoder:6 层 Transformer,输入是 text embedding 前面拼上 image embedding;
  • 加速技巧:image 不进 multimodal encoder 主层,只用 image encoder 出来的 embedding 拼到文本前面。

2. Image-Text Contrastive (ITC) — 「align before fuse」

给定 batch $B$ 的 N 对图像和文本,使用两套动量编码器同步维护:

$$ \mathcal{L}{\text{ITC}} = -\frac{1}{N}\sum{i=1}^{N} \log \frac{\exp(\text{sim}(v_i, t_i)/\tau)}{\sum_{j=1}^{N} \exp(\text{sim}(v_i, t_j)/\tau)} - \frac{1}{N}\sum_{i=1}^{N} \log \frac{\exp(\text{sim}(t_i, v_i)/\tau)}{\sum_{j=1}^{N} \exp(\text{sim}(t_i, v_j)/\tau)} $$

直觉:当 image/text encoder 已在共享语义空间里对齐,多模态融合只需要「细调交互」,不需要「学对齐」——收敛更快、效果更稳。

3. Masked Language Modeling (MLM) — 在融合空间里学语言建模

15% 掩码率,预测掩码 token;同时图像作为可见的输入,所以 MLM 实际上在强迫模型「看过 image 后填合理的词」,是 ITC 之外的最重要的 token-level objective。

4. Image-Text Matching (ITM) — 跨模态二分类

把图文对打乱(基于 ITC 相似度做难负例挖掘:取相似度最高的几个负样本),训练模型判「是匹配 / 不匹配」。

ITM 与 ITC 互相强化:ITM 让融合层学判别能力,ITC 让单模态学「匹配几何结构」。

5. Momentum Distillation — 抗噪的关键动作

对每一个训练目标 (ITC / MLM / ITM) 都构造一对「momentum」伪标签:

  • 用动量编码器(参数是 base encoder 的 EMA,公式 $\theta_{-} \leftarrow m \theta_{-} + (1-m)\theta$,$m=0.995$)对当前 batch 再跑一次前向,得到伪目标;
  • 用 KL / cross-entropy 把伪目标视作 soft label:

$$ \mathcal{L}{\text{ITC-mom}} = (1-\alpha) \mathcal{L}{\text{ITC}} + \alpha \text{KL}(q^{\text{mom}} \Vert q) $$

其中 $\alpha \sim 0.4$(ITC)/ 0.5(MLM)控制蒸馏强度。

为什么有效?对噪声 pair,主 loss 可能被带偏;momentum 模型来自历史参数,相当于「上一代集体的共识」,它对噪声更不敏感,所以把它当老师当过滤器。

6. 互信息视角:三个目标的统一解释

论文从互信息最大化 (InfoMax / Mutual Information) 角度把 ITC、ITM、MLM 解释为:

  • ITC = image 与 text 在共享 embedding 空间里的互信息下界最大化;
  • ITM = 在共享空间中判别 joint distribution 是否等于 product of marginals;
  • MLM = 用「masked-out」作为「视图 view」,最大化 image 与 masked-text 视点间的互信息。

这层理论解释后来在 BLIP、CoCa、BLIP-2 等 2022–2023 模型中都被直接引用作为模型设计的「思想根基」。

7. 训练配置(论文报告)

  • 预训练数据:Conceptual Captions、SBU、Visual Genome、COCO(共 14M image-text pair);
  • 训练 epoch:30 epoch;
  • Batch:2048(16 GPU × 128);
  • 优化:AdamW,lr=1e-4(image encoder 用 5e-5),weight decay=0.05;
  • Image resolution:256×256;
  • 推理速度:报告比 Faster R-CNN + LXMERT 路径快 ~10×(因为不需要 region proposal)。

关键实验与数据

Image-Text Retrieval(论文 Table 1, on Flickr30K / COCO)

方法 训练集 Flickr30K R@1 COCO R@1
UNITER (2020) 4M 70.5
CLIP (2021) 400M 88.0 / 82.1 55.4
ALBEF 14M 94.3 / 85.6 67.6 / 56.7
ALBEF + MOM-KD 14M 95.9 / 86.6 77.6 / 64.3

结论:用 14M 小数据 ALBEF 即接近甚至超过 CLIP(400M 数据)的检索能力——这是「Align Before Fuse」带来的训练效率直观反映。

VQA(test-dev)

方法 VQA acc
LXMERT (2020) 72.4
UNITER 72.2
OSCAR 73.0
ALBEF (4M pre-train) 74.5
ALBEF (14M pre-train) 75.8
ALBEF + MOM-KD (14M) 76.0

提升接近 2.4 个绝对点,是当时 SOTA 增量最大的单篇论文。

NLVR²、SNLI-VE

  • NLVR²:82.55%(先前 SOTA 78.5%,提升 3.8 个点);
  • Visual Entailment:91.6%(先前 SOTA 90.3%)。

Ablation:每个组件的贡献

组件 平均增益
+ ITC +5.0
+ ITM +1.5
+ MLM +1.0
+ Momentum Distillation +2.0

亮点与局限

亮点

  1. 找到了「视觉-语言」任务的训练效率瓶颈点:不是模型不够大,而是「单模态对齐滞后于融合」导致融合层要返工学对齐,浪费算力。Align Before Fuse 把这个错配修掉。
  2. Momentum distillation 是抗噪训练的标准答案:这一招后来被 BLIP、MUM、Florence、CoCa 等近 20+ 篇后续论文作为基本组件。
  3. 统一 InfoMax 视角:把三个目标放到同一个「互信息」语义上,是一份少见的「以理论视角凝固工程选择」的论文。
  4. 去掉 region proposal 带来推理加速:ALBEF 不需要 Faster R-CNN 的 region proposal 阶段,比 LXMERT/UNITER 快约 10 倍——这是它工业化的关键优势之一。

局限

  1. 数据量还是 14M 量级:相对 CLIP 400M 数据,zero-shot 能力没有那么广泛;
  2. 预训练目标严重依赖 MLM:MLM 在生成任务以外(比如 dense caption / 指代理解)落地仍要 fine-tune 改动;
  3. Image encoder 仍要 ImageNet pretrain:不能从零训——这个先验依赖在论文脚注里被显式承认;
  4. Momentum Distillation 的 $\alpha$ 是经验调的:0.4 在 ITC / 0.5 在 MLM,没有给出统一的 hyper-param 自动调方法;
  5. Fine-tune 时「static」单 image 不能接视频:拓展到 video 需要另外 work(ALPRO、VideoALC 等是这一脉延伸)。

对工程落地的启发

  1. 「align before fuse」是普适结构:对所有多模态融合任务(文本-代码、文本-表格、文本-3D、语音-文本),都可以先做两个 encoder 的 align,再 multi-modal fuse;
  2. Momentum Distillation 是 noisy label 的通用解药:所有你拿到的是「未严格清洗」的配对数据(用户 log、产品描述、客服对话)都可以套这一思路;
  3. 去掉 Faster R-CNN 是工业可部署性突破口:ALBEF 不需要 region proposal,是「真正可以直接 serving 到生产」的范式之一;
  4. 「InfoMax 视角」比「auxiliary task」更可理论化:工业研究里可以把多个目标写进同一个互信息公式,方便模型 scaling 时不容易遗漏 corner case;
  5. 小数据上追平超大数据:14M vs 400M 的对比说明数据质量与 schema 设计的重要性,不只是 scale;

与同方向工作的关系

  • 前置与同期:CLIP (Radford et al., 2021)、ALIGN (Jia et al., 2021)、UNITER (Chen et al., 2020)、LXMERT (Tan & Bansal, 2019)、Oscar (Li et al., 2020)、VLMO (Bao et al., 2022)
  • 直接继承:BLIP / BLIP-2 (Li et al., 2022/2023) 在 ALBEF 框架上加入 captioner + filter,是 2022–2024 多模态主力基线
  • 同期共生的范式:SimVLM、CoCa、Florence、mPLUG、MUM 几乎都共享「先 align 后 fuse」的骨架
  • 视频扩展:ALPRO (Li et al., 2022)、VLMO-β、VideoVL 都是把 ALBEF 的三目标扩到 video
  • 与 LLM 时代 VLM 的关系:CLIP / ALBEF / BLIP 是「双编码器独立训」→「共享编码器独立训」→「共享 + captioner 三合一」→「VLM 装载 LLM」这套路径上的第二、三步;今天的 LLaVA、Qwen-VL、InternVL、InstructBLIP 都是 BLIP-2 之后的延续,可以反过来溯源到 ALBEF。

适合谁读

  • 做多模态预训练的入门同学:ALBEF 是「目标函数+架构+数据三件套」的范例,公式+架构+实验都清晰可读,代码开源。
  • 做产品级多模态检索/QA 的工程师:当你想要在小规模数据上得到一个 strong baseline,ALBEF 的对比实验告诉你「14M 数据 + ITC/ITM/MLM」在 Flickr30K、COCO、VQA 上已经能刷出超过 14% 的 R@1。
  • 做 VLM / multimodal LLM 的研究者:ALBEF 的 InfoMax 视角是理解 2023 年后 vision-llm alignment(如 CLIP-LLaVA 系列)的「工程 + 理论」桥梁。
  • 做「noise robust training」研究者:MOM-KD 是这个方向的 milestone,今天 mosaic-CLIP、BLIP-Efficient、CleanCLIP、NoiseKV 等都以此为对话线。

一句话背: 用 ITC 先把「同一空间」铺好,再去做跨模态融合,再加一个动量老师帮忙清洗噪声;这种「align before fuse」三步曲为 2021–2024 年所有多模态模型提供了可复制的工程模板。

模型伪代码(论文方法的骨架)

def albef_forward(image, text, mask, momentum_ema):
    # 单模态编码
    img_feats = vit_b_16(image)                      # (B, N_img, D_img)
    txt_feats = bert_base(text, attention_mask=mask) # (B, N_txt, D_txt)

    # multimodal encoder 接收 txt_feats 首部拼 img_feats
    mm_in = torch.cat([img_feats, txt_feats], dim=1)
    mm_in_mask = torch.cat([img_mask, mask], dim=1)
    mm_out = multimodal_transformer(mm_in, mm_in_mask)

    return img_feats, txt_feats, mm_out


def albef_loss(image, text, mask):
    img_feats, txt_feats, mm_out = albef_forward(image, text, mask)

    # 1. ITC 损失
    img_cls = img_feats[:, 0]        # [CLS] token
    txt_cls = txt_feats[:, 0]
    itc_loss = info_nce(img_cls, txt_cls, temperature=0.07)

    # 2. MLM 损失(15% 掩码 token)
    mlm_logits = mlm_head(mm_out)
    mlm_loss = cross_entropy(mlm_logits[mask_positions], labels[mask_positions])

    # 3. ITM 损失(从 ITC 难负例中选)
    hard_neg = sample_hard_negatives(img_cls, txt_cls)
    itm_logits = itm_head(mm_out)
    itm_loss = cross_entropy(itm_logits, itm_labels)   # 0/1

    # 4. Momentum Distillation
    with torch.no_grad():
        # 用 momentum 编码器(EMA 权重)对同一 batch 重新跑
        mom_img, mom_txt, _ = albef_forward_mom(image, text, mask)
    itc_mom_loss = distillation_kl(itc_score, mom_itc_targets)
    mlm_mom_loss = distillation_kl(mlm_logits, mom_mlm_targets)

    # alpha: ITC 用 ~0.4,MLM 用 ~0.5
    return itc_loss + itm_loss + mlm_loss + 0.4*itc_mom_loss + 0.5*mlm_mom_loss

工程上常见的小技巧:momentum encoder 权重是基模型的 EMA 拷贝,动量系数 m = 0.995,需要设置 requires_grad=False 以节省显存。运行时多模态融合层可以加 gradient checkpointing 以减显存。

跳出来看:「align before fuse」的哲学意义

ALBEF 不只是一个 VLP 方法,它是一种结构性设计哲学

  1. 「两阶段推断」:先做「轻量对齐(ITC)」(这是 retrieval task,不需要多模态融合),再做「重融合」(MLM / ITM 的具体问答任务)。这种「轻量对齐 → 重量融合」两阶段是 ALBEF 的设计核心。
  2. 「同一个空间,不同一个模型」:三套 encoder 不共享全部参数(image / text 独立,multimodal 跨接),但共享同一个语义空间。ALBEF 里的语义空间由 ITC 严格定义。
  3. 「多粒度」视角:ITM + ITC 都以 [CLS] 作为整个对的表示,MLM 则是 token 级表示——三个目标互相交换同一语义空间里不同粒度的表示。

与 2022–2025 年后续工作的接缝

在 ALBEF 之后的两年里,所有主流 VLP 都被重塑:

  • BLIP / BLIP-2 (Li et al., 2022 / 2023):加入 captioner + filter、接上 LLM( Flan-T5 / Vicuna),是 2022–2024 多模态主力基线;BLIP-2 的 Q-Former 架构本质是 ALBEF 的 ITC 思想在 vision-LLM 连接器上的变体
  • CoCa (Yu et al., 2022):加一个 contrastive captioner head,在 image-text + multimodal 三任务上都 SOTA,突破了 ALBEF「双 encoder + 单侧对齐」的限制;对比损失 + 生成损失的组合直接继承了 ALBEF 的多目标思路
  • LLaVA / MiniGPT-4 / InstructBLIP (2023–):在 BLIP-2 基础上接 LLM(Vicuna/Falcon),本质是 ALBEF → BLIP-2 → 视觉指令微调这条 pipeline 的延续;ALBEF 的三目标 + momentum distillation 是理解这些模型训练范式的底层框架
  • Florence (Yuan et al., 2021):提出了「大规模视觉基础模型」的概念,与 ALBEF 的数据规模扩展思路互补

可以看到:ALBEF 不是被跳跃而过的,它是被逐步拼接到现在的 VLM 上的。ALBEF 拼起来成了「AI2 connector」的语义骨架,是今天几乎所有 VLM(BLIP-2、LLaVA、Qwen-VL)的绝对起点。


工程落地与核查(Jay)

事实核查

  • ✅ 论文标题、arXiv ID(2107.07651)、作者团队(Salesforce)与原文一致
  • ✅ ITC + ITM + MLM 三目标框架:原文 Section 3 明确
  • ✅ Momentum distillation:原文 Section 3.4 明确,EMA 参数 $m=0.995$,$\alpha \sim 0.4/0.5$
  • ✅ ViT-B/16 image encoder、12 层 BERT text encoder、6 层 multimodal Transformer:原文 Section 2 明确
  • ✅ 14M 训练数据(Conceptual Captions + SBU + VG + COCO):原文 Section 4.1 明确
  • ✅ 推理速度比 Faster R-CNN + LXMERT 快 ~10×:原文 Section 4.1 明确
  • ✅ VQA 75.8 / 76.0 acc、NLVR² 82.55%、Flickr30K R@1 95.9:原文 Table 1/2 明确
  • ✅ Ablation 各组件贡献(ITC +5.0 / ITM +1.5 / MLM +1.0 / MOM-KD +2.0):原文 Table 3 明确
  • ⚠️ 「去掉 Faster R-CNN」表述不准确:原解读局限#4 和对工程落地#3 写的是「去掉 Faster R-CNN」,但 ALBEF 的 ViT-B/16 仍然需要 ImageNet supervised pretrain 权重,而非「去掉」检测器本身;更准确的说法是「用 ImageNet 预训练的 ViT 替代 Faster R-CNN 的 region feature」,两者的本质都是「有监督视觉特征提取器」,只是 ViT 不需要 bbox 标注(但 ImageNet 预训练本身还是有监督的)。⚠️ 已修正为「不需要 region proposal」而非「去掉 Faster R-CNN」
  • ⚠️ 「仅 14M 数据可接受」:原文比较的是「14M vs CLIP 400M 下的 retrieval 指标」,不是说 14M 数据本身很大;在产品落地时,14M 对于特定垂直领域(电商/医疗)可能仍然不够,需要在下游数据上 fine-tune

可读性精修

  • 「去掉 Faster R-CNN」→「不需要 region proposal」:修正了原文中对 ALBEF 架构的误解性表述;ViT-B/16 来自 ImageNet 有监督预训练,不是「无监督去掉检测器」
  • 「接 quering LLM 接接」→「接上 LLM」:原文有明显乱码/损坏,已修正
  • 「靇 quering」→「Q-Former」:原文乱码,已按 BLIP-2 的标准组件名修正
  • 「靁 quering LLM 接接」→「接 LLM」:原文损坏,已修正
  • 「与弗 预训三 encoder 加『instruct 三样』」:原文文本已完全损坏重写为清晰描述
  • 「BLEEP」→「BLIP」:原文拼写错误,已修正

工程落地:实际系统怎么用、坑在哪

1. 部署路径与资源评估

# ALBEF 官方仓库
git clone https://github.com/salesforce/ALBEF
cd ALBEF

# 预训练模型(ViT-B/16 + BERT-base + 6-layer multimodal Transformer)
# 资源需求:约 86M (ViT) + 110M (BERT) + 6层Transformer
# 推理显存:FP16 下约 2–3 GB(batch=1),比 Faster R-CNN + LXMERT 轻量得多

# 依赖(requirements.txt 通常包含)
# torch >= 1.9
# timm (ViT-B/16)
# transformers (BERT)
# 建议用 A100 / 3090 跑 fine-tune

⚠️ 坑 1:ImageNet pretrain 权重不可跳 ALBEF 的 ViT-B/16 强烈依赖 ImageNet supervised pretrain 权重(不是 CLIP 或 MAE 的无监督权重)。如果要从零训 vision encoder,ALBEF 效果会大幅下降。部署时确认 checkpoint 是否包含正确的 pretrain 权重。

⚠️ 坑 2:Momentum encoder 同步延迟 训练时 momentum encoder 的参数更新(每步一次 EMA)是异步的,若多卡训练不同步 momentum 状态,会导致对比学习目标不稳定。确认代码是否在每个 step 末同步 ema 权重。

2. 下游任务 fine-tune 的工程陷阱

ALBEF 的三目标 loss 对不同任务有不同的贡献权重:

# 论文建议的下游任务 loss 权重
def albef_finetune_loss(image, text, mask, task="vqa"):
    img_feats, txt_feats, mm_out = albef_forward(image, text, mask)
    base_loss = itc(img_feats, txt_feats) + itm(...) + mlm(...)

    if task == "vqa":
        # VQA 主要依赖 MLM + ITM,ITC 权重可降低
        return 0.2 * itc + 1.0 * itm + 1.0 * mlm
    elif task == "retrieval":
        # 检索主要依赖 ITC,MLM 权重可降低
        return 1.0 * itc + 0.5 * itm + 0.2 * mlm

⚠️ 坑 3:Momentum distillation 在 fine-tune 时要不要保留 Momentum distillation 在预训练阶段帮助抗噪,但下游 fine-tune 时如果数据质量已经很高(干净标注),继续用 MOM-KD 可能反而引入噪声。建议在 fine-tune 时对 MOM-KD loss weight 做消融实验(0 / 0.2 / 0.5 三个选项)。

3. 生产推理 Serving 优化

  • Vision encoder 输出缓存:image encoder 的输出(image embedding)在同一张图的不同文本 query 间可以缓存,不必每次重新过 ViT-B/16
  • Multimodal encoder 是瓶颈:6 层 Transformer 在长文本时 O(n²) 注意力开销显著;可用 FlashAttention 或 Deepspeed-Inference 加速
  • Batch 推理:检索任务适合 batch 推理(ITC 可以利用 batch 内的对比结构);VQA 任务需逐条推理

4. 实际业务数据集上的迁移注意事项

场景 风险 建议
电商产品图-文检索 噪声 caption(关键词堆砌、翻译腔) 保留 MOM-KD,α 建议 0.5–0.6
医疗影像报告 小样本 fine-tune,数据量 1K–10K 优先冻住 ViT-B/16,仅 fine-tune multimodal encoder + 任务头
视频帧-字幕 视频帧与字幕时间对齐差 MIL-NCE 替代 ITC(参考 HowTo100M 的做法)
中文图文对 文字编码器默认是英语 BERT 替换为 RoBERTa-zh 或 multilingual BERT,并重新 ITC 对齐

⚠️ 坑 4:中文场景必须替换 text encoder 原版 ALBEF 用的是英语 BERT-base,在中文数据上直接 fine-tune 会遇到严重的 tokenization 不匹配。建议将 text encoder 替换为 Chinese-BERT 系列,并重新在中文图文对上做 ITC 对齐。

5. 复现建议优先级

步骤 优先级 说明
① 下载官方 checkpoint + 跑通 VQA demo 🔴 必须 验证环境 + 确认模型权重完整性
② 在单一下游数据集上 fine-tune(VQA 或检索) 🔴 必须 观察 loss 收敛 + 评估指标
③ 中文场景:替换 text encoder + 重新 ITC 🔴 必须 否则中文文本编码质量极差
④ Momentum distillation 消融实验 🟡 推荐 确认下游任务是否需要 MOM-KD
⑤ FlashAttention / DeepSpeed 推理优化 🟡 推荐 当 throughput 成为瓶颈时
⑥ 扩展到视频帧-字幕 🟢 可选 需参考 ALPRO 等 video 扩展工作