多模态大模型 CLIP, BLIP, BLIP2, LL
三年前,我被一张猫图打脸了!
那时候我还在跟图文匹配死磕,每天盯着双塔模型发呆。
你猜怎么着?CLIP横空出世了。400M图文对,训出来的zero-shot能力,简直离谱!一张猫的图片丢进去,结果匹配到的文本居然是“a cat sitting on a couch”——准得离谱。
我当时就一个感觉——又兴奋又扎心。
兴奋的是,这玩意儿比我自己精调半天的模型还靠谱。扎心的是,我马上意识到:CLIP说白了就是个“翻译官”,它只是把图像和文本拽到一个向量空间里。
真要它看图写作文、做推理?
歇菜。
然后呢?BLIP来了。
你永远猜不到我踩过的坑有多深
刚读BLIP论文那会儿,我承认我有点懵。
这家伙一口气搞了三个loss:ITC做图文对齐、ITM做匹配分类、LM做生成。当时我在内部数据集上试了BLIP-base,caption质量确实比纯CLIP好了一个档次。
但真正让我记住它的,是那个bootstrapping。
听着挺美好对吧?用模型自己生成的caption反哺训练。
我实操的时候才发现——这玩意儿太坑了!
模型生成的句子疯狂重复,语义残缺不全。把这些垃圾数据倒灌回去,效果反而变差。什么叫“越练越瞎”?
说到这儿我得说一句:自举这东西,需要很干净的种子数据。千万别以为随便搞搞就能起飞。
那段时间我每天都在想:多模态这玩意儿,真的“可以玩”了?
直到BLIP-2出现。
Q-Former,简直是给穷人的礼物!
2023年2月,我读BLIP-2那篇论文。
说实话,看到作者把视觉模型和LLM都冻住,只靠一个不到2亿参数的小模块就串起来,我第一反应是——这特么也行?
后来我拿自己的RTX 3090跑了一遍。
我的天!显存真他妈省!
以前Flamingo那种gated cross-attention方案,24G显存根本塞不下。Q-Former只抽出32个query token去跟图像特征交互,输入长度从几百直接压到几十。
训练速度快得飞起。
我记得很清楚:用COCO图文对训了两个晚上,第一阶段结束BLEU就涨了十多个点。当时我在上写过一段话——
Q-Former做了三件事:
ITC把query和文本拉到一起,ITM区分正负样本,LM强迫query提取能“生成文本”的视觉特征。
最关键的是什么?self-attention mask的设计。
它让query既能与图像交互,也能与文本交互,但文本和图像之间不直接交互,信息全靠query传递。这种“信息瓶颈”的做法,说白了就是——抛弃掉90%的视觉噪声,只留语义相关的部分。
我后来试着把query数量改成64。
效果没有明显提升,但显存涨了一截。
32个,就是甜点。
而且BLIP-2的模块化太香了!我先后在它的框架里换了EVA ViT、InternViT,又把OPT换成Vicuna和Qwen,只重训Q-Former就能适配。
这个可插拔的思路,后来催生了MiniGPT-4、InstructBLIP等一系列作品。
LLaVA和InstructBLIP,你站哪边?
LLaVA出来的时候,我跟很多人一样,第一个反应是——
数据还能这么造?
作者拿GPT-4生成多轮对话指令,只用文字描述图片内容,不需要人工标注。我试着复现了一下,GPT-4的dense caption质量确实不错。
但成本也不低。
造了几千条对话,烧了几十刀。
而且我测了LLaVA-1.5-7b-hf,发现它对一些细粒度问题(比如“桌子上有几本书”)经常翻车。
反而是BLIP-2那种基于ranking的方式更稳。
LLaVA的优势是什么?对话自然、能聊。
缺点是——不够精确。
InstructBLIP则是另一个路子。
它是BLIP-2的升级版,核心是把“指令微调”这个在NLP里玩烂的东西搬到了多模态。我仔细读了论文里那套数据组织方法:11类任务、26个数据集,分成13个held-in和13个held-out。采样按数据集大小的平方根。
这个细节我当时没在意,后来自己训模型才发现——自然分布采样会让小数据集被碾压,均匀采样又会让大数据集欠拟合。平方根采样,确实是个有效的折中方案。
我还特意试过它的人工指令模板。
每个任务做了10–15条不同的问法,对简洁型数据加了"short"或"briefly"。我的测试结果:加了"short"的指令生成的caption确实短了一半。
可见指令格式的影响有多大!
MME那个评估体系也是基于类似的考虑——干脆统一用"Please answer yes or no",既公平又好算分。
MME评估,糙但有道理
说到评估,MME这篇工作我挺喜欢的。
它避开了GPT打分和人工主观性,用二元答案(Yes/No)做定量统计。我拿自己微调的模型跑过那14个子任务,发现——
感知类任务(存在性、数量、颜色)基本都在90%以上。
但认知类(代码推理、翻译)直接掉到60%多。
这很符合直觉:模型把“看到”的东西说得挺准,但“想”的能力还很弱。不过MME的指令太过简单,模型如果没法在这种“裸指令”下工作,说明泛化性不够。
我同意这个结论。
三件事,彻底改变了多模态大模型
回头看这几个模型的演进,有三个突破我觉得特别关键。
首先是轻量化连接。Q-Former让用得起显存的人也能参与。BLIP-2之后,小团队自己拼ViT+LLM已经成了标配。
其次是指令微调和自动数据生成。LLaVA和InstructBLIP证明:不需要纯人工标注也能训出能用的对话模型。但我也提醒一下——GPT-4生成的数据有版权和可靠性隐患,长远看还得靠自监督或更干净的数据源。
最后是简洁统一的评估方式。MME这种Yes/No形式虽然糙,但避免了Prompt Engineering带来的不公平。我期待有更强的体系出现——比如能动态生成测试样本、覆盖更多模态。
至于下一步?
我猜会更卷模型效率和高频场景。MobileVLM已经做到2B参数在手机上跑实时VQA,而Qwen-VL证明了更大规模的数据清洗的重要性。
还有一个方向是强化学习直接对齐偏好。InstructBLIP之后有DRESS,但我还没仔细试过。
写到这儿,我想说
反正这领域更新太快。
我上周刚跑通一个基于BLIP-2改的视频问答模型,下周说不定就被新论文秒了。
但没关系。
踩坑记录摆在这,希望有人能从我翻过跟头的地方直接跑起来。
毕竟——
这赛道还没定型,机会还多着呢。
所以,趁早入场,趁早踩坑,然后——
跑得比我快。
读者评论 5