跳转至

低资源高效微调

多模态 LoRA 微调通常应加在模型的哪些部分?加在视觉侧、语言侧还是投影层?为什么?

在多模态模型中,语言侧(LLM)是 LoRA 应用的核心收益区,其次是投影层,而视觉侧通常不是优先选择。

LoRA 的原理:在预训练权重矩阵旁引入低秩分解矩阵,只训练这些低秩矩阵,冻结原始权重。

优先级排序及原因:

  1. LLM 语言侧(最重要):LLM 拥有最多的参数,是多模态推理和生成的核心。LoRA 加在 LLM 的自注意力层的 Query、Key、Value、Output 投影矩阵,能够用极少的参数驱动 LLM 适应多模态输入和指令格式。这样做既能保留 LLM 强大的语言先验,又能教会它如何理解视觉 token 并遵循指令。

  2. 跨模态投影层(次重要):投影层是将视觉特征映射到 LLM 空间的桥梁。这个层本就是随机初始化或轻量训练的,进一步用 LoRA 微调可提升对齐质量,尤其当投影层本身较简单时(如单层线性层),LoRA 可注入额外的非线性适配能力。

  3. 视觉编码器(通常不加):原因有三:

  4. 视觉编码器(如 CLIP ViT)已在大规模图文对齐数据上充分训练,输出特征高度语义化,泛化性强。
  5. 视觉 token 的空间结构和局部细节对许多任务至关重要,低秩约束可能限制这种细粒度信息的保留。
  6. 若解冻视觉编码器,容易破坏其预训练的视觉表示,导致灾难性遗忘,尤其在数据量有限时。 例外:当领域差异极大(如医学影像)且拥有充足数据时,可在视觉编码器顶层加 LoRA 以适配领域特征。

因此,LLM 为主、投影层为辅、视觉极少碰,是多模态 LoRA 微调的经验法则。

image.png


多模态 Adapter 与 LoRA 在结构和插入位置上的不同?各自的优缺点?

查看内嵌表格

总结:LoRA 因其可合并性和极低开销,已成为多模态微调的主流选择;Adapter 在需要更显著的特征变换或在视觉侧微调时仍有优势。


训练资源有限,只能微调一个多模态大模型,如何选择可训练参数和微调策略?

若资源极度受限(如单卡 24GB),策略核心是最大化能力提升/参数比。

推荐策略(分层优先):

  1. 投影层 + LLM 的 LoRA(必选,性价比最高):
  2. 投影层全参数训练(通常参数量极小,几十万到几百万)。
  3. LLM 使用 LoRA(rank=8~16),加在 Q/K/V/O 矩阵。仅增加约 0.1%~1% 的参数。
  4. 理由:这是 LLaVA 等模型验证的最简高效方案,能用极少资源让 LLM 理解视觉并遵循指令。

  5. QLoRA(进一步压缩显存):

  6. 将 LLM 量化为 4-bit(NF4),然后在其上应用 LoRA。显存占用降至原来的 1/4 左右,可在单卡上微调 7B~13B 模型。

  7. 视觉编码器处理:

  8. 冻结视觉编码器,不训练任何视觉侧参数。
  9. 若领域极专业且数据量稍多(>1万),可考虑给视觉编码器加极轻的 Adapter 或最后几层的 LoRA(rank=4),但需配合极低学习率。

  10. 指令微调优先:

  11. 跳过全量预训练,直接使用高质量指令数据微调(几千到几万条),让模型快速学会对话能力。

  12. 数据策略:

  13. 精选小规模高质量数据,远优于大规模噪声数据。
  14. 混合纯文本指令数据(如 10%),防止语言能力退化。

推荐配置示例(基于 LLaVA-1.5-7B,单张 24GB GPU):

  • 模型量化:LLM 4-bit(QLoRA),视觉编码器 FP16。

  • 可训练参数:投影层(全参数,~1M),LLM 的 Q/K/V/O 加 LoRA(rank=16, ~8M)。

  • 总训练参数:~9M,占总参数 0.1% 左右。

  • 显存占用:约 16GB,batch size=4。

  • 训练数据:10K 高质量多模态指令数据 + 2K 纯文本数据。

此方案可在数小时内完成微调,且性能接近全参数微调。


LoRA 加在视觉模块、投影模块、LLM 模块,效果有何差异?可否量化?

已有大量研究对 LoRA 在多模态模型不同模块的效果进行了消融实验,结论高度一致。

定性结论:

  • LLM 上的 LoRA:收益最大。显著提升指令遵循、推理准确性、多模态对话能力。几乎在所有多模态基准(MME, MMBench, SEED-Bench)上带来大幅提升。

  • 投影层上的 LoRA:收益次之。改善视觉-语言对齐,帮助 LLM 更好理解视觉 token。单独使用的效果有限,但可与 LLM 的 LoRA 叠加。

  • 视觉模块上的 LoRA:收益最小,甚至可能有害。在通用多模态任务上,性能提升微弱,有时因破坏预训练视觉表示而略微下降。只在特定领域(如医学影像)且数据充足时,才能观察到稳定提升。

量化示例(基于 LLaVA-1.5-7B 相关消融):

查看内嵌表格

数据趋势表明:LLM 的 LoRA 贡献了绝大部分提升;叠加投影层有进一步小幅增益;叠加视觉模块几乎无边际收益。因此从投入产出比看,优先 LLM 的 LoRA。


为什么视觉编码器部分通常不进行 LoRA 微调?例外情况是什么?

通常不微调的核心原因:

  1. 预训练充分且通用:视觉编码器(如 CLIP ViT)在数亿到数十亿图文对上训练,具备极强的泛化能力和语义对齐性。其特征空间已与语言空间高度协调,无需进一步低秩适配。

  2. 低秩约束破坏细粒度信息:视觉特征包含丰富的空间布局和局部细节,这些信息往往需要高秩表示。LoRA 的低秩分解可能限制模型捕获细微视觉差异的能力,导致细粒度识别或空间定位任务性能下降。

  3. 灾难性遗忘风险:视觉编码器的预训练数据分布通常极广,下游微调数据往往较窄。解冻训练会快速覆盖通用的视觉知识,导致在未见过的视觉域上性能骤降。

  4. 收益极低:如上一问的量化数据,微调视觉编码器带来的提升微乎其微,却大幅增加了训练参数和过拟合风险。

例外情况(应微调视觉编码器):

  1. 巨大的领域差异:当目标图像的分布与预训练数据截然不同(如医学 MRI 图像、卫星遥感图、显微镜图像、热成像),预训练特征无法有效描述新领域的关键视觉模式。此时需要在领域数据上微调视觉编码器,LoRA 可作为轻量选项。

  2. 需要高分辨率细粒度理解:任务要求极精细的视觉细节(如微小缺陷检测、高精度 OCR、密集预测),预训练的低分辨率特征不足。微调高层视觉特征有助于保留更多高频信息。

  3. 拥有大规模高质量的领域数据:若领域标注数据量达到数十万以上,微调视觉编码器的过拟合风险降低,可以安全地释放其潜力。

  4. 多模态任务本身驱动:某些任务(如视频理解、3D 场景理解)需要视觉编码器学习时间或深度维度的特征,这时必须微调。

在这些例外中,通常仅微调视觉编码器的最后几层,或以极小的学习率(如 1e-6)和低秩(rank=4)进行 LoRA,以在适配的同时尽量保留预训练知识。


多模态 Adapter 的一种经典结构是双线性池化,它如何降低参数量?

双线性池化(如 MUTAN, MLB) 是多模态融合中常用的 Adapter 结构,用于将视觉特征和文本特征进行高效的交互融合。标准双线性池化计算两个向量的外积,参数数量与特征维度的乘积成正比(dv×dtdv×dt),极容易爆炸。低秩双线性池化通过矩阵分解大幅降低参数量。

经典结构(MLB, Multimodal Low-rank Bilinear):

  1. 将视觉特征 v∈Rdvv∈Rdv 和文本特征 t∈Rdtt∈Rdt 分别投影到共同的低维空间: v′=Wvv∈Rr,t′=Wtt∈Rrv′=Wvv∈Rr,t′=Wtt∈Rr 其中 Wv∈Rr×dv,Wt∈Rr×dtWv∈Rr×dv,Wt∈Rr×dt,rr 是低秩维度(如 512)。

  2. 进行 Hadamard 积(逐元素相乘): z=v′⊙t′z=v′⊙t

  3. 再通过一个线性层投影到输出维度: o=Woz+boo=Woz+bo

参数量分析:

  • 标准双线性:dv×dtdv×dt,若 dv=1024,dt=1024dv=1024,dt=1024,则 > 1M。

  • 低秩双线性:r(dv+dt)+r×doutr(dv+dt)+r×dout。当 r=512r=512 时,约 512×2048+512×dout≈1M512×2048+512×dout≈1M 参数。虽然参数量级类似,但 rr 可以进一步减小(如 128),且计算从 O(dvdt)O(dvdt) 降为 O(r(dv+dt))O(r(dv+dt))。

MUTAN 的进一步压缩: MUTAN 将双线性权重张量分解为三个矩阵的外积和(Tucker 分解),将参数复杂度从 O(dvdtdout)O(dvdtdout) 降至 O(r(dv+dt+dout))O(r(dv+dt+dout)),同时保持丰富的多模态交互。

这类低秩双线性 Adapter 常用于视觉问答、图文检索等任务的融合阶段,以极少的参数实现有效的跨模态交互。


Prompt Tuning 在多模态模型中可以怎么做?例如在视觉侧和文本侧同时添加可学习的 soft prompts。

多模态 Prompt Tuning 是指在模型的输入或中间表示中插入可学习的连续向量(soft prompts),而保持所有预训练参数冻结,通过更新这些极少的 prompt 参数来适配下游任务。

具体做法:

  1. 文本侧 soft prompts:
  2. 与纯文本 Prompt Tuning 相同,在 LLM 的输入嵌入层前,拼接若干个可学习的文本 prompt 向量 PT∈Rl×dPT∈Rl×d,其中 ll 是 prompt 长度(如 10-50),dd 是词嵌入维度。
  3. 这些 prompts 可以是任务无关的(共享)或任务特定的。

  4. 视觉侧 soft prompts:

  5. 在视觉编码器的输入或输出侧添加可学习的向量。
  6. 输入侧:在图像的 patch 序列前拼接可学习的视觉 prompt token(如 10 个),送入 ViT。这些 token 通过自注意力与图像 token 交互,引导视觉特征向任务方向偏移。这被称为 Visual Prompt Tuning (VPT)。
  7. 输出侧:在视觉编码器输出的 token 序列前拼接 prompt 向量,作为 LLM 输入的一部分。

  8. 联合多模态 Prompt Tuning:

  9. 同时训练文本 prompts 和视觉 prompts。例如,LLaVA 等模型可以在投影层输出(视觉 token)之前插入视觉 prompts,同时在 LLM 输入之前插入文本 prompts。
  10. 这些 prompts 捕获任务特定的跨模态线索,以极低成本(<0.1% 参数)适应不同任务。

优势:几乎不增加推理计算量(仅多了一些向量拼接),在多任务场景可以为一个模型维护多套 prompts。

局限:表示能力有限,对于需要大幅改变模型行为或复杂推理的任务,效果不如 LoRA 或全参数微调。


Prefix-Tuning 能否直接用于多模态模型?视觉前缀该插入到哪里?

Prefix-Tuning 原本是为语言模型设计的,它在自回归生成时,在 KV 缓存的最前面预置可学习的前缀向量,影响后续所有 token 的注意力。

多模态模型中的直接应用:

  • 可以,而且已有工作(如 VL-PET、MMA)将 Prefix-Tuning 扩展到多模态模型。

  • 插入位置:视觉前缀应插入到 LLM 的每一层自注意力中,作为 key 和 value 的前缀。具体来说,对于 LLM 的每个 Transformer 层,在自注意力的 key 和 value 矩阵前拼接可学习的视觉前缀向量 PK(i),PV(i)∈Rl×dPK(i),PV(i)∈Rl×d,使得文本 token 在生成时能够通过注意力关注到这些视觉前缀,从而利用图像信息。

  • 为什么不是直接插入视觉 token:视觉 token 数量多且占空间,而视觉前缀是压缩的、可学习的表示,长度固定且远小于视觉 token 序列。它起到了将视觉信息压缩并传递给 LLM 的作用,与 Q-Former 等有异曲同工之妙。

实际操作:

  • 在训练时,视觉前缀的初始值可以由视觉编码器输出的全局特征(如 [CLS] token)经过投影并重复得到。

  • 推理时,只需在 KV 缓存前加上这些前缀,LLM 即可感知视觉信息。

  • Prefix-Tuning 可以与 Adapter 或 LoRA 结合,视觉侧用 Prefix,语言侧用 LoRA,实现更全面的轻量适配。

这种方案在多模态理解和生成任务中,能以极少的参数(仅前缀向量)使 LLM 获得不错的视觉理解能力。


IA3 等更轻量的方法能否有效微调多模态大模型?哪些任务上会失效?

(IA)^3(Infused Adapter by Inhibiting and Amplifying Inner Activations) 是一种比 LoRA 更轻量的方法:它对 Transformer 中的 key、value、FFN 的激活向量分别学习一个缩放向量 ll,通过逐元素乘法 l⊙xlx 来调制信息流,参数量远小于 LoRA。

在多模态模型中的有效性:

  • (IA)^3 已被证明在单模态 NLP 任务上,仅用约 0.01% 的参数量就可接近全参数微调。

  • 在多模态模型中,(IA)^3 同样可以插入 LLM 的各个子层。由于视觉-语言任务往往只需“调节”LLM 对视觉 token 的响应,而非重写大量参数,(IA)^3 在很多任务上表现良好,特别是指令微调阶段。

可能失效的任务:

  1. 需要大量新知识注入的任务:(IA)^3 仅重新加权现有激活,无法引入全新的特征交互。如果下游任务需要的知识与预训练分布差异极大(如需要记忆大量新实体、新视觉概念),(IA)^3 的表达能力可能不足。

  2. 需要复杂跨模态对齐变化的任务:例如,当视觉特征和语言空间存在明显鸿沟需要更深层次的变换时,仅靠缩放难以纠正这种偏移。

  3. 细粒度空间推理或定位:这些任务需要保留和操纵视觉 token 的精确空间结构,(IA)^3 不具备调整这种结构的能力。

  4. 长尾、高精度生成任务:在要求极高输出质量的任务(如医学报告生成),(IA)^3 可能因过于轻量而欠拟合。

总体而言,(IA)^3 在典型的指令微调基准上通常可以达到 LoRA 80%-90% 的性能,是极端资源限制下的候选方案。


对于多模态生成任务(如文生图),如何进行低秩适配?DreamBooth 属于 LoRA 的一种特例吗?

文生图模型的低秩适配(LoRA for Diffusion Models):

文生图扩散模型(如 Stable Diffusion)中,LoRA 通常加在 UNet 的交叉注意力层(即文本与图像交互的层)的线性投影矩阵上。具体位置:

  • 交叉注意力层的 Q、K、V、O 矩阵。

  • 有时也加在 ResNet 块或自注意力层的线性层。 通过低秩矩阵学习,实现用极少参数(如几 MB)控制生成风格、物体、构图等。

DreamBooth 与 LoRA 的关系:

  • DreamBooth 不是 LoRA 的特例。DreamBooth 是一种个性化微调方法,最初通过全参数微调 UNet(或结合先验保留损失)来将特定主体的外观绑定到一个稀有词上。它使用的仍是标准扩散损失,但通过数据设置和先验保留损失防止过拟合。

  • LoRA 是 DreamBooth 的轻量化替代方案。由于全参数 DreamBooth 训练成本高,社区很快将 LoRA 应用到 DreamBooth 中:冻结 UNet 原始权重,仅训练插入的 LoRA 权重,达到与全参数 DreamBooth 相近的个性化效果,且模型文件从数 GB 缩减到几 MB。这通常被称为 “LoRA DreamBooth” 或 “LoRA fine-tuning”。

  • 因此,DreamBooth 是一种任务(个性化生成),而 LoRA 是实现该任务的一种高效方法。两者并非同一层面的概念,但实践中常结合使用。

在文生图中,LoRA 已被广泛用于角色定制、风格迁移、概念注入等,成为生成式模型微调的标准轻量方案。


混合使用多种 PEFT 方法,比如视觉侧用 Adapter,语言侧用 LoRA,是否可行?有哪些坑?

完全可行,且已在一些研究中采用(如视觉侧 ViT-Adapter,语言侧 LoRA)。混合使用可以发挥不同方法在各自模态的优势。

可行性示例:

  • 视觉侧 Adapter:在 ViT 中插入轻量 Adapter,微调视觉特征以适配新领域(如医学图像),同时保持大部分视觉知识。

  • 投影层全参数:训练对齐层。

  • 语言侧 LoRA:让 LLM 学会理解适配后的视觉 token 并遵循指令。

潜在坑与应对:

  1. 训练不稳定/冲突:视觉 Adapter 和 LLM LoRA 同时改变特征分布,可能导致两者学习冲突,训练初期 loss 震荡。应对:分阶段训练——先固定 LLM LoRA,训练视觉 Adapter 到收敛;再联合微调,并降低整体学习率。

  2. 超参数难以统一:Adapter 和 LoRA 的最优学习率、调度可能不同。应对:为不同模块设置分组学习率,如视觉 Adapter 用 1e-4,LLM LoRA 用 5e-5,并分别做预热。

  3. 推理延迟增加:Adapter 增加推理延迟,LoRA 可合并无延迟。混合使用会部分抵消 LoRA 的速度优势。应对:仅在推理时保持视觉 Adapter,LLM 侧的 LoRA 合并,使延迟增加仅局限在视觉编码器部分。

  4. 总参数量虽小但零散:多个 PEFT 模块分散在不同子模块,管理和保存较繁琐。应对:统一使用 PEFT 库(如 HuggingFace PEFT)管理。

  5. 梯度冲突:两种方法更新的参数方向可能冲突。应对:使用梯度投影或模块特定的优化器状态。

混合 PEFT 是一种灵活的策略,但需要更细致的调参和训练技巧。在实践中,若领域偏移不极端,通常只加 LLM 的 LoRA 就已足够,混合方案仅用于强需求场景。


多模态高效微调时,如何选择可训练参数的秩 r?与单模态相比有什么特殊考量?

秩 r 的选择原则:

  • r 越大,表达能力越强,但参数量越多,过拟合风险增加。

  • 通常选取 4~64 之间。对于大规模多模态模型,通用推荐:r=16 或 32 是安全且高效的起点;若数据量极少(<1000),用 r=4~8 防止过拟合;若数据充足(>5万),可尝试 r=64 追求更高性能。

多模态的特殊考量:

  1. 任务复杂度:多模态任务涉及跨模态交互,复杂推理任务可能需要稍高的 r(32-64),而简单的描述生成 r=8-16 足够。

  2. 视觉 token 的干扰:LLM 需要处理额外的大量视觉 token,这增加了 LLM 输入的信息复杂度。适当提高 LLM 侧 LoRA 的秩,有助于 LLM 学习如何有效融合视觉信息。一些实验表明,在多模态模型上,r=32 明显优于 r=8,而在纯文本任务上差距不大。

  3. 数据分布差异:如果下游多模态数据与预训练分布差异大,更大的 r 有助于补偿分布偏移。

  4. 模块差异:不同模块的最优 r 可能不同。LLM 的核心自注意力层通常使用较大的 r(如 32-64),而 FFN 层可用较小的 r(如 8-16)。投影层若使用 LoRA,由于其输入输出维度可能较小,r 可取 4-8。

  5. 组合时 r 的分配:若同时在视觉侧和语言侧使用 LoRA,视觉侧的 r 通常远小于语言侧(如视觉 r=4,语言 r=32),以保护视觉预训练特征。

实践建议:通过网格搜索在验证集上确定最佳 r。通常多模态的 r 会比纯文本微调略大,以容纳跨模态交互所需的额外自由度。


评估一种 PEFT 方法在多模态模型上的表现,除了下游任务指标,还应关注什么?

综合评估体系应覆盖效果、效率和实用性:

  1. 参数量与存储效率:可训练参数占全参数的比例、实际存储大小(MB/GB)。这对部署和共享至关重要。

  2. 训练效率:训练时间、显存占用峰值、最大可支持 batch size。能否在消费级硬件上运行?

  3. 推理延迟:PEFT 方法是否引入额外计算?LoRA 可合并零延迟,Adapter 则增加延迟,Prompt/Prefix 增加 KV 缓存计算量。

  4. 泛化性与鲁棒性:

  5. 在不同数据量下的性能退化(少样本、全量)。
  6. 对不同域外数据的泛化能力。
  7. 对噪声和对抗攻击的鲁棒性。

  8. 灾难性遗忘程度:微调后,模型在原始单模态任务(纯文本问答、纯视觉分类)上的性能是否大幅下降?LoRA 往往能更好保持原有能力。

  9. 可插拔性与可组合性:能否容易地添加、移除、切换不同的 PEFT 模块(多任务场景)?混合不同 PEFT 方法是否方便?

  10. 训练稳定性:收敛速度、对超参数的敏感度、不同随机种子下的方差。

  11. 对模型结构的侵入性:是否需要修改模型结构?是否依赖特定架构?LoRA 普适性最强,Adapter 需插入特定位置,Prompt 仅需改输入。

  12. 可解释性/分析性:能否从学到的参数中获得 insight?例如 LoRA 权重的奇异值分布可反映任务所需表示的秩。

最终的选型应是这些维度的综合权衡,而非仅看下游任务分数。例如,在移动端部署场景,推理延迟的权重极高;在多租户 SaaS 场景,可插拔性和存储效率成为关键。