Select-Additive Learning:小数据多模态情感分析里的“身份捷径”怎么拆掉 Select-Additive Learning小数据多模态情感分析里的“身份捷径”怎么拆掉很多多模态情感分析模型的问题并不是模型不够深而是数据太小。视频评论数据集通常只有几百到几千条标注样本训练集里某些人的身份特征很容易和情绪标签绑在一起。模型看起来学会了情感其实可能只是学会了“这个人通常给差评”。Haohan Wang、Aaksha Meghawat、Louis-Philippe Morency 和 Eric P. Xing 在 2016 年提出的 Select-Additive LearningSAL正是为这个问题设计的。论文题目是Select-Additive Learning: Improving Generalization in Multimodal Sentiment AnalysisarXiv 版本更新于 2017 年。它的思路很直接先找出隐表示里和说话人身份相关的维度再对这些维度加噪声让分类器别太依赖它们。用户原词里写的是 Select-Addictive Learning但论文和代码库的正式名称是 Select-Additive Learning。这个 “Additive” 指的是 addition phase 里的加性高斯噪声不是让学习变得 addictive。这篇文章讲什么SAL 解决的不是普通过拟合而是跨人、跨数据集泛化时的身份混淆。它把一个已经训练好的判别式神经网络拆成表示学习器g(⋅;θ)g(\cdot;\theta)g(⋅;θ)和分类器f(⋅;ϕ)f(\cdot;\phi)f(⋅;ϕ)。Selection phase 用说话人 one-hot 身份ZZZ去预测隐表示g(X;θ)g(X;\theta)g(X;θ)中可由身份解释的部分。Addition phase 对这些身份相关维度加高斯噪声让分类器重新调整权重。论文在 MOSI、YouTube、MOUD 三个多模态情感数据集上做了 person-independent 和 cross-dataset 测试。问题不在“看到了脸”而在“把人当成标签”多模态情感分析通常同时使用三类信息文本内容、语音声学特征、面部表情和动作。直觉上这些信息都有用。一个人说 “I love this movie”声音更兴奋、表情更积极模型确实应该利用这些线索。麻烦出在数据规模和采样方式。假设训练集里戴眼镜的几个说话人大多给负面评价模型可能把“戴眼镜”当成负面情绪的证据。这个规则在训练集上有效换一个数据集就崩了。论文 Fig. 1 用的就是这个例子。论文在 MOSI 数据集上还做了一个检验假设情感标签和个体身份独立卡方检验得到的 p-value 是1.202×10−191.202 \times 10^{-19}1.202×10−19。这个数非常小说明身份和情感标签之间存在强依赖。换句话说模型有机会偷懒而且数据本身给了它偷懒的入口。这类问题在今天看也很熟悉。小样本视频理解、医疗影像、多模态人格识别、具身交互数据都会遇到类似现象某个主体、采集设备、场景背景、医生习惯、机器人轨迹风格与标签在训练集里意外相关。模型抓住捷径之后指标会好看一阵但泛化很脆。SAL 的基本设定论文把输入特征记为X∈Rn×pX \in \mathbb{R}^{n \times p}X∈Rn×p其中nnn是 utterance 数量ppp是特征维度。情感标签是y∈Rn×1y \in \mathbb{R}^{n \times 1}y∈Rn×1。说话人身份用 one-hot 矩阵Z∈Rn×mZ \in \mathbb{R}^{n \times m}Z∈Rn×m表示mmm是训练集中不同个体的数量。原始神经网络可以写成两段f(g(X;θ);ϕ) f(g(X;\theta);\phi)f(g(X;θ);ϕ)这里g(⋅;θ)g(\cdot;\theta)g(⋅;θ)是表示学习器比如 CNN 前半部分f(⋅;ϕ)f(\cdot;\phi)f(⋅;ϕ)是分类或回归头。SAL 的假设是身份相关的混淆因素不会均匀散落在整个表示空间而会集中在g(X;θ)g(X;\theta)g(X;θ)的一部分维度里。这个假设不一定永远成立但在工程上很有吸引力。它不要求你重建一个因果图也不要求你显式标注“眼镜”“发型”“口音”等因素。你只需要知道每条样本属于哪个说话人然后让一个辅助网络去寻找“哪些隐表示维度能被身份解释”。第一阶段Selection找出身份相关维度SAL 引入一个辅助网络h(⋅;δ)h(\cdot;\delta)h(⋅;δ)输入是身份矩阵ZZZ输出试图逼近原模型学到的表示g(X;θ)g(X;\theta)g(X;θ)。Selection phase 优化的是arg⁡min⁡δ12(g(X;θ)−h(Z;δ))2λ∥δ∥1 \arg\min_{\delta} \frac{1}{2}\left(g(X;\theta)-h(Z;\delta)\right)^2 \lambda\lVert\delta\rVert_1argδmin​21​(g(X;θ)−h(Z;δ))2λ∥δ∥1​这一步里原始模型的θ\thetaθ不更新只训练δ\deltaδ。因为ZZZ只包含身份信息h(Z;δ)h(Z;\delta)h(Z;δ)能预测出来的表示维度按论文解释就是身份相关的 confounding dimensions。L1L_1L1​正则很关键。没有稀疏约束辅助网络可能用过多参数去拟合表示空间结果“什么都像身份相关”。加上λ∥δ∥1\lambda\lVert\delta\rVert_1λ∥δ∥1​后模型更倾向于选择少量维度。这也是 Select-Additive 里 “Select” 的来源。可以把这一步理解成一个表示空间探针我们不直接问某个维度是不是眼镜、性别、口音而是问“这个维度能不能仅凭说话人 ID 被预测出来”。如果可以它至少有身份泄漏风险。第二阶段Addition对身份维度加噪声Selection 找到可疑维度之后SAL 不直接删掉它们而是通过高斯采样层给这些维度加噪声。论文里的 addition phase 写成arg⁡min⁡ϕ12(y−f(g(X;θ)h(Z;δ)∘ϵ;ϕ))2 \arg\min_{\phi} \frac{1}{2}\left(y - f(g(X;\theta) h(Z;\delta) \circ \epsilon;\phi)\right)^2argϕmin​21​(y−f(g(X;θ)h(Z;δ)∘ϵ;ϕ))2其中ϵ∼N(0,σI)\epsilon \sim N(0,\sigma I)ϵ∼N(0,σI)∘\circ∘表示逐元素乘法。直观地说h(Z;δ)h(Z;\delta)h(Z;δ)指向身份相关的表示位置ϵ\epsilonϵ把这些位置污染掉。分类器fff在重新训练时会发现这些维度不稳定于是把权重转向剩余、更可能和情感相关的维度。这一步有点像有目标的 representation dropout但它不是随机丢维度。普通 dropout 不知道哪些维度携带身份捷径SAL 先用身份监督定位再只针对这些维度施加扰动。这个差别是方法的核心。还有一个细节值得注意论文把 SAL 放在预训练好的模型之后。也就是说先训练一个普通 CNN再在这个模型的表示上做 select 和 add。这让 SAL 更像一个 post-hoc 泛化修正器而不是一套必须从零训练的新架构。和 adversarial de-biasing 有什么不同今天读 SAL很自然会想到 adversarial learning训练一个主任务分类器同时训练一个身份分类器主模型通过 gradient reversal 让表示无法预测身份。SAL 的路线更早也更“手术式”。adversarial de-biasing 通常要求表示整体对身份不可辨认。SAL 则接受一个现实表示里可能仍然保留一部分身份结构但分类器不应该把它当成情感判断的主要依据。论文的分析也体现了这一点。经过 SAL 后按情感类别聚类的 inter-cluster / intra-cluster 距离比在 verbal、acoustic、visual 上分别提高了 44%、15%、72%按身份聚类的比例只提高了 9%、3%、13%。作者的解释是SAL 更明显地增强了情感类别结构而没有完全抹掉身份结构。这点在多模态任务里很现实。身份信息并不总是垃圾特征。声音、脸型、表达风格都可能影响情感表达方式。粗暴删除身份可能伤害任务。SAL 的选择是降低分类器对身份维度的依赖而不是宣称表示里不该有身份。实验设置训练在 MOSI测试看跨人和跨数据集论文使用三个数据集数据集内容规模MOSIYouTube 电影评论视频每个视频对应一个个体93 个视频2199 条 utteranceYouTubeopinion videos47 个视频280 条 utteranceMOUD西班牙语 opinion utterances55 个个体498 条 utterance实验去掉 neutral utterances。MOSI 前 62 个个体作为训练和验证集大约 1250 条 utterance其中 80% 训练、20% 验证。测试集包括三个部分MOSI 剩余 31 个个体的 546 条 utterance、YouTube 的 195 条 utterance、MOUD 的 450 条 utterance。整个设置是 person-independent测试集个体不出现在训练和验证里。特征方面文本用 Google News 预训练 word2vec句子最长 60 个词超过部分丢弃。声学特征用 openSMILE 提取低层描述符包括 MFCC、pitch 和 voice quality。视觉特征用 CLM-Z 提取 facial characteristic points。MOUD 的西班牙语文本先翻译成英文。结果提升主要来自泛化而不是训练集拟合论文比较的是 CNN 和 SAL-CNN。下面把核心准确率整理成两张表。MOSI 内部跨人测试模态CNNSAL-CNNVerbal0.6780.732Acoustic0.5880.618Visual0.5720.636Verbal Acoustic0.6870.725Verbal Visual0.7060.730Acoustic Visual0.6610.621All Modalities0.7150.730跨数据集测试测试集模态CNNSAL-CNNYouTubeVerbal0.6050.657YouTubeAcoustic0.4410.564YouTubeVisual0.4920.549YouTubeVerbal Acoustic0.6420.652YouTubeVerbal Visual0.6420.667YouTubeAcoustic Visual0.4520.559YouTubeAll0.6110.667MOUDVerbal0.5220.569MOUDAcoustic0.4550.549MOUDVisual0.5550.548MOUDVerbal Acoustic0.5150.574MOUDVerbal Visual0.5420.574MOUDAcoustic Visual0.5330.554MOUDAll0.5310.574提升不是每一格都成立。MOSI 的 Acoustic Visual 从 0.661 降到 0.621MOUD 的 Visual 从 0.555 降到 0.548。论文也明确说例外主要在这两处。不过整体趋势很清楚尤其在 YouTube 和 MOUD 的跨数据集测试里SAL-CNN 多数模态都比 CNN 稳。作者用 permutation test 检验改进是否显著MOSI、YouTube、MOUD 上的 p-value 分别是 0.037、0.0003、0.0023。这个结果说明 SAL 的收益主要体现在泛化场景而不是换一种训练技巧把已有测试切分刷高。SAL 为什么有效它惩罚的是“稳定但错误”的线索很多正则化方法惩罚复杂模型比如L2L_2L2​、dropout、数据增强。SAL 惩罚的是另一类东西在训练集里稳定但跨人或跨数据集不该稳定的线索。身份就是这种线索。对训练集而言“某个说话人经常表达负面评价”可能是真的对新说话人而言它没有预测价值。普通 ERM 会把它当成便宜特征。SAL 通过ZZZ把这类便宜特征标出来再用噪声降低它的可用性。这也是 SAL 对小数据多模态任务仍然有启发的原因。小数据下模型不一定需要更大反而需要知道哪些相关性不该信。尤其是 video review、dyadic interaction、robot-human interaction 这类数据主体身份和场景差异很容易成为隐藏捷径。复现时要注意的坑官方代码库在 GitHub 上开源仓库名是HaohanWang/SelectAdditiveLearning。README 写得很短但给了几个关键信息# 先运行预训练模型python pretrainModel/model.py# 再运行主方法python model/run.pyREADME 里还说明代码使用 Theano 0.8.2。预训练参数会写入params/pretrain/videoModelParams.npy然后被model/run.py读取。今天复现这篇论文最大的问题可能不是算法而是环境年代感。Theano 0.8.2、IBM Bluemix speech-to-text、CLM-Z、旧版 openSMILE、数据下载链接都可能需要手动修。更现实的做法是把 SAL 思想迁移到 PyTorch保留ggg、fff、hhh三段结构把 selection loss 和 addition noise 写成现代训练循环。一个 PyTorch 版本大概会长这样# 已经训练好的 encoder g 和 classifier fwithtorch.no_grad():repg(x)# selection: 用 speaker_id 预测 rep并加 L1pred_identity_reph(speaker_onehot)selection_loss((rep-pred_identity_rep)**2).mean()l1_losssum(p.abs().sum()forpinh.parameters())loss_hselection_losslam*l1_loss# addition: 对身份相关部分加噪声再训练分类头noisetorch.randn_like(pred_identity_rep)*sigma rep_noisedreppred_identity_rep*noise pred_yf(rep_noised)loss_ftask_loss(pred_y,y)真正要调的是三个地方λ\lambdaλ控制选择稀疏性σ\sigmaσ控制噪声强度哪些参数在 addition phase 更新。论文里 addition phase 主要调ϕ\phiϕ也就是分类头。现代实现如果同时微调 encoder可能会得到不同性质的结果需要单独做 ablation。这篇老论文今天还能借鉴什么SAL 最有价值的部分不是某个网络结构而是问题表述多模态小数据泛化失败往往是因为模型抓住了 identity-linked confounders。这个表述在 2026 年的很多任务里仍然没过时。比如做 egocentric embodied agents 时模型可能把某个家庭环境、某个拍摄设备、某个人的动作风格当成任务线索。做人脸驱动或手势生成时模型可能记住 identity-specific motion rhythm而不是学到可迁移的互动规律。做医疗多模态时医院、医生、扫描仪型号都可能变成捷径。SAL 给出的处理方式很朴素如果你知道某个因素不应该成为主任务的捷径就把它作为ZZZ输入给辅助网络让模型自己找出表示空间中受它影响的维度然后干扰这些维度。它不是完整的因果学习方案但足够工程化适合被改造成一个 regularization module。局限也很明显第一SAL 依赖已知的混淆变量。在这篇论文里是 speaker identity。如果你不知道捷径来自哪里或者ZZZ本身不可得SAL 就没法直接用。第二它假设身份相关信息能被h(Z;δ)h(Z;\delta)h(Z;δ)从表示里选出来而且集中在可扰动的维度上。现代大模型表示更分布式这个假设可能变弱。你可能需要用子空间投影、低秩 adapter、gradient-based attribution 或 probe ensemble 来替代简单的hhh。第三论文的实验规模不大。MOSI、YouTube、MOUD 在当时很有代表性但现在看都属于小数据。准确率表说明 SAL 有效但还不足以证明它在大规模多模态预训练模型上仍然按同样机制工作。第四SAL 降低身份捷径不等于自动公平。身份相关信息有时和表达方式真实相关。什么时候该去掉什么时候该保留需要任务定义和评估协议来决定。一个更现代的理解如果用今天的语言概括SAL 是一种 supervised nuisance-aware representation regularization。它知道一个 nuisance variable也就是 speaker identity它用辅助网络定位 nuisance information它通过选择性噪声让主任务头减少对 nuisance dimensions 的依赖。这比普通 dropout 更有方向比完全 adversarial 的去身份化更温和。它承认表示空间里可以存在身份信息但要求主分类器不要把身份当作情感标签的捷径。这篇论文不算新但它问的问题很干净当多模态数据太小模型到底学到了情感还是学到了训练集里的那几个人只要这个问题还存在SAL 的思路就值得翻出来看一遍。参考资料Haohan Wang, Aaksha Meghawat, Louis-Philippe Morency, Eric P. Xing.Select-Additive Learning: Improving Generalization in Multimodal Sentiment Analysis. arXiv:1609.05244, retrieved 2026-06-30. https://arxiv.org/abs/1609.05244Official implementation:HaohanWang/SelectAdditiveLearning, retrieved 2026-06-30. https://github.com/HaohanWang/SelectAdditiveLearningPaper PDF used for tables and formulas, retrieved 2026-06-30. https://arxiv.org/pdf/1609.05244