Zhangzhe's Blog

The projection of my life.

0%

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

URL

TL;DR

  • BLIPSalesforce 提出的一种图文多模态对齐算法,全称是 Bootstrapping Language-Image Pre-training,是一种自举的图文多模态预训练算法
  • 相较于 CLIP 只能对齐图像和文本表征,BLIP 将任务范式进行了扩展,基本已经有了多模态大模型的雏形

Algorithm

BLIP 整体架构

blip_1.png

  • BLIP 在预训练阶段,包含三种损失函数
    • Image-Text Contrastive Loss:对齐图像和文本表征,和 CLIP 的对齐方式类似,不同的是 BLIP 引入了 Momentum Model,可以使得训练更加稳定
    • Image-Text Macthing Loss:图像和文本匹配损失,输出 TrueFalse,本质是交叉熵损失
    • Language Modeling Loss:语言建模损失,预测下一个词(大模型范式),用于文本内容生成
  • 从上图可以看出,模型实际包含四个部分:
    • Image Encoder:图像编码器,将图像编码为 Image Embedding
    • Text Encoder:文本编码器,将文本编码为 Text Embedding
    • Image-grounded Text Eecoder:图像驱动文本编码器,用文本特征 Cross-Modal Attention 去索引图像特征,输出文本图像特征是否匹配(True / False
    • Image-grounded Text Decoder:图像驱动文本解码器,用文本特征 Cross-Modal Attention 去索引图像特征,用逐个 Token 预测的方式生成文本,回答文本对应的问题
  • 从实现代码看,Text Encoder / Image-grounded Text Eecoder / Image-grounded Text Decoder 实际上共用了一个 Bert 预训练模型的一组参数(仅仅在部分位置不共享参数)
    • Text Encoder
      • 原生 Bert 模型,用于文本编码
      • 不做 Cross-Modal Attention,只做 Self-Attention
      • 最后输出层为表征层
      • 用特殊的 [CLS] 作为任务标识符
    • Image-grounded Text Eecoder
      • 魔改 Bert 模型,加入 Cross-Modal Attention
        • 这种状态处于 encoderdecoder 之间,比 encoder 多了 Cross-Modal Attention,比 decoder 少了 Causal Self-Attention
        • 用文本特征去索引图像特征
      • 最后输出层为二分类层
      • 用特殊的 [Encoder] 作为任务标识符
    • Image-grounded Text Decoder
      • 魔改 Bert 模型,将其转化成一个完全的 decoder 形态,主要包括两点:
        • 加入 Cross-Modal Attention,用文本特征去索引图像特征
        • 由于是生成任务,所以需要用 Causal Self-Attention 取代 Bert 默认的 Bidirection Self-Attention
      • 最后输出层为 vocab prob 层,用于生成文本(下一个文本在词表中的概率)
      • 用特殊的 [Decoder] 作为任务标识符
    • 三个模型仅仅在 Head 层和 Attention 层参数上有所不同,其余参数共享

Bootstrapping 策略

  • BLIP 中的 B 就是 Bootstrapping 的意思,即自举,表示此算法有一种自我增强的方式
  • 自我增强的方式主要是通过 CapFilt 方法实现的:
    • Captioner:用于为图像生成高质量的文本描述
    • Filter:用于过滤掉低质量的图像-文本对,保留高质量的对用于训练
  • CapFilt 工作流程:
    1. 生成伪标签:使用 Captioner 为无标签或弱标签图像生成文本描述,形成伪标签
    2. 过滤伪标签:使用 Filter 评估生成的伪标签的质量,保留高质量的伪标签
    3. 更新训练数据集:将过滤后的高质量伪标签与原始训练数据集合并,形成新的训练数据集
    4. 重新训练模型:使用更新后的训练数据集重新训练模型,从而改进模型的性能

Thoughts

  • 在某种程度上,BLIP 统一了几乎所有的图文多模态任务,除了无法做图像生成任务外,其他任务都可以通过 BLIP 的不同模块组合实现
  • BLIPBootstrapping 策略是一种自我增强的方式,可以使得模型在无监督的情况下不断提升性能,如今这几乎是多模态预训练算法的标配
  • 从实验的角度告诉我们,encoderdecoder 做充分的参数共享是可行的,仅仅在少量的位置上不共享参数,就可以实现完全不同任务的模型