ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MLLM模态不平衡与特权信息:训练引导视觉推理

MLLM模态不平衡与特权信息:训练引导视觉推理 多模态大语言模型MLLM的视觉推理能力并不像演示视频里那样天然可靠。一个典型现象是把图片换掉、只保留问题文本模型给出的答案可能几乎不变或者给同一张图配一个带误导倾向的问题模型会顺着语言线索走不再仔细看图像。这类问题在社区里被归为模态不平衡modality imbalance本质是语言模态在联合训练中占据了过大的梯度与表征空间视觉模态沦为“陪跑”。解决思路并不只有堆更多视觉数据。把模态平衡当作一种特权信息在训练阶段引导模型真正利用视觉证据是一条值得尝试的技术主线。下面会先拆解模态不平衡的成因再讲特权信息范式然后给出一个可实现的模态平衡特权信息框架并用视觉问答作为最小实验场景覆盖实现、验证、排错和工程落地四个环节。1. 先理解MLLM的模态不平衡到底出现在哪个环节1.1 一个能复现的“语言偷懒”现象先做一个实验。准备一张客厅照片画面里有一只橘猫趴在灰色沙发上向模型提问“猫在哪里”。表现正常的模型会回答“沙发上”或“灰色沙发上”。但如果你把图片换成一张没有猫的书房照片保留同样的问题很多MLLM仍然会回答“沙发上”。这说明模型在大多数时候根本没有从图像里找猫而是靠“猫”这个词和训练语料里的共现先验直接完成推理。这个现象在视觉问答领域有一个专门说法language prior即语言先验。要判断自己的模型是否存在这个毛病最省事的办法是固定问题文本把图像替换成纯色图、随机噪声图或完全不相关的图然后观察答案是否变化。如果答案分布几乎不变说明视觉分支对决策的贡献很低这就是模态不平衡最容易观察到的表现。1.2 模态不平衡的三种典型表现实际项目中模态不平衡不会只以一种形式出现。根据问题定位的不同至少可以分成三类表现现象大概率定位环节语言先验主导遮挡答案相关区域后输出不变替换问题中实体词后输出跟随变化训练数据配比、Loss权重视觉特征利用率低可视化注意力时视觉token上的注意力权重远低于文本token融合网络、投影层梯度失衡打印各模块梯度范数语言主干远大于视觉编码器反向传播、冻结策略这三类表现往往同时存在。比如语言先验主导会进一步压低视觉分支的梯度视觉分支梯度低又会让图像特征更难被训练到可用状态形成负循环。因此排查模态不平衡时不要只看某一个指标要同时检查数据、Loss、梯度三个层面。1.3 为什么语言模态会压过视觉模态从工程角度看语言模态“压过”视觉模态的原因可以拆成四个参数规模不对称。大语言模型通常比视觉编码器大一个数量级同样的优化步长下语言侧能承载更多信息。token数量不对称。文本侧可以只有几十个token图像侧往往要拆成上百甚至上千个patch token后向传播时的梯度统计差异很大。训练目标不对称。大多数MLLM继续使用自回归语言建模损失这个损失天然只监督文本输出对图像特征没有直接约束。训练数据不对称。指令数据和问答文本容易获取图像与文本强对齐的数据相对少模型很容易学到“不看图也能答”的捷径。理解这四点之后就会明白单纯给视觉分支加一个更大的投影层并不能解决根本问题因为Loss层面仍然没有给视觉特征施加足够的压力。这也是下面引入特权信息的动机。2. 特权信息训练阶段能用、推理阶段不可见的额外信号2.1 特权信息的思想来源LUPI 范式特权信息privileged information并不是多模态领域的新概念。它来自Vapnik提出的LUPI范式即Learning Using Privileged Information。这个思想用一句话概括训练时教师可以提供一些额外的、测试时拿不到的信息帮模型学到更好的决策边界推理时这些信息不再出现但模型已经学到了它们的“影子”。典型的例子是图像分类。训练时除了图像类别标签还可以给出图像的语义描述、物体边界框、甚至人类标注的关注区域。这些信息在测试时并不存在但它们可以在训练阶段给模型提供比类别标签更丰富的监督信号。LUPI的核心不是让模型在推理时依赖这些信息而是用它们帮助模型在训练阶段收敛到更好的表示。2.2 在多模态场景里特权信息具体长什么样把LUPI落到MLLM中关键问题是哪些信息在训练时有、推理时没有又能帮助视觉推理实践中常见的选择包括图像的详细描述文本。训练时由人工或视觉模型生成推理时不产生额外成本。答案引用的图像区域。比如VQA数据中标注的边界框训练时用来对齐视觉token。跨模态检索的正样本。训练时用图文对构造对比目标推理时不参与。模态平衡信号。例如每个样本上视觉证据对答案的贡献程度训练时可计算推理时不可知。最后一种正是这个框架要用的。它不像描述文本那样关注“图像里有什么”而是关注“模型当前有没有真的在用图像”。2.3 为什么“模态平衡”适合作为特权信息模态平衡天然满足特权信息的两个条件。第一训练时可以计算。给定一个训练样本模型在前向过程中能拿到视觉特征和文本特征又因为训练集里有真值答案可以据此判断视觉证据对答案的支撑程度从而得到平衡目标。第二推理时无法准确获得。推理阶段没有标准答案也无法判断当前样本里视觉证据到底该占多少权重。如果强行在推理时估计要么引入额外模型要么依赖启发式规则都会破坏端到端部署的简洁性。因此正确用法是训练阶段用模态平衡目标约束视觉特征推理阶段让模型凭借学到的参数自然完成融合。这也是后续三个模块的设计基础。3. 模态平衡特权信息框架三个模块怎么设计3.1 总体训练流程训练时有额外分支推理时保持原结构框架的总体设计原则是“训练增强、推理不变”。训练时在标准自回归语言建模损失之上叠加三个辅助目标推理时这些辅助分支全部关闭模型结构退回普通MLLM。这样做的好处是上线成本低不需要额外服务也不增加推理时延。整体训练流程可以概括为视觉编码器提取图像patch特征。文本编码器得到问题与答案的嵌入表示。投影层把视觉特征映射到语言模型空间。计算语言建模损失。用答案文本作为特权锚点计算视觉锚定损失。用视觉特征与答案特征计算跨模态对比损失。用门控模块估计视觉token的重要性并用特权目标约束门控分布。加权求和后反向传播。3.2 模块一视觉锚定损失让生成必须参考视觉证据视觉锚定损失的目标很直接让图像特征与答案语义在表示空间中对齐。视觉特征和答案特征越接近说明图像里确实编码了回答所需的证据反之视觉特征与答案语义脱节说明模型很可能在“不看图硬答”。实现时需要注意答案文本在推理阶段不存在因此它在这里就是纯粹的特权信息。一个可用的简化实现如下import torch import torch.nn.functional as F def visual_anchor_loss( visual_token_embeds, # (batch, num_image_tokens, hidden_dim) answer_text_embeds, # (batch, seq_len, hidden_dim)训练时的特权信息 temperature0.07, ): # 答案文本的平均表示作为锚点 anchor answer_text_embeds.mean(dim1) anchor F.normalize(anchor, dim-1) # 视觉token取最大激活避免平均把关键区域稀释掉 visual visual_token_embeds.max(dim1).values visual F.normalize(visual, dim-1) # 相似度越大越好因此用 (1 - 相似度) 作为损失 sim (visual * anchor).sum(dim-1) / temperature loss (1.0 - sim).mean() return loss这里有两个细节值得说明。第一视觉侧为什么用max而不是mean
返回列表