模型融合与后处理
一、模型集成的常见范式
1.1 基础融合方法
| 方法 |
说明 |
适用场景 |
| 算术平均 |
将多个模型在测试集上的概率预测值取算术平均 |
最简单且广泛使用 |
| 加权平均 |
根据模型性能差异赋予不同权重,权重需手动调优 |
模型性能差异大时 |
| 投票机制 |
多个模型对每个样本的标签进行投票,票数相同则比较概率值总和 |
多分类场景 |
| 排序平均 |
对每个模型输出的标签排名取平均排位 |
概率平均无法纠正个别分类器严重错误的场景 |
1.2 Stacking
| 维度 |
说明 |
| 原理 |
将Base分类器的概率输出作为Meta分类器的输入特征 |
| Meta分类器 |
通常选择简单模型如Logistic Regression |
| 防过拟合 |
必须用OO F(Out-of-Fold)预测作为Meta特征,避免数据泄露 |
| Blending |
Stacking的简化版:用留出法而非K折生成Meta特征,实现更简单但数据利用率低 |
1.3 概率校准
| 维度 |
说明 |
| 问题背景 |
模型输出的概率值不一定反映真实概率,融合前需校准 |
| Platt Scaling |
用逻辑回归对模型输出做校准,适合小数据集 |
| Isotonic Regression |
用保序回归做校准,适合大数据集,非参数方法(详见第十五节) |
| 校准时机 |
融合前对每个模型独立校准,确保概率尺度一致 |
二、模型多样性保障
| 维度 |
说明 |
| 模型多样性 |
融合需要模型具有多样性,不能是同一模型同一参数 |
| 多样性来源 |
不同预训练模型(BERT/RoBERTa/DeBERTa)、不同学习率、不同随机种子、不同Fold |
| 融合收益 |
模型差异越大,融合收益越高 |
| Top方案经验 |
想要取得top成绩,必须使用多个不同模型进行融合 |
| 架构差异 > 超参差异 |
不同架构(EfficientNet+ViT)比同架构不同种子收益大 |
三、跨模型的字符级融合(Char-level Ensemble)
| 维度 |
说明 |
| 问题背景 |
不同架构的预训练大模型(如RoBERTa与DeBERTa)使用了不同的分词器,导致切分出的Token无法对齐对等融合 |
| 核心方法 |
必须利用各自附带的Offset Mapping(偏移映射) |
| 实现细节 |
将Token级别的概率精准投射回原文基于字符(Char)级别的位置上 |
| 融合方式 |
统一打分标尺后再赋予不同权重进行加权平均 |
四、Multi-Exit架构(多出口架构)
| 维度 |
说明 |
| 核心思想 |
在模型每一层都放置分类器,进行联合训练,而非仅在最后一层放置分类器 |
| 应用一(推理加速) |
浅层分类器即可对简单样本做出正确预测,提前退出推理,提升推理速度 |
| 应用二(泛化提升) |
多层分类器联合训练能有效提升模型整体泛化能力,作为上分方法使用 |
| 训练方式 |
各层分类器共享底层表征,通过联合损失函数进行端到端训练 |
五、Self-Distillation(自蒸馏)
| 维度 |
说明 |
| 核心思想 |
用同一模型的早期层输出作为教师信号指导深层训练 |
| 实现方式 |
在模型不同深度位置设置分类器,浅层输出作为软标签(Soft Labels)指导深层学习 |
| 低耗优势 |
相比传统多模型集成,自蒸馏只需训练单个模型,大幅降低计算资源消耗 |
| 适用场景 |
Code Submission赛等对推理时间和内存有严格限制的比赛 |
| 与Multi-Exit区别 |
Multi-Exit侧重联合训练多分类器,Self-Distillation侧重知识迁移和模型压缩 |
六、精细化规则后处理
6.1 通用后处理思路
| 维度 |
说明 |
| 核心方法 |
通过分析验证集上预测错误的错题本(Bad Case)制定人工干预规则 |
| 发现方式 |
通过对Bad Case的分析得出结论 |
| 实现难度 |
相对较低,主要是规则方法的添加 |
6.2 NER后处理:预测区间边界纠偏
去除硬编码偏移
| 维度 |
说明 |
| 问题背景 |
基线代码在最终输出字符区间时,会习惯性地给结果直接+1 |
| 导致后果 |
预测的起始和结束位置整体向右偏移一个字符 |
| 解决方案 |
去除这个不合理的加1操作 |
动态剥离首尾空格
| 维度 |
说明 |
| 实现方式 |
在提取预测出的区间时,增加一层循环判断 |
| 头部处理 |
如果区间开头恰好是一个空格字符,就把起始位置往右移(加1) |
| 尾部处理 |
如果区间结尾恰好是个空格,就把结束位置往左移(减1) |
| 最终效果 |
精确剔除多余的空格,直接提升准确率得分 |
七、混合词表初始化兜底策略
| 维度 |
说明 |
| 问题背景 |
使用"词频映射"手段将赛题的脱敏ID强制还原为明文时,必然会遇到部分ID映射失败的情况 |
| 原装参数与定制参数拼接 |
对于映射成功的标点符号和高频词,直接使用开源BERT强大的初始Token Embedding权重。对于映射失败的脱敏ID,不要任其随机初始化,而是把前期在无标签脱敏语料上用Gensim训练好的Word2Vec向量提取出来,进行定点替换填入 |
| 核心优势 |
这种拼图式初始化能在起步阶段最大化保留语料的共现信息 |
八、CV任务融合策略
8.1 分类任务融合
| 方法 |
说明 |
适用场景 |
| 概率平均 |
多模型预测概率取算术平均 |
通用首选 |
| 加权平均 |
按验证集表现分配权重 |
模型性能差异大时 |
| 投票法 |
多数表决选类别 |
模型数量为奇数时 |
| Stacking |
基模型概率作为元特征 |
后期冲刺 |
8.2 检测任务融合
| 方法 |
说明 |
适用场景 |
| WBF融合 |
加权融合多模型预测框 |
检测融合首选 |
| NMS融合 |
先合并所有框再NMS |
简单场景 |
| Soft-NMS融合 |
先合并再Soft-NMS |
密集目标 |
| 分层融合 |
不同尺度用不同模型,按尺度融合 |
多尺度场景 |
8.3 检测融合实战流程
1. 各模型独立预测 → 得到各自的框集合
2. 合并所有模型的框集合
3. 用WBF/NMS进行框融合
4. OOF选择最优置信度阈值
5. 过滤低置信度框
6. 输出最终结果
8.4 分割任务融合
| 方法 |
说明 |
适用场景 |
| 概率平均 |
多模型像素级概率取平均 |
通用首选 |
| 加权平均 |
按验证集IoU分配权重 |
模型差异大时 |
| Stacking |
像素级概率作为元特征 |
后期冲刺 |
九、NLP任务融合策略
| 方法 |
说明 |
效果 |
| 概率平均 |
多模型输出概率取平均再取argmax |
最简单有效 |
| 加权概率融合 |
按验证集表现分配权重 |
比简单平均更优 |
| 投票融合 |
多模型预测结果投票 |
模型差异大时效果好 |
| 特殊概率融合 |
用超参控制融合权重,非简单平均 |
上分点大,需调参 |
| Stacking |
基模型概率作为特征,元模型学习组合 |
最强但易过拟合 |
NLP融合多样性保证
| 维度 |
方法 |
| 模型多样性 |
BERT/RoBERTa/DeBERTa/MacBERT不同架构 |
| 数据多样性 |
不同折训练、不同数据增强方式 |
| 超参多样性 |
不同lr、epoch、seed |
| 输入多样性 |
不同截断策略、不同预处理 |
十、知识蒸馏(Knowledge Distillation)
| 维度 |
说明 |
| 核心思想 |
用大模型(Teacher)的软标签(Soft Label)指导小模型(Student)训练 |
| 软标签 |
Teacher输出的概率分布(经温度T的Softmax),包含类别间相似度信息 |
| 温度参数T |
T越大概率分布越平滑,通常T=2~5,传递更多暗知识 |
| 损失函数 |
L = alpha * L_hard(学生与真实标签) + (1-alpha) * L_soft(学生与教师软标签) |
| alpha取值 |
通常0.5~0.7,软标签权重不宜过低 |
| 竞赛应用 |
Code Submission赛中对大模型蒸馏到小模型,保持精度同时降低推理时间和内存 |
| 与Self-Distillation区别 |
Self-Distillation是自身不同层之间蒸馏,Knowledge Distillation是不同模型之间蒸馏 |
蒸馏实战流程
1. 训练Teacher模型(大模型,如DeBERTa XLarge)
2. 用Teacher对训练集推理,保存Soft Label(温度T=3)
3. Student模型训练时同时学习Hard Label和Soft Label
4. 调整alpha权重,平衡两种损失
5. 最终提交Student模型(小模型,如DeBERTa Base)
十一、Snapshot Ensemble(快照集成)
| 维度 |
说明 |
| 核心思想 |
单次训练中利用余弦退火调度器的周期性重启,保存每个周期末的模型快照 |
| 实现方式 |
使用CosineAnnealingWarmRestarts调度器,T_0=5~10个epoch |
| 快照数量 |
通常保存5~7个快照,相当于免费获得5~7个不同模型 |
| 融合方式 |
多个快照的预测概率取平均 |
| 优势 |
无需训练多个模型,单次训练即可获得集成效果 |
| 与多折融合区别 |
多折需要K次训练,Snapshot只需1次训练 |
| 适用场景 |
训练资源有限时,或作为融合多样性的补充来源 |
十二、特征级融合 vs 预测级融合
| 维度 |
预测级融合 |
特征级融合 |
| 融合对象 |
各模型的预测概率/标签 |
各模型的中间特征表示 |
| 实现方式 |
概率平均/投票/Stacking |
将不同模型的隐藏层向量拼接后接分类器 |
| 信息保留 |
仅保留最终预测信息 |
保留更丰富的中间表征信息 |
| 复杂度 |
低 |
高 |
| 过拟合风险 |
低 |
较高 |
| 竞赛推荐 |
通用首选 |
后期冲刺,追求极致性能时 |
特征级融合实现
1. 各模型提取倒数第二层隐藏向量
2. 将多个模型的向量拼接(concat)或相加(add)
3. 拼接后的向量接全连接层做最终分类
4. 可端到端联合训练,也可冻结各模型只训练融合层
十三、融合权重搜索方法
| 方法 |
说明 |
适用场景 |
| 等权重 |
所有模型权重相同 |
快速baseline |
| 验证集F1加权 |
权重正比于验证集F1 |
简单有效 |
| 网格搜索 |
离散化权重空间穷举 |
模型数少(2~3个)时 |
| 贝叶斯优化 |
用Optuna搜索最优权重组合 |
模型数多时 |
| Nelder-Mead |
无梯度优化方法搜索权重 |
连续权重空间 |
| Stacking自动学习 |
元模型自动学习最优组合 |
最强但易过拟合 |
权重搜索注意事项
| 维度 |
说明 |
| 权重归一化 |
所有权重之和应为1 |
| 搜索空间 |
2个模型只需搜1个权重,3个模型搜2个,维度不宜过高 |
| 验证集选择 |
用OOF预测搜索权重,避免用测试集搜索导致过拟合 |
| 单模型下限 |
融合结果不应低于最强单模型,若低于则权重分配有问题 |
十四、知识蒸馏进阶
14.1 Logits 蒸馏
| 维度 |
说明 |
| 核心思想 |
直接用 Teacher 模型的原始 logits 作为蒸馏目标,而非软化概率 |
| 优势 |
保留更多原始信息,避免温度缩放导致的信息损失 |
| 损失函数 |
MSE(Student_logits, Teacher_logits) + BCE(Student_pred, hard_label) |
| 蒸馏权重 |
distill_weight: 0.1(辅助损失,不宜过高) |
| 适用场景 |
预训练模型蒸馏到轻量级时序模型 |
14.2 门控蒸馏(Gated Distillation)
| 维度 |
说明 |
| 核心思想 |
通过门控机制动态控制蒸馏强度,而非固定权重 |
| 实现方式 |
学习门控权重,根据输入样本自适应调整蒸馏损失权重 |
| 优势 |
对简单样本减少蒸馏依赖,对困难样本加强蒸馏指导 |
| 适用场景 |
多任务训练、ProtoSSM 分类头 |
14.3 多任务蒸馏
| 维度 |
说明 |
| 核心思想 |
同时蒸馏多个目标(物种分类 + 分类层级 + 原型对比) |
| 损失组合 |
物种 BCE 损失 + 原型对比损失 + logits 蒸馏 + 分类学辅助损失 |
| 优势 |
多信号联合指导,提升学生模型泛化能力 |
| 适用场景 |
复杂分类任务、具有层级标签体系的任务 |
十五、Isotonic Regression 概率校准
| 维度 |
说明 |
| 核心思想 |
用保序回归(单调非递减函数)校准模型输出概率 |
| 与Platt Scaling区别 |
Platt Scaling 假设 sigmoid 关系;Isotonic Regression 非参数,更灵活 |
| 实现方式 |
sklearn.isotonic.IsotonicRegression,fit(OOF_pred, true_label) |
| 优势 |
适合大数据集,不假设特定函数形式 |
| 适用场景 |
模型融合前概率校准、分数恢复策略 |
十六、Gaussian 平滑
| 维度 |
说明 |
| 核心思想 |
用高斯核对时序预测结果进行卷积平滑 |
| 实现方式 |
scipy.ndimage.gaussian_filter1d(predictions, sigma) |
| 参数设置 |
sigma 控制平滑强度,通常 0.5~2.0 |
| 优势 |
减少时序预测抖动,比简单移动平均更平滑 |
| 适用场景 |
时序序列后处理、多窗口预测平滑 |
十七、盲混合策略(Blind Ensemble)
| 维度 |
说明 |
| 核心思想 |
不依赖测试集分布信息,仅用验证集性能确定混合权重 |
| 与测试集混合区别 |
测试集混合可能过拟合测试分布;盲混合避免信息泄露 |
| 实现方式 |
简单加权平均,权重基于验证集 CV 分数 |
| 优势 |
避免过拟合测试集,泛化能力更强 |
| 适用场景 |
多 notebook 混合、公开方案集成 |
十八、逐类权重优化
| 维度 |
说明 |
| 核心思想 |
为每个类别独立优化混合权重,而非全局统一权重 |
| 实现方式 |
网格搜索或优化算法逐类搜索最优权重 |
| 优势 |
避免固定权重导致的分数下降,针对类别特性优化 |
| 适用场景 |
多模型集成、类别表现差异大的场景 |
| 竞赛价值 |
比全局权重优化提升明显,尤其长尾类别 |