编译 | 言征
作者 | Aksh Garg
备注:发稿前作者已经删掉原文
出品 | 51CTO技术栈(微信号:blog51cto)
近日,一款Llama3V最近被“先红后黑”的出了圈。作为全球顶尖研究学府的团队,身陷“抄袭”中国大模型的泥潭后,火速删稿删库,实属LLM史上一大“轶事”。
那么这款“Llama3V”究竟长什么样子,实际基准效果究竟如何?
不得不说,看完作者对于该模型的介绍,大家对于如何训练出堪比GPT4-o的多模态大模型,心中会多一些干货。【本篇文章的作者Aksh Garg,是斯坦福大学、Point72 和 Jump 的机器学习研究员。曾就职于特斯拉、SpaceX、DE Shaw。】
1.Llama3V:成本只有500美元效果堪比100倍闭源大模型
Llama3 风靡全球,在几乎所有基准测试中都优于 GPT3.5,在多个基准测试中也优于 GPT4。随后,GPT4o 应运而生,凭借其多模态精细度夺回王位。今天,我们发布了一些可以改变这一现状的东西:Llama3-V,这是有史以来第一个基于 Llama3 构建的多模态模型。作为奖励,我们的所有训练费用不到 500 美元。
你可能会问基准如何?我们让表格说明一切。与 Llava(当前 SOTA 和最受欢迎的多模态理解模型)相比,我们的模型提升了 10-20%。此外,除了 MMMU 之外,我们在所有指标上的表现都与大小为其 100 倍的闭源模型非常相似。
图片
请查看地址:
•🤗:https://huggingface.co/mustafaaljadery/llama3v/
•Github:https://github.com/mustafaaljadery/llama3v
【当然,作者已经删库了】
2.模型架构及工作原理
我们的大部分工程工作都是为了使 Llama3 理解视觉信息。为此,我们使用 SigLIP 模型获取输入图像并将其嵌入到一系列块嵌入中。然后,这些嵌入通过投影块与文本标记对齐,投影块应用两个自注意力块将文本和视觉嵌入放在同一平面上。最后,将投影块中的视觉标记添加到文本标记前面,并将联合表示传递到 Llama3,就像通常一样。
图片
Llama3-V 架构:我们使用 SigLIP 将输入图像嵌入到补丁中。然后我们用两个自注意力块训练一个投影块,以对齐我们的文本和视觉标记。
上图从高层次说明了一切的工作原理。现在,让我们详细了解每个阶段。
SigLIP:SigLIP(用于语言图像预训练的 Sigmoid 损失)是一种与 CLIP 类似的图像嵌入模型,如下图所示。但是,与使用对比损失和 softmax 正则化的 CLIP 不同,SigLIP 采用成对 Sigmoid 损失,这允许模型独立地对每个图像-文本对进行操作,而无需对批次中的所有对进行全局查看。在高层次上,SigLIP 的视觉编码器将图像分割成一系列不重叠的图像块,并将它们投影到低维线性嵌入空间中,从而产生一系列块嵌入。然后,这些块嵌入经过视觉编码器,该编码器应用自注意力来捕获长距离依赖关系并提取更高级的视觉特征。为了我们的目的,我们直接使用由 Google DeepMind 训练的原始 SigLIP 模型。
图片
SigLIP 嵌入的工作原理说明。我们同时训练图像和文本解码器,但在我们的例子中,文本编码模块保持不变。与 CLIP 不同,我们最小化 Sigmoid 损失而不是 Softmax 损失,但大多数其他事情保持不变。
与文本嵌入对齐:为了节省计算资源,我们保持 SigLIP 不变。但是,为了将输出图像嵌入与 Llama3 中使用的文本嵌入对齐,我们使用了一个额外的投影模块。与将单个线性层应用于原始图像嵌入的 Llava 不同,我们改为训练两个自注意力块以更好地捕获输入嵌入中的模式,从而生成最终的图像嵌入向量。
前置图像标记:对于文本输入,我们首先使用字节对编码 (BPE) 词汇表对文本进行标记,从而生成一系列文本标记。我们通过将这些标记括在特殊的 <text> 和 </text> 标签中来划分这些标记。对于来自投影块的图像嵌入,我们将每个向量视为单独的“视觉标记”,并使用 <image> 和 </image> 标签划分它们。最后,我们将视觉标记序列前置到文本标记序列,形成传递到 Llama3 进行处理的联合输入表示。
3.成本是如何打下来的?推理优化
训练这些模型的成本很高。为了优化计算资源,我们进行了两项重大优化。第一项是简单的缓存机制,第二项是在 MPS/MLX 前端。
缓存:SigLIP 模型比 Llama3 小得多。因此,如果我们按顺序运行所有内容,则在 SigLIP 运行时,GPU 利用率非常低。此外,我们无法通过增加 SigLIP 上的批处理大小来提高利用率,因为 Llama 会遇到 OOM 错误。相反,我们发现我们的 SigLIP 模型保持不变,而是预先计算图像嵌入。然后,对于预训练和 SFT,我们直接传入这些预先计算的图像嵌入,而不是重新运行 SigLIP 模块。这不仅使我们能够增加批处理大小并最大限度地利用我们的 GPU 来运行 SigLIP 模块,还为我们节省了训练/推理时间,因为管道的两个部分可以单独进行。
MPS/MLX 优化:我们的第二次优化再次源于 SigLIP 相对于 Llama 的较小尺寸。具体来说,由于 SigLIP 适合我们的 Macbook,我们在 MPS 优化的 SigLIP 模型上进行了推理,这使我们能够实现每秒 32 张图像的吞吐量 – 让我们的缓存步骤相对快速地完成。
4.它是如何训练的
从 SigLIP 预计算嵌入:现在让我们深入研究预训练过程的第一步:通过 SigLIP 预计算图像嵌入。在此步骤中,我们的目标是将图像传入 SigLIP 嵌入模型,以获得图像的矢量表示或嵌入。
一个技术细节:由于分辨率较高,我们遵循 LLaVA-UHD 采用的方法并执行图像分割。图像分割的目的是将图像分成可变大小的块或片段,以实现更高效的编码。这些分割图像会同时批量处理。
现在让我们深入了解如何使用 SigLIP 嵌入。我们首先加载 SigLIP 模型和处理器/标记器。然后我们使用处理器预处理提供的输入图像。然后我们将预处理后的图像传递给模型。之后,模型输出图像-文本对的对数。我们现在继续将 S 型激活函数应用于对数以获得概率。我们现在看到图像嵌入包含在这些概率中。到目前为止,此嵌入捕获了图像中的视觉信息。
通过 SigLIP 计算图像嵌入之后,我们现在开始学习投影矩阵——你也可以将其视为投影层,它通常是线性或前馈层。如上文成分部分所述,投影层将视觉嵌入从其原始空间映射到联合多模态嵌入空间。具体而言,投影层将学习到的权重矩阵 W_v 应用于视觉嵌入 v 以获得投影的多模态视觉嵌入 W_v * v。因此,在这个投影步骤之后,视觉和文本嵌入基本上被对齐到一个共同的多模态嵌入空间,允许它们的表示进行交互并组合以用于多模态建模任务,如视觉问答、图像字幕等。更具体地说,投影层的结果是生成的“潜在信息”。
计算出潜在值后,我们将其作为图像标记添加到文本标记之前。之所以添加在前面,是因为将图像放在文本之前,可以让模型在预训练期间更容易学习。可以将其想象为具有表示实际图像的标记,然后具有表示文本中图像内容的标记:几乎就像与图像配对的标题。我们的架构与 LLaVA-UHD 的架构几乎相同(他们选择 CLIP-ViT,而我们使用 SigLIP,并且他们与 Vicuna-13B 配合使用),因此我们在下面提供了它们的图示作为参考:
图片
现在我们已经确定了预训练所需的数据,我们可以深入了解它实际上是什么样子。在预训练中,我们使用 600,000 个将图像添加到文本的示例。在此步骤中,我们保持 Llama-3 架构的主要权重不变。
关键是我们只想更新投影矩阵的梯度。至关重要的是,我们保持其余权重不变。至此,我们完成了预训练步骤的流程。这里的关键是将嵌入图像(潜在图像)与其文本以联合表示形式对齐,然后预训练 LLaMA-3 以专注于根据遇到的示例更新投影矩阵。
5.监督微调
在预训练之后,我们进行监督微调以增强模型的性能。在此步骤中,我们将冻结计算出的嵌入(来自投影层),并将除视觉和投影矩阵之外的所有内容保持冻结状态。换句话说,如果您查看下图,红色组件未冻结,而蓝色组件冻结。这旨在用作“指令”微调 – 换句话说,使模型更适合多模态文本输出。在此阶段,我们使用 1M 个示例(7M 个分割图像)。
图片
6.总结
- 我们为 Llama3 8B 添加了视觉编码器
- 与当前开源 SOTA 视觉语言模型 Llava 相比,我们的模型性能提高了 10-20%。
- 我们提供与 GPT4v、Gemini Ultra 和 Claude Opus 等尺寸接近 100 倍* 的模型相当的视觉能力。
- 我们描述了一种高效的流程,用于在不到 500 美元的时间内对模型进行预训练和指令微调。
【后记】距离ChatGPT发布,一年多已过去,大模型研究者们,再次身处于LLM浪潮的风暴眼中,随着开源大模型的出现,我们开始看到前所未有的研究速度和成果涌现,也开始看到在这个新领域中伴生着始料未及的“魔幻”剧情。
本文无意于探讨开源AI模型的“套壳”、“抄袭”的界定,更多在于讨论让大模型从文本走向视觉多模态,究竟需要哪些步骤、训练和推理成本都有哪些降低的技巧、需要怎样的技术活?这些也许是大家更需要的。