Vision as LoRA论文解读
Abstract
我们提出了“视觉即低秩适应”(Vision as LoRA,VoRA),这是一种将大语言模型(LLM)转变为多模态大语言模型(MLLM)的全新范式。与普遍采用的依赖外部视觉模块进行视觉编码的MLLM架构不同,VoRA通过将特定于视觉的低秩适应(LoRA)层直接集成到LLM中,实现了视觉能力的内化。这种设计使得在推理过程中,新增的参数能够无缝地合并到LLM中,消除了结构复杂性,并将计算开销降至最低。此外,VoRA继承了LLM处理灵活上下文的能力,可以处理任意分辨率的输入。为了进一步增强VoRA的视觉能力,我们引入了一种分块蒸馏方法,该方法将预训练视觉Transformer(ViT)中的视觉先验知识转移到LoRA层中,通过注入视觉知识有效地加速了训练过程。另外,我们应用双向注意力掩码,以更好地捕捉图像的上下文信息。我们成功证明,通过额外的预训练数据,VoRA的性能可以与传统的基于编码器的MLLM相媲美。所有训练数据、代码和模型权重将在https://github.com/Hon-Wong/VoRA上发布。
这篇也是做encoder-free的,相较于SAIL,follow的门槛降低了不少
Introduction
简单介绍存在的问题:
- 传统mllm要编码器:虽然这种方法在训练上效率较高,但它存在源于外部视觉专家模型的关键局限性,即额外的计算成本和图像分辨率限制。例如,许多视觉编码器,尤其是视觉 Transformer(ViTs)[14, 36, 53],遵循固定分辨率的训练范式,限制了灵活性。此外,模块化设计采用顺序工作流程:在视觉编码器和连接器完全处理完图像之前,大语言模型无法开始处理。
- 相关工作太复杂:相关研究 [13, 32] 尝试通过参数解耦的方法来解决模态冲突问题。例如,Mono-InternVL [32] 引入了专家混合(MoE)框架 [38],采用单独的专家模块分别进行视觉和语言处理。更进一步,EVEv2 [13] 对大语言模型中的所有线性层和归一化层进行了解耦。虽然这些方法有助于缓解模态冲突,但它们使大语言模型的参数数量翻倍,让架构变得更为复杂,还大幅增加了内存开销。
为了解决这些挑战,提出了“视觉即低秩自适应”(VoRA),这是一种通过低秩自适应(LoRA)[21]集成视觉理解能力,将大语言模型(LLM)转变为无编码器的多模态大语言模型(MLLM)的方法。虽然我们承认解耦视觉和语言参数至关重要,但我们希望在推理过程中避免依赖参数扩展。为此,VoRA在大语言模型中应用可训练的LoRA层,这些层对新的模态(即视觉)进行编码,同时通过冻结其参数来保留原始大语言模型的语言知识。
保留原来的语言模型的知识
此外,VoRA利用预训练的视觉模型作为教师模型,将视觉先验知识注入到LoRA层中。具体来说,我们采用了分块蒸馏策略[20]:迫使大语言模型(LLM)每个模块的中间视觉表示,与教师模型提取的相应模块级特征对齐。通过这样的过程,我们可以大大加快训练速度,并减少对大量数据的需求。
融合了peft的方法,降低数据需求量
2. Related Works
2.2. Encoder-free MLLMs
开创性的工作Fuyu证明了在交错的图像文本数据上训练无编码器模型的可行性,尽管其计算成本高昂且技术透明度有限。随后的方法,如EVE,将视觉编码器的参数减少到单个Transformer模块,在主要训练阶段通过蒸馏将其输出特征与视觉Transformer(ViT)对齐,同时更新所有大语言模型(LLM)的参数以学习视觉信息。然而,这些方法仍然面临大语言模型固有语言能力与新模态(即视觉)之间的冲突。这些冲突源于语言和视觉参数的耦合,加剧了训练的不稳定性,并导致模型严重遗忘其原有的语言能力。
为了克服这些问题,Mono-InternVL和EVEv2受到专家混合(MoE)方法[38]的启发,提出了参数解耦策略,即复制大语言模型(LLM)的参数用于特定的视觉处理,同时冻结其原始权重。尽管这些方法成功解决了遗忘问题和模态冲突,但它们使模型参数翻倍,导致了巨大的内存开销,牺牲了架构的简洁性。我们的工作通过应用低秩适应(LoRA)解决了这一问题,LoRA在对视觉信息进行编码的同时,能够保持大语言模型的语言能力,并且可以在不增加额外内存开销的情况下合并到大语言模型中。
3. Vision as LoRA
3.1. Stabilize training: Vision as LoRA
图2. VoRA的架构。图(a)展示了VoRA在预训练阶段的架构:在此阶段,VoRA仅解冻用于视觉的LoRA层和视觉嵌入层,即一个带有位置嵌入的浅层多层感知器(MLP)层。图(b)展示了VoRA在推理阶段的架构:LoRA层被合并到大语言模型(LLM)中,因此唯一增加的参数是一个浅层嵌入层(约600万个参数)。
如图2(a)所示,我们将LoRA层集成到大型语言模型(LLM)中,以实现视觉理解。在预训练期间,图像首先通过一个轻量级嵌入层转换为视觉嵌入,该嵌入层是一个带有位置编码的浅层多层感知器(MLP)patch_embedding
,约有600万个参数。用 N v i t N_{vit} Nvit和 N l l m N_{llm} Nllm分别表示视觉Transformer(ViT)和大型语言模型(LLM)中的模块数量。我们将LoRA应用于大型语言模型(LLM)前 N v i t N_{vit} Nvit个模块内的所有线性层,包括查询 - 键 - 值(QKV)投影层和前馈网络(FFN)层。关键的是,在训练过程中,只有LoRA参数和视觉嵌入层会被更新,而大型语言模型(LLM)的原始参数保持冻结状态。这种设计将视觉和语言参数解耦,与对大型语言模型(LLM)进行全参数训练相比,它稳定了训练过程,并避免了先前研究中出现的训练崩溃问题。感觉不解耦,混在一起练很容易崩溃,解冻语言模型原来的层会破坏之前练好的参数,所以还是peft是最合适的
3.2. Boost training: block-wise distillation
通过逐块知识蒸馏(block-wise distillation),将预训练视觉模型(如ViT)的视觉先验知识注入到LoRA层中,加速训练并减少对大规模视觉数据的依赖。
-
蒸馏对象:
- 教师模型:预训练的ViT,其每个Transformer块的中间特征作为知识来源。
- 学生模型:VoRA中的LLM块,其前 N vit N_{\text{vit}} Nvit 个块(与ViT层数相同)的隐藏状态被对齐。
-
特征对齐方法:
- 逐块对齐:对ViT和LLM的每个对应块(block i i i)的中间特征进行对齐。
- 投影头(AuxHead):在LLM的每个块后添加一个轻量级辅助模块(RMSNorm + 线性层),将LLM的隐藏状态投影到ViT的特征空间。
-
损失函数:
- 余弦相似度损失:对每个块 i i i 和每个视觉token位置 s s s,计算LLM与ViT特征的余弦相似度:
L distill i = 1 S ∑ s = 1 S ( 1 − AuxHead ( h llm i , s ) ⊤ h vit i , s ∥ AuxHead ( h llm i , s ) ∥ 2 ∥ h vit i , s ∥ 2 ) \mathcal{L}_{\text{distill}}^{i} = \frac{1}{S} \sum_{s=1}^{S} \left(1 - \frac{\text{AuxHead}(h_{\text{llm}}^{i,s})^\top h_{\text{vit}}^{i,s}}{\|\text{AuxHead}(h_{\text{llm}}^{i,s})\|_2 \|h_{\text{vit}}^{i,s}\|_2}\right) Ldistilli=S1s=1∑S(1−∥AuxHead(hllmi,s)∥2∥hviti,s∥2AuxHead(hllmi,s)⊤hviti,s)其中 S S S是ViT输出的视觉token数量, h llm i , s h_{\text{llm}}^{i,s} hllmi,s和 h vit i , s h_{\text{vit}}^{i,s} hviti,s分别表示LLM和ViT第 i i i 块的隐藏状态。 - 总蒸馏损失:所有块损失的均值:
L distill = 1 N vit ∑ i = 1 N vit L distill i \mathcal{L}_{\text{distill}} = \frac{1}{N_{\text{vit}}} \sum_{i=1}^{N_{\text{vit}}} \mathcal{L}_{\text{distill}}^{i} Ldistill=Nvit1i=1∑NvitLdistilli
- 余弦相似度损失:对每个块 i i i 和每个视觉token位置 s s s,计算LLM与ViT特征的余弦相似度:
-
联合优化目标:
- 语言建模损失( L LM \mathcal{L}_{\text{LM}} LLM):标准的交叉熵损失,优化图像-文本对的生成。
- 总损失: L total = L distill + L LM \mathcal{L}_{\text{total}} = \mathcal{L}_{\text{distill}} + \mathcal{L}_{\text{LM}} Ltotal=Ldistill+LLM。
3.3. Bi-directional attention masks for vision
同SAIL一样,使用双向注意力掩码
4. Data
4.1. Data collection and preprocessing
我们认为,这项工作的主要重点不在于数据工程或筛选,因此,我们采用了一种简单直接的数据收集和处理策略。参照先前的研究[12, 13, 32],我们的预训练框架使用了重新添加字幕的数据。鉴于可用的开源大规模重新添加字幕的数据集有限,我们使用了Qwen2-VL-72B [46] 为从DataComp-1B [18] 中采样的图像生成字幕。从这个原始数据集中,我们挑选出了大约2900万张较长边超过448像素的图像。
不在企业,也很难做数据工程感觉
4.2. Multimodal data mixture
虽然VoRA解耦了视觉和语言参数,但我们发现,仅延长基于图像字幕的训练会在一定程度上降低大语言模型(LLM)遵循指令的能力。为了保留这一能力,我们将文本指令数据混入训练数据中。如表1所示,我们最终的混合数据包含约3000万对图像-字幕数据以及640万个文本指令样本。这些文本数据直接来源于:Infinity-Instruction、SmolTalk、Cambrian-1和LLaVA-OneVison。
5. Experiments
5.1. Implementation details
训练设置。除非另有说明,在所有实验中,我们都采用AIMv2-Huge-448p[16]作为默认的视觉编码器,并采用Qwen2.5-7B-Instruct[50]作为大语言模型(LLM)。预训练的学习率固定为0.0002(除非明确改变,否则保持不变),有100个预热步骤,并且全局批量大小保持为256。所有其他超参数和优化器配置均遵循文献[29]中的默认设置。
5.2. Ablation studies
对“视觉即低秩适应(Vision as LoRA)”的消融实验。事实证明,由于模态冲突,对大语言模型(LLM)进行全参数训练是不稳定的(图4),这与文献[12]中的发现一致。虽然将学习率降低到一个较低的值后,我们在几次尝试中观察到了一个成功的训练案例,但损失下降的速度比使用秩为1024的低秩适应(LoRA-1024)时更慢。因此,我们在主要实验中没有采用这种全参数训练的方式。
直接混在一起训目前是不行的
接下来,我们分析了VoRA中不同的低秩适应(LoRA)秩配置。图5显示,与秩为1024相比,秩为512时导致的损失略高(增加了0.006)。这种趋势在蒸馏损失中同样存在(图6),其中秩为512时,与秩为1024相比,平均的分块蒸馏损失略高(增加了0.005)。尽管这两种配置最终得到的平均分数相同,均为55.6(表2),但损失方面始终存在的优势表明,更高的秩可能具有更好的优化潜力。此外,当秩为1536时,我们遇到了训练不稳定的情况,这促使我们选择秩为1024作为默认配置。
我的看法是秩高了,参数量大了,大量数据训练下学习情况更好
5.3. Standard evaluation
为了确保在VoRA和现有方法之间进行公平的比较,我们特意对实验设计进行了限制。先前的研究(例如,EVE、EVEv2[13]以及Mono-InternVL[32])利用了大量的领域内数据集(表3),但由于这些训练数据属于专有数据,使得直接比较变得复杂。我们的目标并非追求在基准测试中达到最先进的性能,而是验证一种新颖的多模态大语言模型(MLLM)架构。因此,我们将微调限制在公开可用的LLaVA-665K数据集上,且不进行额外的扩展。
同SAIL一样,用llava 665K微调,并进行对比