type
status
date
slug
summary
tags
category
icon
password
这篇是苹果的多模态论文,论文核心工作是做了很多消融实验来得到最优的模型结构、参数配置、数据配比等等。所以这里就主要记录下它们的实验和结论,有些我不太熟悉或者有意思的设定也会记录下来。
文中做实验的方式类似贪心搜索,每次实验搜寻一个最优设定,然后搜寻下一个配置
写在前面
看这篇论文是因为在《A Survey on Multimodal Large Language Models》综述里面提到了这篇论文的一个结论:相比提高模型的参数和数据构成,提高图片的分辨率带来的提升会更大。因为之前就观察到多模态里面 image encoder 的参数量通常不会很大,ViT-Huge/14 也才 0.6B,LLM 却动辄几十个B,本以为论文会讲解这一点,看下来发现和我想知道的问题基本没有关联,所以这里问了下 Gmini,感觉回答的还是很准确的,这里就直接贴下来:
在这类架构中,图像编码器(Image Encoder)被定位为“眼睛”,而大语言模型(LLM)是“大脑”。“眼睛”的核心任务是高效地“看清”并提取关键视觉特征,而“大脑”则负责处理这些特征,并结合其庞大的世界知识进行复杂的推理、联想和语言生成。
一个比喻:教会一个模型识别“猫”,远比教会它理解关于“猫”的一切(它的生物学分类、在不同文化中的象征、与之相关的诗歌、网上关于猫的梗图文化...)要简单得多。前者是Image Encoder的任务,后者是LLM的任务。
MM1 的多模态是针对输入部分,输出可以包括 text 和 images,输出还是 text,训练完成之后的 MM1,可以做 in-context learning, zero-shot, OCR

论文做的个实验可以通过下图直观看到具体是什么

- 模型侧实验:包括模态融合的 connector 的类型(严格说这里是把 imgage 的表征映射到 LLM 的空间)、Image encoder 的预训练方式、image 分辨率的处理
- 数据侧实验:包训练超参数、数据混合比例、不同数据源
实验和结论
模型结构消融实验
主要结果就是下面这张图片

相比模型大小和训练数据,图像分辨率更重要
就是 224 提升到 336 提升是最大的。
但是它这里好像也没验证提升模型大小、训练数据、图像分辨率在算力上有什么区别?感觉不是个很有效的实验
对比学习 loss vs Reconstructive Losses
image encoder 的预训练方式好像影响不大,对比学习好像会偏好一些,论文对这一块结论不太明确,因为他们说 Reconstructive Losses 只用了一半数据做预训练,但我感觉 AIM 的方式真不太靠谱。
做这个对比的动机是,很多研究有结论(包括 CLIP 自己论文也提到) CLIP 的方式好像对图像的细节学习不太好,难、抽象的东西任务上表现不好,比如描述图片里面有几只狗这种。
对比学习就是 CLIP,这里重建 loss 引用的也是他们自己的论文 AIM。
这里大致介绍一下 AIM,就是 ViT + 自回归(Prefix causal attention,不是因果解码器, prefix 是做双向注意力机制,且不参与训练)+ MSE loss。
没错,就是这么简单粗暴的 L2 loss,每个 patch 的 embedding 会接一个 12 层的 MLP,然后让输出一个 588 (14✖️14✖️3)维度的向量,然后和归一化之后的 ground truth 做 L2 loss

Connector Type + 图像分辨率

这里测试了 connector 输出 64 个或者 144 个 token 的情况
Connector 测试了三种类型:(具体逻辑还没了解清楚,后续再看这部分吧)
- Average Pooling:做 n✖️n 的 pooling
- Attention Pooling:
- Convolutional Mapping:C-Abstractor
这里主要结论就是,提高图像分辨率和 connector 输出的 token 数量(理解成最终一张图片由几个 token 表示)有很明显提升, connector 类型影响不大
预训练数据
预训练数据用了几个类型:
- Captioned Images:image-text pairs,每张图片会有一个文本说明
- Captioned Images (Synthetic):GPT-4 合成的数据
- Interleaved Image-Text:爬虫爬的文本-图片交替数据,一段文字中间可能会插入一些图片
- Text-only:纯文本

实验结果如下图:

几个结论:
- 图(a),caption 数据提升 zero-shot 能力,Interleaved 数据提升 few-shot 能力
- 图(b),text-only 数据提升 few-shot 和 text 能力
- 图(c),好的数据混合比例在不同能力上可以取得一个比较好的均衡,从实验看 caption/interleaved/text ratio 5:5:1(图中 91/9)各个能力上都不错
- 图(d),合成数据提示 few-shot 能力。这里有点奇怪,合成数据是 caption 类型的,但是从图(a)的结论看,caption 是提升 zero-shot 能力,这不是有点矛盾了?
最终模型结构
- Image Encoder:ViT-H model with 378×378 resolution,用 CLIP 的模式做训练
- Vision-Language Connector: connector 输出 144 个 token,结构用 C-Abstractor
- 数据:caption/interleaved/text ratio 5:5:1
Training Recipe
- LLM decoder 和 image encoder 都是从苹果内部的模型做初始化的,做预训练都是unfrozen 的
- LLM 有 3B, 7B, 30B
- 都在最终数据上训练 200k 个 steps,一共 400B 的 tokens
- 训练序列长度 4096,378✖️378 的分辨率
参数配置:
- 学习率:η = exp(−0.4214 ln(N) − 0.5535),N 是模型的参数(忘记了是哪篇论文也做了个类似这种学习率和 batch_size 的 scaling law)
- weight decay:λ = 0.1η 这里小的有点离谱了?大模型训练好像标准配置是 0.01
MoE 探索:这里是探索 language decoder 部分,自然是说效果不错了
SFT
数据
- 一共 1.45M 的 SFT 数据,有:
- Instruction-response pairs generated by GPT-4 and GPT-4V
- Academic task oriented vision-language (VL) datasets
- Text-only SFT data
- SFT 的时候 language decoder 和 image encoder 都是一起训练的
分辨率提升
这里用了两种方式来提升 image encoder 可以支持的分辨率
- 位置编码插值 + 微调,这里从 448×448, 560×560, 提升至可以支持 672×672
- 图像分解:一张高分辨率图像分和五张低分辨率图像,比如 1344×1344 可以分成 1.降采样到 672×672 2. 4 张分割后的图像

SFT 结果
随着图像的分辨率越大、预训练的 step 越多,后续 SFT 的效果也都越好
