多阶段训练流程
三个阶段中哪个最消耗计算资源?如何针对各阶段进行资源倾斜?¶
第二阶段——多模态预训练通常最消耗计算资源。
原因分析:
-
数据规模最大:多模态预训练通常使用数百万到数十亿的图文对数据(如 LAION-400M、COYO-700M 等),数据量远大于第一阶段的对齐数据(通常几十万到几百万)和第三阶段的指令数据(通常几万到几十万)。
-
训练步数最多:预训练阶段通常需要数十万甚至数百万步的迭代,才能充分学习跨模态的语义对齐和知识。
-
参数更新量最大:虽然第一阶段和第三阶段也可能更新大量参数,但预训练阶段往往需要更新视觉编码器、连接器和 LLM 的大部分或全部参数,且 batch size 通常极大(数千甚至上万)。
各阶段的资源倾斜策略:
总体原则:第一阶段“快跑验证”,第二阶段“重兵投入”,第三阶段“精调优化”。

为什么第一阶段通常冻结视觉编码器和 LLM,只训练投影层?不冻结会怎样?¶
冻结的原因:
-
保护预训练知识:视觉编码器(如 CLIP ViT)和 LLM 各自经过大规模单模态预训练,拥有丰富的视觉表示和语言能力。第一阶段目标是让视觉 token 的分布与 LLM 词嵌入空间初步对齐,而非改变它们的核心能力。
-
训练稳定性:投影层参数极少(通常一个线性层或两层 MLP),学习目标单纯。如果同时解冻视觉编码器和 LLM,初期梯度混乱会导致视觉表示剧烈变化,LLM 的语言能力也会被破坏,训练极易崩溃或产生灾难性遗忘。
-
数据效率:第一阶段的图文对数据通常较简单(如图像-标题对),解冻大量参数容易过拟合,导致泛化能力下降。
不冻结的后果:
-
视觉编码器因梯度冲击而输出分布漂移,投影层刚学到的对齐立刻失效。
-
LLM 的语言建模能力被图文对数据快速覆盖,出现严重的灾难性遗忘,生成质量急剧下降。
-
训练损失震荡,收敛缓慢,甚至无法收敛。
因此,第一阶段只训练投影层是一种安全且高效的热启动,为后续更复杂的解冻训练铺平道路。
第二阶段解冻哪些部分?如何防止灾难性遗忘?¶
通常解冻的部分:
-
连接器/投影层:继续训练,因为它需要适应更多样化的数据。
-
LLM:通常全参数解冻或使用参数高效微调(如 LoRA)。解冻 LLM 能使其深度整合视觉信息,实现多模态推理。
-
视觉编码器:视情况而定。大多数工作(如 LLaVA-1.5)选择冻结视觉编码器,因其已提供足够好的视觉特征,解冻收益有限且容易导致遗忘。少数工作(如 Qwen-VL)会缓慢解冻视觉编码器的高层,以学习更任务相关的视觉表示。
防止灾难性遗忘的方法:
-
混合纯文本数据:在预训练 batch 中混入一定比例(如 10%-20%)的纯文本数据,使用标准的语言建模损失训练 LLM 部分。这强制模型保持其语言理解和生成能力。
-
小学习率与渐进解冻:LLM 使用远小于预训练时的学习率(如 2e-5),视觉编码器若解冻则使用更小学习率(如 1e-6)。有时先训练连接器和 LLM 几轮,再缓慢解冻视觉编码器高层。
-
参数高效微调:使用 LoRA、Adapter 等方法仅更新少量参数,冻结 LLM 的主体权重,将遗忘风险降至最低。
-
重放旧知识:在训练中定期回放 LLM 原始预训练数据或评测任务,监控语言能力指标,一旦退化即调整策略。
-
知识蒸馏:用原始 LLM 作为教师,约束微调后的 LLM 在纯文本任务上的输出分布。
这些策略组合使用,可以在多模态对齐的同时保持 LLM 的核心能力。
多模态指令微调的数据量、数据多样性与数据质量¶
数据量:
- 典型数量级在几万到几十万条指令样本。LLaVA 最初使用 158K 条,LLaVA-1.5 扩充到 665K。相比预训练的数亿图文对,指令数据量小得多。
数据多样性 vs 数据质量:
-
质量更重要。指令微调阶段的目的是对齐人类意图,让模型学会遵循多样化的指令格式,而非学习新知识。低质量的指令数据(如错误的答案、模糊的描述、格式混乱)会迅速破坏模型已有的能力,导致生成质量下降、幻觉增多。
-
多样性是关键维度。高质量基础上的多样性才能让模型泛化到各类指令。多样性应覆盖:
- 任务类型:描述、问答、推理、创作、OCR、定位等。
- 指令风格:简短指令、详细要求、多轮对话、条件约束。
- 输出格式:自由文本、JSON、Markdown、代码块等。
-
难度梯度:简单识别到复杂推理。
-
实际权衡:优先保证每条数据的高质量(事实准确、逻辑清晰、与图像高度相关),在此基础上尽可能多样化。LLaVA 的成功很大程度上归功于用 GPT-4 精心构造的高质量多样化指令数据。
如何在指令微调阶段引入“负例训练”,教模型在不知道时拒绝回答?¶
负例训练是指在训练数据中主动加入模型应该拒绝回答或表达不确定性的样本,教会模型识别自身知识边界。
具体方法:
- 构造不可回答的问题:
- 为图像生成与内容无关的荒谬问题(如对风景图问“这辆车是什么型号?”),标准答案设为“抱歉,图像中没有汽车”或“我无法回答这个问题”。
-
问图像中不存在的信息(如“图中人物的电话号码是多少?”),答案设为“图像不提供此类信息”。
-
构造模糊或不可判定的问题:
-
对低分辨率或严重遮挡的图像提问,标准答案设为“图像不够清晰,无法确定”。
-
构造反事实或对抗性问题:
-
给一个事实性错误的陈述让模型判断,如“这张图显示的是埃菲尔铁塔(实际是东京塔),对吗?”,答案应为否定并纠正。
-
输出格式规范:在训练数据中统一拒绝回答的模板,如“抱歉,基于提供的图像,我无法...”。
-
多轮对话中的负例:在对话历史中插入模型已拒绝回答的场景,后续用户继续追问,模型仍应坚持不编造。
注意事项:
-
负例比例不宜过高(如 5%-15%),以免模型变得过度保守。
-
负例也应保证多样性,覆盖不同类型的“不知道”。
-
训练时需确保模型真正学会判断,而非仅仅记忆特定问题模式。
能否将多阶段合并为一个端到端阶段?主要障碍是什么?¶
理论上可行,但实践中障碍巨大。
主要障碍:
-
数据规模与复杂度的巨大差异:特征对齐需要的是简单图文对,多模态预训练需要海量弱相关图文对,指令微调需要精心构造的高质量指令数据。将这些混合在一起端到端训练,数据采样策略极为复杂,且不同数据类型对模型能力的要求完全不同。
-
训练稳定性与灾难性遗忘:同时进行多种任务和难度的训练,梯度冲突剧烈。初期简单任务收敛快,后期复杂任务可能被忽视;LLM 的语言能力可能在嘈杂的图文数据中迅速退化。分阶段训练本质上是一种课程学习,先易后难,保护已有能力。
-
资源效率低:端到端训练需要始终以最高配置(全参数、大 batch)运行,而分阶段可以在早期用更少资源快速迭代。
-
缺乏中间验证:分阶段可以在每个阶段结束后评估特定能力(如第一阶段检查对齐质量),端到端则难以定位问题。
例外情况:一些大规模统一多模态模型(如 Gemini、Chameleon)采用了“大一统”训练,但它们拥有海量算力、精心配比的多任务数据、以及复杂的优化策略(如动态采样、多任务平衡),实际上仍是分阶段思想的隐式实现。对于资源有限的团队,分阶段是更务实的选择。
不同阶段的优化器和学习率调度策略¶
视觉编码器和 LLM 的学习率分离:
若解冻视觉编码器,其学习率通常设为 LLM 的 1/10~1/5,因为视觉特征需要保持相对稳定。例如,LLM 学习率 2e-5,视觉编码器学习率 2e-6。
特殊技巧:
-
Layer-wise learning rate decay:对 LLM 底层使用更小学习率,高层更大,保护低层语言基础。
-
MoE 模型:可能需要针对专家网络和路由机制定制学习率。
如何验证第一阶段对齐质量?常见指标¶
对齐质量指标:
-
检索召回率:用图文检索任务(I→T 和 T→I)的 Recall@1、Recall@10 评估。如果对齐好,应该能用图像检索到匹配文本,反之亦然。
-
零样本分类准确率:将投影后的视觉 token 送入 LLM,进行简单的零样本分类(如“这是一张什么动物的图片?”),看 LLM 是否能根据视觉特征正确回答。
-
图像描述质量:让模型为少量图像生成描述,用 BLEU、CIDEr 或人工评估描述是否与图像相关、语义连贯。
-
嵌入空间可视化:用 t-SNE 或 UMAP 可视化图像和文本嵌入的分布,观察匹配的图文对是否在空间中邻近,不同语义的簇是否分离。
-
线性探测:在投影后的视觉 token 上训练简单的线性分类器,看是否容易区分不同类别,评估特征是否保留了足够的语义信息。
实践:通常在第一阶段结束时,检索指标会有显著提升(Recall@1 从接近 0 到 50%+),描述从乱码变为语义相关的短句。如果这些指标不理想,说明需要调整投影层结构或延长训练。
课程学习设计:从简单匹配到复杂推理¶
设计多模态预训练的课程学习,核心是按样本的难度和任务复杂度排序,由浅入深地呈现给模型。
具体课程设计步骤:
- 难度度量:
- 简单样本:单物体图像 + 简短名词短语(“一只白猫”),物体居中、背景简单。
- 中等样本:多物体图像 + 包含属性和空间关系的描述(“左边的红车旁边站着一个穿蓝衣服的人”)。
- 困难样本:复杂场景 + 需要推理、比较、计数的长文本(“图中所有戴帽子的人共有几个?他们分别在做什么?”)。
-
难度可以通过 CLIP 相似度、文本长度、物体数量、问题类型等自动估计。
-
阶段划分:
- 早期:主要使用简单样本,训练基础跨模态对齐和描述生成。
- 中期:逐步增加中等样本比例,引入空间关系、属性绑定等任务。
-
后期:大量使用困难样本,加入推理、QA、多图对比等复杂任务。
-
动态课程:
- 根据模型的验证性能自动推进课程。例如,当简单样本的检索 Recall 超过阈值,自动增加中等样本的采样权重。
-
可使用 SPL (Self-Paced Learning) 策略,让模型自动选择当前最适合学习的样本。
-
多任务课程:
- 不同任务也可以有课程顺序:先训练对比学习(全局对齐),再训练匹配任务(细粒度对齐),最后训练生成任务(复杂推理)。
课程学习能让训练更稳定,最终性能通常优于随机打乱数据。
多模态大模型训练中的“顿悟”现象¶
顿悟(Grokking) 指模型在长时间训练后,验证集上的性能突然大幅提升,而非缓慢增长。在 LLM 中,这常表现为某个时刻模型突然学会推理或遵循复杂指令。
多模态模型中的相关观察:
- 目前公开文献中,多模态大模型的训练较少报告典型的“顿悟”现象,但存在类似的能力涌现:
- OCR 能力:某些模型在预训练到某个阶段后,突然能够阅读图像中的文字,即使训练数据中并未显式强调 OCR 任务。
-
空间推理:模型可能在某个临界点后,突然能够正确理解“左边”、“上面”等空间关系。
-
潜在原因:多模态模型的损失函数更复杂(对比+生成),且视觉 token 的引入增加了优化难度。此外,三阶段训练将能力获取分解到不同阶段,可能掩盖了顿悟的显著性。
可能的条件:
-
极大规模数据和算力。
-
充足的训练步数(远超常规收敛点)。
-
适当的正则化(如权重衰减、dropout)。
随着更大规模多模态模型的训练(如 Gemini Ultra),未来可能会有更多关于多模态顿悟的观察和理论。
BLIP-2 的两阶段训练策略详解¶
BLIP-2 采用冻结视觉编码器 + 可学习的 Q-Former + 冻结 LLM 的架构,训练分为两个阶段。
第一阶段:视觉-语言表征学习
-
目标:训练 Q-Former,使其学会从冻结的视觉编码器特征中提取与语言相关的视觉 token。
-
训练参数:仅更新 Q-Former(包括内部的 Transformer 层、可学习查询向量、以及三个任务的头部),视觉编码器和 LLM 均冻结。
-
训练任务:Q-Former 同时进行三个任务:
- 图文对比学习(ITC):对齐查询向量输出的全局表示与文本的 CLS token。
- 图文匹配(ITM):判断图文是否匹配,学习细粒度对齐。
-
语言建模(LM):给定图像,用 Q-Former 自带的文本解码器生成字幕。
-
为什么这样安排:三个任务共享 Q-Former 参数,相互促进。ITC 提供全局对齐,ITM 提供细粒度判别,LM 提供生成能力。这一阶段让 Q-Former 成为“视觉-语言桥梁”。
第二阶段:视觉-语言生成学习
-
目标:将 Q-Former 连接到冻结的 LLM,让 LLM 根据视觉 token 生成文本。
-
训练参数:仅更新 Q-Former(主要是与 LLM 的投影层),视觉编码器和 LLM 均冻结。
-
训练任务:语言建模损失(给定图像,生成描述或回答)。Q-Former 输出的视觉 token 作为软提示,拼接到 LLM 的输入前,LLM 以这些视觉 token 为条件自回归生成文本。
-
为什么这样安排:冻结 LLM 保护其语言能力,只需训练 Q-Former 如何将视觉信息“翻译”成 LLM 能理解的提示。这大大降低了训练成本,同时保持了 LLM 的零样本能力。
这种两阶段设计将视觉-语言对齐的重任完全交给 Q-Former,是一种高效且解耦的架构。
为什么常选择冻结视觉编码器而只微调投影层和 LLM?什么情况下解冻?¶
冻结视觉编码器的原因:
-
视觉特征已足够好:预训练的 CLIP ViT 等视觉编码器已通过大规模图文对比学习获得了强大的语义视觉表示,足以支撑大多数多模态任务。
-
防止灾难性遗忘:视觉编码器也携带着预训练的视觉知识,微调可能破坏其通用性,导致在未见过的视觉域上性能下降。
-
计算效率:冻结视觉编码器可以大幅减少训练参数量和 GPU 显存占用,加快训练速度。
-
保持与 LLM 的独立性:冻结视觉编码器使得视觉特征空间保持固定,LLM 只需学习如何解读这些特征,训练更稳定。
解冻视觉编码器的情况:
-
领域差异巨大:当目标应用领域与视觉编码器的预训练数据差异极大(如医疗影像、遥感图像、工业缺陷检测),固定的视觉特征可能不适用,需要微调以捕捉领域特定的纹理、形状。
-
需要高分辨率细粒度理解:当任务要求极其精细的视觉细节(如显微镜图像分析、高精度 OCR),微调视觉编码器能帮助其保留更多高频信息。
-
有大规模高质量多模态数据:如果拥有足够多的领域内图文对数据,解冻视觉编码器联合微调可以显著提升性能上限。
-
追求极致性能:在算力充裕的情况下,缓慢解冻视觉编码器高层并配合极低学习率,往往能带来额外的性能提升。
典型策略:采用渐进式解冻——在预训练后期或指令微调阶段,以非常小的学习率解冻视觉编码器最后几层,让它们适度适应多模态任务,同时保留低层基础特征。
视觉预训练、图文对齐预训练和指令微调三个阶段的目标与分阶段原因¶
三个阶段的目标:
分阶段的原因:
-
能力解耦与保护:每个阶段建立在上一阶段的能力基础上。直接端到端训练极易导致灾难性遗忘,分阶段可以保护预训练获得的核心能力。
-
数据效率:不同阶段使用不同规模和类型的数据,最大化数据利用效率。
-
训练稳定性:从简单任务到复杂任务,从少量参数到大量参数,课程式递进,确保训练稳定收敛。
-
资源优化:早期阶段可用较少资源快速验证,后期再投入重资源,避免浪费。
设计课程学习策略:从简单图文对到复杂多模态推理¶
策略设计:
- 第一阶段:粗粒度图文对齐
- 数据:简单图文对(单物体、短描述)。
- 任务:图文对比学习(ITC)和基础字幕生成。
- 目标:建立视觉 token 与语言的基本映射。
-
难度控制:选择 CLIP 相似度高的图文对,确保语义简单明确。
-
第二阶段:细粒度感知与描述
- 数据:包含多物体、属性、空间关系的中等图文对。
- 任务:掩码语言建模(MLM)、掩码图像建模(MIM)、细粒度字幕生成。
- 目标:学习属性绑定、空间关系、物体间交互。
-
难度控制:增加物体数量和关系复杂度,引入位置词。
-
第三阶段:简单推理与问答
- 数据:单轮问答数据(如 VQA v2 中的简单问题)。
- 任务:视觉问答。
- 目标:根据图像内容回答直接问题。
-
难度控制:选择答案简短、无需多步推理的问题。
-
第四阶段:复杂推理与指令遵循
- 数据:多轮对话、复杂推理、文本识别、多图对比等。
- 任务:多样化指令微调。
- 目标:泛化到各种指令格式,学会逻辑推理和拒绝回答。
- 难度控制:逐步增加指令长度、推理步数和任务多样性。
动态课程:在每个阶段内,可进一步根据样本的模型困惑度或验证准确率动态调整采样权重,让模型始终在“最近发展区”学习。这种逐级递进的课程策略能最大化训练效率和最终性能。