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

简单介绍存在的问题:

  1. 传统mllm要编码器:虽然这种方法在训练上效率较高,但它存在源于外部视觉专家模型的关键局限性,即额外的计算成本和图像分辨率限制。例如,许多视觉编码器,尤其是视觉 Transformer(ViTs)[14, 36, 53],遵循固定分辨率的训练范式,限制了灵活性。此外,模块化设计采用顺序工作流程:在视觉编码器和连接器完全处理完图像之前,大语言模型无法开始处理。
  2. 相关工作太复杂:相关研究 [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层中,加速训练并减少对大规模视觉数据的依赖。

  1. 蒸馏对象:

    • 教师模型:预训练的ViT,其每个Transformer块的中间特征作为知识来源。
    • 学生模型:VoRA中的LLM块,其前 N vit N_{\text{vit}} Nvit 个块(与ViT层数相同)的隐藏状态被对齐。
  2. 特征对齐方法:

    • 逐块对齐:对ViT和LLM的每个对应块(block i i i)的中间特征进行对齐。
    • 投影头(AuxHead):在LLM的每个块后添加一个轻量级辅助模块(RMSNorm + 线性层),将LLM的隐藏状态投影到ViT的特征空间。
  3. 损失函数:

    • 余弦相似度损失:对每个块 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=1S(1AuxHead(hllmi,s)2hviti,s2AuxHead(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=1NvitLdistilli
  4. 联合优化目标:

    • 语言建模损失( 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微调,并进行对比

Low-Rank Adaptation (LoRA) 是一种用于大型语言模型的有效微调技术,其核心思想在于通过引入低秩分解矩阵减少下游任务中的可训练参数数量[^2]。如果想获取 LoRA 的原始论文 PDF 文件,可以通过以下几种方式找到: ### 获取论文的方式 1. **官方链接**: 原始论文通常会发布在学术平台如 arXiv 上。可以在 arXiv 搜索页面输入关键词 “Low-Rank Adaptation of Large Language Models”,即可找到对应的论文页面并下载 PDF 文件。 2. **Microsoft 官方资源**: 根据 GitHub 仓库描述,该研究由 Microsoft 提出,因此可以访问 Microsoft Research 的官方网站或者相关项目页寻找论文的正式版本。 3. **学术搜索引擎**: 使用 Google Scholar 或其他学术搜索引擎(如 Semantic Scholar),搜索标题 “Low-Rank Adaptation of Large Language Models”。这些平台不仅提供免费的 PDF 链接,还会列出引用此论文的相关文献。 4. **社区分享**: 如果无法直接从上述渠道获得 PDF,则可以尝试加入 AI 和机器学习相关的论坛或社交媒体群组询问。许多研究人员会在这些平台上共享有价值的资料。 以下是基于 LoRA 技术的一些扩展思考和代码实现片段展示如何计算可训练参数数目: ```python def calculate_trainable_parameters(lora_ranks, model_dimensions, num_lora_weights): """ Calculate the number of trainable parameters using LoRA. Args: lora_ranks (int): Rank value 'r' used in LoRA matrices. model_dimensions (int): Dimensionality 'd_model' of the transformer layers. num_lora_weights (int): Number of weights to apply LoRA on '\hat{L}_{LoRA}'. Returns: int: Total number of trainable parameters '|Θ|'. """ total_params = 2 * num_lora_weights * model_dimensions * lora_ranks return total_params # Example usage with typical values from RoBERTa LARGE configuration lora_rank_example = 8 model_dimension_example = 1024 num_lora_weight_matrices = 24 # Assuming application across all attention heads trainable_param_count = calculate_trainable_parameters( lora_rank_example, model_dimension_example, num_lora_weight_matrices ) print(f"Total Trainable Parameters Using LoRA: {trainable_param_count}") ``` 这段脚本展示了依据给定公式 \(|\Theta| = 2 \times \hat{L}_{\text{LoRA}} \times d_{\text{model}} \times r\) 来估算采用 LoRA 后模型所需的总训练参数数目的过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值