前言
Hi大家好,我叫延捷,是一名计算机视觉算法工程师,也是叉烧的老朋友了。我们计划发布一系列关于多模态大模型的文章,帮助大家快速、精准地了解多模态大模型的前世今生,并且深入各个多模态大模型领域优秀的工作,希望能给大家一个脉络性的盘点,一起学习,共同进步。
Instruction
多模态大模型当前的发展如火如荼,随着LLM技术的不断发展、完善,把图像、视频、语音、遥感等多模态信息和文本结合在一起成了当前的一大热点。这里我将发表一系列关于多模态大模型的技术文章,我并不会过多列举一些不必要的论文细节和指标,而是会着重讲述:
“心路历程”:一个系列工作逐步发展的路径,作者是如何根据当前工作的缺点一步步优化的,并且会总结出每篇工作的highlight,在精而不在多;
“数据细节”:各个工作中对数据处理的细节,包括但不限于数据的收集,采样时的分布,如何清洗/重建noisy数据,如何进行数据预处理,视频抽样的方案等,这些对算法工程师来说是同样重要的一环;
“前人肩膀”:各个工作中隐藏着一些非常值得盘的消融实验,站在前人的肩膀上,使用这些已有的消融实验结论,不仅能帮助我们更好地理解论文,更能在实际工作中少做些不必要的实验and少走弯路。
说回多模态大模型,我们很自然地从BLIP和LLaVA中盘起,本文会以我个人的视角介绍下BLIP到LLaVA的一系列工作。
BLIP系列
BLIP
《Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation》(2022)
核心一是使用了Unified方式同时建模了多个Vision-Language任务,二是使用Bootstrapping策略优化了网上爬取的Noisy的图文pair数据(个人非常欣赏这个策略思路)。
模型结构方面汲取了ALBEF和VLMO的精华,非常优雅地联合建模了多个视觉语言任务,比起这俩拥有了文本生成能力
ALBEF和VLMO的模型示意草图(来自https://www.youtube.com/watch?v=S1le41J76lQ)
针对3个任务,在文本端共享了大量参数,损失函数分别为:
ITC(Image-Text Contrastive):类似CLIP,取所有img tokens与[CLS] token点乘最大值,来计算交叉熵损失;
ITM(Image-Text Matching):一个二分类损失,针对输入图像和文本,分别取当前batch中ITC最大的负样本(hard-neg mining),加上本身图文对作为正样本来计算损失;
LM(Language-Modeling):GPT的损失,autoregressive loss,引入Casual Self-Attn Mask;
由于每次计算这几个Loss时都要进行好几次的模型推理,所以训练还挺耗时的
BEIT模型结构,充分体现了标题中的"Unified",并且加入的Decoder+LM Loss的分支
Highlights:
把ALBEF和VLMO结合了起来,Unified建模多个图文任务,同时引入Decoder分支,赋予了图像caption的能力,为此带来了BLIP第二个highlight;
提出了CaptionFilter的思想,Dataset Bootstrapping的策略有效清洗了网上爬取的Noisy数据集,也从侧面说明在大模型时代,哪怕我们只需要进行sft或者lora,对数据集的理解、收集、清洗、过滤、重建,依然是十分重要且不可或缺的一环。