• 作者:老汪软件技巧
  • 发表时间:2024-10-17 07:02
  • 浏览量:

论文地址:/pdf/2409.04…

论文源码:/WePOINTS/We…

项目主页:huggingface.co/papers/2409…

导读

2022年11月30日,OpenAI推出了ChatGPT,最初仅是在业界的小范围内引起了关注。几个月后,GPT-4.0的发布彻底点燃了整个行业并从此进入了普罗大众的视野。经过一年的发展,大家逐渐意识到单纯的LLM已无法满足需求,这一点从各大厂商和顶尖科研机构发布的成果中可以看出,人工智能正朝着VLM的方向发展。

今年,各路大神纷纷亮出自家的视觉语言模型,仿佛一场科技界的选美大赛。首当其冲的便是著名的闭源明星选手如 GPT-4、Gemini Pro 1.5和Claude 3 等模型,其成功将 LLM 扩展到视觉语言模型领域。而 LLaVA、QwenVL、InternVL 等开源届的代表新秀也不甘示弱,各方面能力也在不断赶超、逼近甚至部分超越闭源模型。

然而,这场视觉AI的狂欢也面临着几个棘手的问题:

"闭门造车"之谜: 许多模型像谍战片里的特工,行踪神秘,训练细节讳莫如深。相比之下,开源模型倒是敞开了大门,但其训练策略仍有许多未解之谜。

"数据饥渴症": 目前的模型都患上了"数据饥渴症",对训练数据的需求似乎永无止境。研究人员们绞尽脑汁,不断寻找新的数据来源,甚至动用合成数据的魔法,就是希望有朝一日能喂饱这些贪婪的AI。

"微调大作战": 在微调阶段,研究者们如同调酒师,不断尝试各种数据配方,期望调制出最佳性能的AI鸡尾酒。

面对这些挑战,微信团队摩拳擦掌,提出了自己的三板斧:

"超级基线": 俗话说,基础不牢,地动山摇。首先,研究人员打造了一个实力超群的baseline模型,为接下来的研究奠定了坚实基础。

"数据魔法": 其次,借鉴了LLM中的ppl技巧,开发出了一套高明的数据筛选方法,最终炼就了100万条精华数据。

"模型大乱炖": 最后,在微调阶段,作者们将各种数据大杂烩煮在一起,结果发现这种"大乱炖"方法居然能让模型性能更上一层楼!

总之,本文的实验结果令人振奋,证明了这套方法确实能够显著提升模型性能。让我们一起往下学习吧!

强大的基线

我们首先将现在开源工作中的各种技术(动态高分辨率,CapFusion,双视觉编码器,Individual Select)进行了整合,并提出一种新的动态分辨率分割方法,以搭建一个更加稳健和高效的 baseline。

上图是POINTS的模型结构。对于每个模块(例如 OCR ViT、General ViT、MLP Projector 和 Large Language Model),虚线左侧标签表示预训练时的状态,右侧标签表示指令调优时的状态。

保持固定纵横比的高分辨率动态显示

众所周知,将高分辨率图像提供给视觉语言模型有利于捕捉细粒度细节和减少幻觉。与 LLaVA-Next 和 InternVL-1.5 中的动态高分辨率不同的是,我们在对高分辨率图像进行切分时保持了图块的纵横比。在InternVL-1.5 中,在分割图像之前,图像大小会被调整为预定义分辨率中与其最接近的目标分辨率,这种切图方式容易导致失真。而我们通过在切图时引入 overlap 的方式在把图像切割为固定大小图块的同时,保持了图块纵横比。

如上示意图所示,CATTIY 的具体步骤如下:

i) 首先,预定义图像可以分割成的最大图块数(在我们的实验中设置为8)。

ii) 列出图块数不超过最大图块数的所有整数分辨率组合。

iii) 给定一个高度为H和宽度为W的图像,我们寻找与分辨率最近的整数分辨率,乘以编码器的图像尺寸,得到目标图像的高度Hr和宽度Wr,并通过以下公式将图像大小调整为目标大小Ht × Wt:

ratio=min⁡(H,W)/min⁡(Hr,Wr)ratio = \min(H, W)/\min(H^r, W^r)ratio=min(H,W)/min(Hr,Wr)

Ht=ratio×HH^t = ratio \times HHt=ratio×H

Wt=ratio×WW^t = ratio \times WWt=ratio×W

给定视觉编码器的输入分辨率 Hu×WuH_u \times W_uHu​×Wu​,目标图像应分为 Hu/Hv×Wu/WvH_u/H_v \times W_u/W_vHu​/Hv​×Wu​/Wv​ 图块。接下来,我们使用一个滑动窗口分割目标图像 Ht×WtH_t \times W_tHt​×Wt​,该窗口的步幅分别为 Height 和 width。步幅 (Sh,Sw)(S_h, S_w)(Sh​,Sw​) 的计算方式如下: (若 Hu/Hv=1H_u/H_v = 1Hu​/Hv​=1, 则 ShS_hSh​ 为0,若 Wu/Wv=1W_u/W_v = 1Wu​/Wv​=1, SwS_wSw​ 为0)

Sh=(Ht−Hr)/(Hr/Hv−1)S_h = (H^t - H^r)/(H^r/H_v - 1)Sh​=(Ht−Hr)/(Hr/Hv​−1)

Sw=(Wt−Wr)/(Wr/Wv−1)S_w = (W^t - W^r)/(W^r/W_v - 1)Sw​=(Wt−Wr)/(Wr/Wv​−1)

除了使用 CATTY 分割的图块,我们还加入了整体图像的缩略图来捕获整体上下文信息。在将视觉编码器输出的特征对齐并传入到大型语言模型之前,我们 InternLM-XComposer2-4KHD 中的 pixel-shuffile,设置下采样因子为 0.25,减少图像特征的序列长度以提高效率。

CapFusion

预训练数据集中原始 caption 通常存在很多噪声和结缺陷。为了解决这个问题,LAION-COCO 和 BLIP-LAION 等提出了通过 image captioning model 生成 synthetic caption。然而,合成字幕中较为简单的句法和语义结构可能会导致缺失可扩展性和缺乏世界知识。

针对这个现象,CapFusion 利用大语言模型整合原始 caption 和 synthetic caption,在丰富的世界知识和结构化且语法简单之间取得了较好的平衡。我们使用 InternLM-XComposer2 为图像生成合成描述,使用 InternLM2 来整合原始 caption 和 synthetic caption。

多视觉编码器

相关工作如 SPHINX 和 Cambrian1,已经证明不同的视觉编码器会在不同的领域表现优势,结合多个视觉编码器可以在性能上有更大的提升。文本密集型图像所需的视觉编码能力在一定程度上有别于自然图像。为了增强光学字符识别(OCR)能力,我们训练了一个单独的视觉编码 OCR ViT,遵循 Vary 的方法从图像中提取文本特征。

与其不同的是,作者没有从零构建图文对的训练样本(如图表),我们使用PaddleOCR提取的文本结果构建数据集,并在数据集中加入描述自然图像的caption组成完整的预训练数据集。我们将完成训练的 OCR ViT 与通用视觉编码器(通用 ViT)用过加权平均值合并,然后将输入到大型语言模型中。

笔者认为,这种构建多视觉编码器方法显得有些复杂化了。从直觉上来看,结合多个视觉编码器而得到的性能提升更多的可能仅是"参数量"的额外增益。个人更倾向于"大道至简"的原则,即在单一架构中融合不同类型图像的处理能力,而不是增加模型的复杂度。因为,简洁往往能带来更优雅、更有效的解决方案。

个性化选择

Individual Select 通过贪心选择的方式从一个数据池中确定最有效的指令调优数据集。我们收集了其中所提到的开源数据集,并整合了DeepSeekVL、Cambrian-1 和 Cauldron 使用的数据以及额外的16个数据集。此外,鉴于学术数据集的提示风格趋于同质,为了增强提示的多样性,我们从 LAION-5B 中随机选取了一些图像使用 GPT-4o 生成了一系列问答对。最终我们得到了可视化指令调优数据集 Base Set。

微信最新模块_微信模型软件_

预训练数据筛选策略

perplexity(PPL) 常在大语言模型中被用作评估预训练数据集质量的指标。受其启发,我们利用已被训练过的视觉语言模型P来进一步过滤CapFusion获得的预训练数据集中的低质量部分。对于预训练数据集中的每个数据样本sss,我们使用以下公式计算所有文本的PPL(w1,...,wN{w_1,...,w_N}w1​,...,wN​表示sss中的文本序列):

Perplexity(s)=exp⁡(−1N∑i=1Nlog⁡P(wi∣w1,w2,...,wi−1))Perplexity(s) = \exp \left( -\frac{1}{N} \sum_{i=1}^{N} \log P(w_i | w_1, w_2, ..., w_{i-1}) \right)Perplexity(s)=exp(−N1​i=1∑N​logP(wi​∣w1​,w2​,...,wi−1​))

我们对所有样本进行排序,并选择前20%用于预训练。与大型语言模型中的筛选结果不同,对于PPL前20%和后20%的样本,我们发现两者的区别并不反映在数据的质量。PPL后20%的物品通常包含噪声混淆造成的世界知识,例如游戏版本和计算机动画中的片序列等,这些世界知识不仅罕见,且信息量非零,因此对模型的学习不太有益。

Model Soup

视觉指令调优数据对于现有视觉语言模型的卓越性能至关重要。但现有工作大多通过迭代消融来选择更有效的数据集,这种方法很快会达到一个瓶颈期,后续的数据选择带来的提升就会减小,甚至会降低性能。要改善选择逻辑遇到瓶颈后,我们使用 model soup 整合使用不同特性调优数据集进行微调的模型优参。model soup 的原理是通过使用不用的模型参数(学习率、数据增强、初始化等)来调优模型。对模型进行调优后,这些模型的优参被保留,所有选择模型的权重进行组合,以得到更强的模型。

为了将 model soup 的思路应用在数据集的优选组合上,我们在性能的基准 base set 上额外加入一个 Individual Select 的数据集来提高性能的基准集;优选数据 base set 上的模型假设回收到了不同局部最优值,再将这些模型双重组合得到新的模型集。我们提出了 Maximum Soup、Average Soup 和 Greedy Soup 三种方法来缩减模型的最佳组合。

Maximum Soup

给定评估函数 Acc,我们使用以下公式获得一个更强模型:

Average Soup

通过取所有微调模型的权重平均值,我们可以获得更强的模型:

Greedy Soup

首先根据评估分数对微调后的模型进行降序排序。接着遍历排序后的模型。对于每个模型,我们计算其权重与模型池中当前所有模型的权重的平均值。如果评估分数提高,则模型将添加到池中。最后,我们对池中所有模型的权重进行平均,以获得更强的模型。下表概述了 Greedy Soup 的步骤。

实验

我们使用 OpenCompass中 的 8 个基准,从不同角度均衡地对模型进行评估。这些指标包括:MMBench 和 MMStar:用于评估通用能力;MMMU:用于测试STEM(科学(Science)、技术(Technology)、工程(Engineering)和数学(Mathematics))能力;MathVista:用于数学相关能力;AI2D:用于图表相关能力;OCRBench:用于OCR功能;MMVet:用于主观评估。我们使用 OpenCompass 提供的 VLMEvalKit 进行标准化评估,在 MMBench 上选择 dev-en split.

数据配置

在预训练阶段,训练 OCR VIT 时,我们没有额外抓取PDF文件并转换为图像格式数据集。为了提高多字符背景下的 OCR 能力,我们从 LAION-5B-en、LAION-5B-cn、WuKong 和 Zero 中随机选择了 2000 万个数据样本。使用 PaddleOCR 从图像中提取文本,替换原始 caption 以形成新的数据集对。此外我们加入 LAION-5B 的 1000 万个原始数据样本,构成最终数据集进行训练。

在指令微调阶段,基于 Deepseek-VL 中确定的数据,我们继续使用 Individual Select 的方式在其他开源数据工作中进行了选择,确定为基础数据集。对于未能通过 Individual Select 得到增益的其余数据集,我们将其组成数据池,以至通过 model soup 的方式加以选择和利用。

训练配置

在 OCR VIT 的预训练阶段,我们使用 LLaVA 架构,视觉编码器从 OpenAI 的 CLIP-VIT-Large-336 初始化,大型语言模型是从 VIT-1.5-9B-Chat 初始化。设置大型语言模型为低秩,视觉编码器和MLP是可训练的。视觉编码器和MLP的学习率分别设置为 2×10⁻⁴ 和 2×10⁻⁵,学习率的schedule在训练过程的前3%采用预热(warm up),剩余步骤采用余弦衰减。

在整体视觉语言模型的预训练阶段,遵照 VIT 从 OpenAI 的 CLIP-VIT-Large-336 初始化的,OCR VIT 则是我们个阶段的位置,参考 Vary 的设置,我们通用 VIT 只有最后三层是可训练的,OCR VIT 则在整个阶段保持冻结状态。我们选择通用 VIT 和 OCR VIT 仅最后三层特征通过 MLP 与大型语言模型连接。起到特征对齐作用的 MLP,在预训练阶段保持训练状态,遵照 VIT 和 MLP 的学习率分别设置为 2 × 10⁻⁴ 和 2 × 10⁻⁵,学习率的schedule在训练过程的前 3% 采用预热(warm up),剩余步骤采用余弦衰减。

在指令微调阶段,我们冻结遵照 VIT 和 OCR VIT,MLP 和大预言模型保持可训练状态。学习率设置为 2 × 10⁻⁵,学习率的 schedule 在训练过程的前 3% 采用预热(warm up),剩余步骤采用余弦衰减。

与目前先进的方法对比

除了 OpenCompass 的8个基准外,我们增加了ScienceQA、MME、LLaVA-Wild 和 ReadWorldQA 更详细地与目前领域内最先进的模型进行比较。POINTS的性能可与现有类似尺寸的模型媲美,甚至超越更大参数量的模型性能,如 Cambrian-34B。此外,与其他模型相比,POINTS 使用的预训练数据集和指令调优数据集更少且是公开可用的,我们下面将从各角度对 POINTS 进行了彻底的分析,充分论证每种策略的有效性。这意味着后续开源工作能够更简单直接地使用本文提出的方法。

Strong Baseline 的消融实验

每个组件都有助于稳步改进。这些增强功能非常重要,例如:

在这 5 种策略中,通过 Individual Select 整合更多的可视化指令调整数据集会产生最显着的改进。这一观察结果与现有工作一致,强调了在视觉指令调整阶段选择有效数据集的重要性。

通过PPL筛选预训练数据的实验(左),Dual Vision Encoder 的实验(中),model soup 融合指令调优数据的实验(右)

(左)前两行比较了预训练阶段不同数据量的使用情况。第三行表示第一行中5M数据集按PPL筛选了升序排序的前20%子集。将预训练数据大小从 5M 扩展到 20M 反而会导致性能下降,我们认为可能的原因是:

现有大多数视觉语言模型的视觉编码器都是从基于大量图像-文本对进行预训练的视觉模型初始化的。而我们的视觉语言模型,在预训练阶段使用的大部分数据很可能已经被视觉编码器训练过,导致在扩大预训练数据集的大小时,只会带来有限甚至负向的影响。现有的大规模网络爬虫数据集,例如 LAION-5B 和 COYO-700M,数据分布非常同质。我们提取图像的主要实体后绘制密度图后,发现这是一种长尾分布,因此,不加选择地增加数据量进行预训练只能带来有限的提升。而我们仅使用 1M 数据对模型进行预训练,这些数据是 5M 数据的按照 PPL 升序排序后的前 20%。这表明,在过渡过程中,过度地将模型暴露在晦涩和稀缺的知识中,不利于其学习。

(中)DVE:Dual Vision Encoder 架构。SVE:Single Vision Encoder 架构。

(右)lr:在不同学习率微调的模型上使用Model Soup。ds:使用不同数据集微调的模型上使用Model Soup。

添加更多的指令调优数据集通常会达到一个瓶颈。然而,通过整合不同数据集训练得到的模型汤,我们观察到了实质性的改进,总分从 59.0 提高到 61.2。我们对各种 Model Soup 策略进行了比较。其中,greedy soup 的表现最好,分别比 maximum soup 和 average soup 高出 0.8 和 0.6 个百分点。此外,我们还对比了使用不同超参数(例如不同的学习率)进行模型汤的结果,其只能带来有限提升。

model soup 与 Individual Select 的对比实验

这幅图展示了在相同基础数据集基础上,使用 Individual Select 和 Model Soup 加入单个数据集的性能差距。表明当通过 Individual Select 的方式选择并添加额外的指令调整数据集无益时,使用 Model Soup 的融合方式可以显著提高性能。

总结

POINTS 是微信团队开发的先进视觉语言模型,融合了多项创新技术。它采用保持纵横比的高分辨率动态显示(CATTY)、CapFusion 技术整合图像描述、双视觉编码器架构,并引入了基于 perplexity 的预训练数据筛选策略。POINTS 还利用 Individual Select 方法选择指令调优数据,并创新性地应用 Model Soup 技术来融合不同数据集训练的模型。这些方法的结合使 POINTS 在多个基准测试中表现卓越,甚至超越了一些参数量更大的模型,为视觉语言模型领域的发展提供了新的思路和方法。


上一条查看详情 +普通小学生也能理解的Paxos算法讲解
下一条 查看详情 +没有了