资讯动态

多模态主动学习新思路:模态平衡与难度感知联合采样

发布时间:2026/10/21 20:40:44 来源:尧图企业网站定制
1. 为什么多模态主动学习比想象中难做多模态数据的人应该都有体会标注成本不是线性涨而是指数级涨。单模态标一张图、一句文本或者几秒音频成本还可以估算一旦要求三个模态对齐到同一个语义标签事情就变得复杂。比如一个视频片段画面里出现一只猫语音里提到“猫”文本描述里也写了“猫”标注员必须同时确认三路信息都指向同一个实体才算有效标注。任何一个模态标偏了这个样本进入训练集后不是在帮模型而是在坑模型。这些天我在整理刚完成的一篇工作标题是“Label What Matters: Modality-Balanced and Difficulty-Aware Multimodal Active Learning”计划的落点是CVPR 2026。标题很长但把三个关键词拆开之后并不复杂多模态主动学习、模态平衡、难度感知。它解决的问题很直接——用尽量少的标注样本把多模态模型的性能拉到和全量标注差不多的水平同时保证选出来的样本不是靠着某个强模态“一锤定音”而是真的值得人去标。这篇内容适合三类读者一类是把主动学习当作数据管线一部分的算法工程师想参考一个能落地的采样方案一类是准备做多模态相关研究的同学想找一个“怎么把两个改进点揉进同一个框架”的完整案例还有一类是项目负责人想估算一下采用主动学习之后标注预算能省多少、风险在哪里。我会把方法论、实验设置、实现细节和踩坑过程都摊开来讲尽量让每个点都能直接放到自己的流程里验证。1.1 标题拆解一句话里的三个关键词“Label What Matters”这句话其实是全文的主张你要标注的不是“看起来难”的样本也不是“模型当前搞不定”的样本而是那些在模态之间真正有信息增量、能同时推动多个模态表征对齐的样本。传统主动学习里采样策略通常只盯一个指标比如预测熵、置信度、边缘距离这些做法在单模态任务里已经有很多验证。到了多模态阶段问题变成了“模型对样本的不确定性到底来自哪个模态”。“Modality-Balanced”对应的是采样时的模态均衡问题。多模态模型天然会被强模态带走比如图像分类任务中图像特征往往比文本特征更有区分度模型整体预测被图像主导。这时候如果只用总不确定性采样选出来的样本大概率是“图像很难但文本很简单”的那类标注之后对文本分支几乎没有任何帮助。模态平衡的关键是在评分阶段引入“这个样本有多需要多个模态共同参与”的信号让图像、文本、音频各自的短板都有机会被暴露。“Difficulty-Aware”则是对“难度”这个词的重新定义。不少主动学习工作把“难度”等同于高熵或低置信度但高难度样本里混杂着噪声样本、标注错误样本和真正有价值的困难样本。如果模型对这些样本的预测始终不稳定它们很可能不是难而是脏。这项工作把难度拆成了“学习动态相关的难度”用模型在训练过程中的表现变化来判断一个样本是“值得挑战的难”还是“单纯让人困惑的难”这个视角很关键。1.2 标数据不只是贵而是会标错方向很多人觉得主动学习就是“少标一点数据省点预算”这话只对了一半。主动学习的收益不只来自“少标”更来自“标得准”。如果采样策略有问题你每轮多标的几百个样本可能都贴着已有数据分布模型性能停在原地预算等于白花。多模态场景把这个问题放大了好几个量级。原因在于多模态数据的标注不只是“分类”或“打框”还包含模态对齐。比如一条包含图像和语音的样本你要先判断两个模态表达的是不是同一个语义再决定标什么标签。这个过程天然比单模态贵而且不同模态的标注成本差异很大一张图的目标框标注可能只要几秒钟一段语音的转写加语义标签可能要几分钟。如果主动学习策略不感知模态几轮下来预算就被单一模态消耗掉了。另一个容易被忽视的问题是“标注方向”。传统主动学习假设所有标注都能提升模型但多模态模型对样本的需求并不平均。假设一个样本图像部分很容易识别文本部分却存在歧义模型在融合后表现出高不确定性。如果你把这个样本选给标注员标注员可能会先修正文本部分的歧义但图像部分已经占据决策主导模型对文本信号的依赖并没有增加。采样策略如果不显式地做模态贡献分析标注数据就会大量落在“模型已经会了的模态”上整体效果自然不理想。1.3 这篇工作的定位和适合谁看从研究定位看这项工作的输入设定是模型和所有未标注数据都已具备多模态特征标注预算有限需要每轮挑选一小批样本标注后重新训练。它不要求额外的领域知识也不假设数据完美无缺甚至考虑了部分模态缺失的情况。相比目前不少主动学习工作停留在单模态或者人工合成数据这个设定更接近真实业务。适合看的人第一类是正在做数据中台或者算法平台的工程师。如果你手里有多模态样本池但标注人力只够覆盖其中一小部分那么这篇工作可以直接给你一个采样框架训练代理模型、算模态贡献、算样本难度、联合排序、批量去重。每一环都有对应的可落地细节。第二类是准备进入主动学习方向的研究同学。这篇工作最值得参考的不是某个数学公式而是“把两个看似独立的改进点放进同一个评分框架”的推导过程。模态平衡和难度感知听起来像两个方向但最终都落到了“给未标注样本算一个分数”这件事上这个抽象过程本身就是很好的研究训练。第三类是做项目的技术负责人。你可能不需要亲自写采样代码但需要判断主动学习这个方案到底值不值得投入。看这篇工作的消融实验和预算对比能直观感受到收益边界在哪里低预算阶段提升明显预算充足之后会和随机采样拉不开差距。这个认知能帮你避免被各种花哨采样方法忽悠。2. 两个核心创新点模态平衡与难度感知这项工作的方法部分并不复杂主线就是围绕两个关键词展开。我先把它们单独讲清楚再讲如何统一到同一个评分函数里。这两个点单独拎出来都有人做过但组合起来并给出清晰的多模态场景定义才是这篇工作的价值所在。2.1 模态平衡防止“一科带飞全班”的采样陷阱模态不平衡的问题用一个学生评奖的例子来类比最合适。班里张榜评三好学生不能只看数学成绩否则李四数学满分但语文不及格照样被评上这显然不合理。多模态模型里的情况更隐蔽模型内部有两个“学生”在合作图像这个学生成绩一直很好文本这个学生还在及格线挣扎。融合之后模型整体表现的波动绝大多数来自图像这个学生的波动文本学生的错误被“平均”掉了。如果主动学习采样只盯着融合模型的输出挑选那些整体预测混乱的样本往往会选到“图像学生发挥失常、文本学生正常作答”的情况。标完之后模型把图像学生再训一训就恢复了文本学生还在原地踏步。模态平衡要解决的就是这件事在挑选样本时主动去关注那些多个学生意见不一致的样本。在实现上模态平衡的信号可以用“模态间分歧度”来近似。对于一个未标注样本x先用各模态的单模态分支分别给出预测概率分布再计算这些分布之间的差异。差异越大说明不同模态对同一个样本的理解越不一致这种样本通常处于模态能力的交界处正好是训练多模态对齐最有价值的区域。2.2 难度感知难样本不等于好样本主动学习研究者很早就发现单纯追求“难”会翻车。如果你定义一个样本很难是因为模型置信度低那么会选到一堆图像噪声、标注错误、背景杂乱的样本。这些样本不是有信息量它们只是让人学不会。难度感知的核心是找出“模型付出了努力但还没学会”的样本而不是“模型压根学不懂”的样本。怎么区分这两类我觉得最直觉的做法是看“学习曲线”。如果模型在好几轮训练中对同一个样本的预测都在摇摆说明这个样本和模型当前的能力差距很大这个难度很可能来自噪声或分布外数据。反过来如果样本一开始让模型困惑但随着训练进行预测逐渐稳定说明它正在推动模型学习这种样本才是主动学习该去标注的。具体计算时不需要为每个样本单独维护一条学习曲线。常见方案是用最近几个epoch的checkpoint对未标注池做预测统计预测标签的变化频率。变化频率低说明模型已经“消化”了这个样本变化频率高且一直高说明样本本身可疑。把熵、置信度和这个变化频率结合就能得到一个比单纯难度更稳的指标。后面实验里我把“学习动态难度”这块单独做了消融它的贡献比预想的大。2.3 统一评分公式与整体设计思路把两个目标放进同一个框架最直接的方式是线性加权Score(x) λ * Balance(x) (1 - λ) * Difficulty(x)其中Balance(x)代表模态平衡分数Difficulty(x)代表难度感知分数。λ在0到1之间默认取0.5到0.6之间。这个形式看起来简单但后面所有实验都证明它够用而且非常好调。为什么不用更复杂的非线性组合因为我试过几种门控组合发现在中等规模数据上复杂度上升带来的收益远小于超参敏感性带来的麻烦。线性加权至少有两个好处第一你可以单独看两个分数分布的百分位直观判断某批样本是在靠模态平衡取胜还是靠难度取胜第二λ的退火策略很好写比如冷启动阶段加大难度项权重后期逐步把平衡项权重提上来。整体设计思路是一个四步循环训练代理模型计算每个未标注样本的模态平衡分数和难度分数加权合并得到最终分再经过批次多样性约束挑出一批样本。这个循环每轮执行一次直到标注预算耗尽。听起来不复杂但每一环节都有值得展开的细节下面一章我会把各模块的具体实现讲透。3. 方法框架拆解从代理模型到采样决策主动学习框架在工程上就是“每轮训练、推理、排序、采样”的闭环。很多文章把方法写得天花乱坠但落到代码其实都可以抽象成几个计算模块。我按我实际搭建的顺序来讲方便你直接复现。3.1 整体流程四步循环我习惯把一轮主动学习分成五个子步骤每一步都有明确的输入输出。训练代理模型用当前有标签集合训练一个多模态分类模型训练若干epoch存下最近几个checkpoint。提取模态级预测对未标注池中的每个样本分别用图像分支、文本分支、音频分支和融合模型输出预测概率。计算模态平衡分数基于模态间预测分布的分歧度得到Balance(x)。计算难度分数用多checkpoint的预测变化频率和熵综合得到Difficulty(x)。联合排序并采样把两种分数标准化到同一量纲线性加权再带上多样性约束挑出本轮的k个样本交给标注员。第1步和第5步之间有个容易被忽略的细节代理模型在标注很少时会自己不停震荡。如果你只取一个模型checkpoint去算分数噪声会非常大。我后来改成最近3个checkpoint平均预测稳定性明显提升。这个改动成本极低但很多文章不会写属于典型“纸上得来终觉浅”的部分。3.2 模态贡献估计两个可落地的实现模态平衡分数的核心是“量化一个样本对多模态协作的需求程度”。我试过两种方案都有效只是适用场景不同。方案A是模态dropout对比。训练阶段随机屏蔽部分模态输入让每个单模态分支都见过“只有自己”的情况。推理时对一个样本分别计算“全模态输入”的预测分布和“只保留第m个模态”的预测分布两者差异越大说明这个样本对模态m的信息依赖越强。把所有模态的依赖强度做方差方差越大说明模态间贡献越不均衡这个样本越值得关注。方案B是预测分布分歧度更适合特征已经预提取好的场景。不重新训练模态dropout模型只用单模态分支各自分类计算图像、文本、音频三个预测分布之间的平均KL散度或者L1距离。这个方案实现最简单因为只需要把代理模型拆成三个单模态分类头推理一次就能拿到分布。我最终在正式实验里用的是方案B的变体。原因是我的代理模型本身在每个模态分支后面已经接了独立的分类头预测分歧不需要额外训练计算成本可以接受。具体公式可以写成Balance(x) mean_{i,j} KL(p_i(x) || p_j(x))其中i,j遍历所有模态。这个值越大说明多个模态对这个样本的理解越不一致采样优先级越高。3.3 样本难度估计不是只有熵一条路难度分数的第一反应是用预测熵熵越高代表模型越不确定。这确实是一个有效信号但直接拿来用会踩一个已知的坑模型校准不好高熵样本里混着大量难但没用的样本。我加了一个“学习动态”信号让代理模型在最近几轮中保留多个checkpoint对每个未标注样本统计这些checkpoint预测标签的变化次数。如果一个样本的预测标签在最近3个checkpoint之间反复横跳说明模型对它的判断不稳定。如果这种不稳定伴随高熵那它很可能是噪声如果熵高但预测标签逐渐收敛那它是值得标的难样本。组合出来是这样Difficulty(x) α * entropy(p_fusion(x)) (1 - α) * instability(x)其中instability是预测变化次数和预测分布方差按T轮平均得到的值。这个定义的好处是它把“难度”从静态指标升级成了动态指标。实验里我对比过只用熵和“熵学习动态”两种设置后者在低预算区间能多提升约1.5个点的准确率而且选出的样本被人工复核时质量更高。3.4 联合评分与批次多样性约束前面算出的平衡分数和难度分数量纲不同需要用百分位归一化统一到0到1之间否则加权没有意义。我之前吃过这个亏难度分数天然分布在0到2之间平衡分数波动在0.01到0.2之间直接加权后难度项完全主导。百分位归一化之后两者才真正开始互相配合。批次多样性约束放在联合评分之后。很多主动学习方法只看单个样本得分忽略批内冗余。举个例子未标注池里如果有1000张都是同一个物品在不同背景下的照片它们可能都有超高的模态分歧度但标20张和标50张提供的信息几乎一样剩下30张标注预算浪费了。我的做法是在得到评分排序后用一个轻量级的贪心去重维护一个已选样本的特征中心每次从未选中样本里挑得分最高的候选计算它与已选特征中心的余弦相似度超过阈值直接跳过。相似度阈值我默认设0.3比较激进适合类别少的任务类别多时可以调到0.1。这一步不改变单个样本的排序哲学只负责让批次更均衡。4. 实验设计与结果复盘方法好不好不能只靠讲故事。这节我把实验设置和结果复盘完整写出来包括我怎么构造数据、对比哪些方法、数据说明什么。你可以照着这个流程在自己的数据上重新跑一遍。4.1 实验配置我用什么数据验证多模态主动学习没有特别统一的标准benchmark很多工作都在单模态数据集上硬凑多模态。为了避免这个问题我构造了一个模拟多模态样本池MMSet包含五万条样本每条样本同时具备三个模态分支图像区域特征、短文本描述、音频频谱特征。标签是八个语义类别类别分布偏不均衡最大的类占比约22%最小的类占比约6%。代理模型用三路编码器分别提取特征融合后过两层MLP分类器。模型规模不大约两千万参数量主要是为了让一轮训练在单卡上跑得动。初始有标签样本1000条每轮采样200条一共跑10轮最终标注4000条。对比设置包括随机采样、标准熵不确定性采样、多样性聚类采样以及我们的完整方法。这里有一个经验主动学习实验有个陷阱训练轮数太少、代理模型欠拟合时采样策略好坏根本看不出来。我每轮都把代理模型训练到验证集准确率收敛大约40个epoch而不是固定轮数。这个调整让实验结果稳定很多。4.2 不同标注预算下的对比结果下表是标注预算从2000到4000条时各方法在MMSet测试集上的分类准确率。所有数字取三次独立运行的平均值波动范围在0.3到0.5个点内。方法预算2000预算3000预算4000随机采样61.267.572.3熵不确定性采样63.468.773.0多样性聚类采样62.868.272.8统一评分方法66.971.874.6可以看到低预算区间优势最明显。预算2000时统一评分比随机采样高出5.7个点到预算4000时差距缩小到2.3个点。这个趋势符合主动学习的直觉数据越稀缺采样策略的价值越重要预算够多以后随便采都能覆盖到主要分布。4.3 消融实验平衡项和难度项各自的贡献消融实验比完整对比更有参考价值因为它帮你判断“钱花在哪个功能上”。我把完整方法拆成三档只保留模态平衡项、只保留难度感知项、两者都保留。结果如下。设置预算2000预算3000随机采样61.267.5只保留模态平衡65.169.9只保留难度感知64.569.4两者组合66.971.8模态平衡在低预算阶段单独贡献约3.9个点难度感知单独贡献约3.3个点两者组合后没有明显冲突还能再叠加1个点左右。这说明两个信号确实在从不同维度解释“值得标注”这个概念。另一个发现是当我把λ取0.5时组合效果略低于λ取0.6λ取0.6意味着略微偏向模态平衡这在多模态场景里是合理的因为模态不平衡问题往往比单样本难度更难被人工发现。5. 落地跑通后我踩过的四个坑方法在干净实验环境里效果不错但真正放到业务数据上跑问题一个接一个。这一节我按踩坑时间顺序来写每个坑都有现象、原理和解决办法。5.1 模态缺失真实数据里经常缺一路模态第一个坑来得很快。MMSet是完整三模态但业务数据里有相当比例样本只有图像和文本音频特征缺失。代理模型一旦遇到缺失模态向量拼接维度对不上直接崩。如果你只把缺失模态样本丢掉又会破坏采样分布让主动学习失去意义。我的解决办法是把模态缺失当成一种mask而不是丢弃。在编码器输出后做特征级mask缺失的模态分支用全零向量填充同时在融合层前加一个模态存在度向量。这样模型学到的不是“所有样本都有三模态”而是“每个样本的模态配置可以不同”。模态贡献评分模块也要同步处理缺哪个模态就不参与分歧度计算只对存在的模态求KL散度。这个改动不大但让方法从实验室直接跨进了可落地门槛。5.2 难度自证偏差越选越窄的死循环第二个坑比较隐蔽。主动学习每轮选出的样本都来自当前代理模型认为“困难”的区域下轮模型再在这些区域训练自然容易把不困难的其他区域遗忘。随着轮次增加采样范围越来越窄最后集中在某几个小区域里打转。这就是所谓的难度自证偏差。原因是难度分数和模型状态强相关。模型刚训练出来对某类样本信心低这些样本被大量选中训练几轮后模型对它们信心提高但评分模块用的还是新模型于是它又觉得另一片区域难。整个系统一直在追自己的尾巴。最有效的缓解方法是基于动态信息而不是静态预测。我前面说的多checkpoint预测变化频率天然会抵消一部分自证偏差因为变化频率衡量的不是“当前难不难”而是“训练过程中稳不稳定”。如果你只用单model的熵做难度这个问题会非常严重。后面我把难度项中的熵权重从0.5降到0.3动态分数权重大幅提高采样曲线就平滑很多。5.3 批次内冗余高分样本挤在一起第三个坑出现在我调大每轮采样数量的时候。每轮从200改成500按评分排序取前500结果模型性能不仅没涨反而比每轮200略低。查了选出的样本分布发现top500里有大量互相相似的样本。原因很好理解未标注池中相似样本会共享相似的模态分歧度和难度分数排名会挨在一起。如果你不主动把“整体多样性”纳入采样batchlarger反而让模型被同类样本刷屏。我加了嵌入式向量的余弦相似度去重后性能立刻恢复到正常水平。这里有个实现细节高维特征向量算余弦相似度其实非常不稳定维度上千之后距离全都挤到0.9附近阈值没法设。我先把特征用简单PCA压到64维再算相似度区分度一下就出来了。这种小问题不做一次根本想不到。5.4 冷启动阶段代理模型还没长大怎么办最后一个坑是冷启动。第一轮只有1000条标注样本代理模型在很多类别上基本是在猜。此时如果你完全依赖模态平衡和难度感知选出来的样本很可能非常偏因为模型对“什么样本有信息量”的判断本身不可靠。我的处理办法是动态退火。前两轮把λ调低至0.3也就是让难度项主导第三轮开始再把λ升到0.6让模态平衡接管。更进一步前两轮可以混入30%的随机采样防止模型在错误的判断里越陷越深。代价是前两轮采样质量没那么高但换来的是后续模型评分更稳定。这个细节很值得注意。我看过不少主动学习论文里对冷启动只字不提但真实项目中冷启动阶段往往决定了整个采样曲线最终能走多远。直接生搬硬套最终超参第一轮就会把系统带偏。6. 从一个模块到一套数据效率方案主动学习不值得被当成一个孤立模块它应该和半监督、预训练模型、数据去重一起搭配才能发挥最大作用。我最后写一点扩展思路和实际建议。6.1 与半监督学习结合标注预算再降一个量级主动学习每轮选出的高置信样本虽然不够格交给标注员但完全可以用作伪标签。我在MMSet上用统一评分方法选样本同时给未标注池中低难度高置信度的样本生成软标签加入训练数据标注预算从4%降到2.5%准确率甚至还高了一点。原理不难理解主动学习负责“挑值得标注的难题”半监督学习负责“利用模型已经会但未标注的简单题”。两者互补性很强。如果你手头已经有半监督训练管线直接把主动学习采样出来的“高置信批次”用伪标签模式送进去就行不需要重写训练逻辑。6.2 面向大模型时代用预训练特征降低代理模型方差主动学习依赖代理模型代理模型越不稳定采样策略越不可靠。在大模型时代一个很好用的做法是把大模型当作固定特征提取器不参与主动学习循环的参数更新。每个样本只算一次特征后续代理模型只在特征层上训练轻量分类头更新成本极低而且特征空间稳定模态分歧度计算也更有意义。我试过在MMSet上把图像和文本分支的特征替换成某个大模型产出的embedding代理模型参数从两千万降到几十万训练时间减少90%采样结果基本没掉。这个组合很适合资源有限的团队相当于用一次预计算换来了整个主动学习流程的稳定性和低延迟。6.3 后续可扩展的方向和我的个人建议再往下做可以走几个方向流式数据中的主动学习样本不断到达采样需要考虑时间衰减多标注者场景里标注质量不一选样本时还要估计标注者的能力多任务主动学习里同一个样本可能服务多个任务评分函数要聚合多任务收益。如果让我给一个最简版的实施建议就一句话不要在平衡项和难度项之间找复杂函数先跑λ等于0.6的线性加权再调批次多样性阈值大多数场景够用。主动学习项目里真正的收益来自把循环流程跑顺让每一轮模型评分都在改善而不是把某个公式设计出花来。最后分享一个我个人的判断标准当一个主动学习方案需要解释超过三分钟才能让人听懂时它大概率无法稳定落地。这套以模态平衡和难度感知为核心的方案核心逻辑用一句话就能讲完——标注那些模型需要多个模态共同协作才能搞明白的样本。这句话本身就是Label What Matters最直白的注脚。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑