超参数调优与工程实践

超参数调优与工程实践


一、超参数推荐范围

1.1 BERT Base/Large 模型

维度 说明
学习率(Learning Rate) 推荐范围为1e-5到3e-5,过大容易导致过拟合
Batch Size(BS) 越大越好,受显存限制
Weight Decay(权重衰减) 通常设为0,过拟合严重时可尝试
Warmup Ratio 推荐0.1到0.2,对模型收敛至关重要
Epoch 通常设为10轮;预训练微调3 epoch通常足够

1.2 DeBERTa V3 XLarge 模型

维度 说明
学习率(Learning Rate) 推荐范围为5e-6到9e-6,模型较大不适合设置太大
Batch Size(BS) 通常设为2(受显存限制)
Weight Decay(权重衰减) 通常设为0
Warmup Ratio 推荐0.2
Epoch 通常设为10轮

1.3 调优要点

维度 说明
学习率重要性 学习率是最关键的超参数,需要通过不断实验试出来
过拟合风险 学习率过大会对模型造成过拟合现象
Warmup必要性 Warmup是重要参数,不设会导致模型训飞
CV验证 每次跑一个模型时将验证集结果存下来,5折交叉验证的5份验证集结果平均就是最终CV

二、调参方法体系

2.1 调参在竞赛中的定位

维度 说明
调参时机 调参应放在最后阶段,不是首要步骤
优先级 赛题理解 > 数据分析 > 特征工程 > 模型选择 > 模型集成 > 调参
收益递减 随着比赛推进,每次尝试的精度收益逐渐减小,调参的收益通常最小
验证集依赖 调参必须依赖验证集,验证集打分是调参的基础

2.2 人工调参

维度 说明
方法 人工给定几组超参数组合,分别训练后选择验证集精度最优的
优点 靠谱、资源消耗少、基于领域知识有针对性
适用场景 超参数数量少、搜索空间小、对模型有较深理解时
维度 说明
方法 对每个超参数给定离散取值,穷举所有组合进行搜索
搜索空间 若4个超参数各有3个取值,则需搜索3^4=81种组合
优点 搜索均匀,不会遗漏任何组合
缺点 计算量大,81组x5折=405次训练
实现 sklearn的GridSearchCV可直接使用
维度 说明
方法 对每个超参数给定取值范围,从中随机采样组合
优点 可在更大范围内搜索,不受离散取值限制
缺点 可能遗漏最优组合,随机性导致结果不稳定
实现 sklearn的RandomizedSearchCV可直接使用

2.5 贝叶斯优化(Bayesian Optimization)

维度 说明
核心思想 在已知若干超参数-精度对应关系的基础上,建模预测下一个更优点可能的位置
建模过程 用已有数据点构建代理模型(如高斯过程),预估超参数空间与精度的关系曲线
初始化 通常先随机初始化5个点作为已知点,然后迭代优化
优点 搜索空间比网格/随机搜索小,减少无效搜索
实现 bayesian-optimization库、Optuna等

2.6 AutoML工具

工具 特点 适用场景
Optuna 通用超参数优化框架,支持多种搜索算法 轻量级搜索
Keras Tuner 深度学习模型的超参数搜索 深度学习
AutoGluon 自动化机器学习,自动选择模型和调参 快速出结果
NNI (Microsoft) 支持多种搜索算法,可视化 通用超参搜索
Ray Tune 分布式搜索 大规模搜索

三、混合池化策略

3.1 池化方法对比

方法 说明 优势
[CLS] Pooling 取[CLS]向量作为句子表征 BERT默认,简单
Max Pooling 取序列维度上的最大值 捕捉最显著特征
Average Pooling 取序列维度上的平均值 平滑全局信息
Self-Attention Pooling 用注意力机制加权求和 自适应关注重要token
Dynamic Routing 胶囊网络动态路由 保留空间特征

3.2 胶囊网络动态路由

维度 说明
问题背景 传统池化容易丢失序列的空间特征
实现方式 通过胶囊网络的动态路由机制,将变长的句子特征提取为固定数量的胶囊向量
迭代次数 经验最佳值为3次,过多反而引发性能衰退
输出胶囊数量 经验最佳值为4个

3.3 多路池化拼接

维度 说明
实现方式 在全连接层之前,同时声明BERT-Pooler、Max Pooling、Average Pooling、Self-Attention Pooling以及Dynamic Routing等多种池化操作
融合策略 将这些结果进行汇总和加总(或拼接)后再送入分类器
核心优势 多维度提取特征能让分类结果更加稳定全面

3.4 弃用Flatten()改用降维Pooling

维度 说明
问题背景 官方Baseline在提取序列特征后直接使用Flatten()操作(如128x768展平),导致全连接分类器参数量暴增至数百万级别
导致后果 庞大的分类器极易在小数据或不平衡数据上严重过拟合
解决方案 通过各类Pooling将变长的序列维度压缩为1维(如只保留768维),使分类器参数骤降至几万级别
最终效果 模型更容易被有效训练

四、模型选型天花板

维度 说明
推荐模型 直接选用在结构上更具优势的DeBERTa V2/V3模型替代原生BERT
核心优势1 具有"注意力解耦(Disentangled Attention)"特性
核心优势2 延迟添加绝对位置编码的特性
适用场景 在医学文本语境和上下文关系捕捉上具备更优的先天表现

五、RobustScaler处理异常值

维度 说明
问题背景 传统StandardScaler对异常值敏感,均值和标准差会被极端值拉偏
实现方式 RobustScaler使用中位数和四分位距(IQR)进行缩放,对异常值不敏感
核心优势 保留异常值信息的同时,使主体数据分布更规范
应用位置 在Lasso、ElasticNet等线性模型前使用,如make_pipeline(RobustScaler(), Lasso(...))

六、K折交叉验证评估

维度 说明
实现方式 使用KFold(n_splits=5, shuffle=True, random_state=固定值)进行5折交叉验证
评估指标 回归任务使用RMSE,通过np.sqrt(mean_squared_error(y_true, y_pred))计算
核心优势 充分利用有限训练数据,避免单次划分的偶然性,提供更稳健的性能估计
随机种子 固定random_state确保每次实验可复现

七、多模型基准对比策略

维度 说明
核心思想 在正式调优前,用多种不同复杂度的模型做基准对比,了解各方法的天花板
推荐顺序 从简单到复杂:传统ML(Dense) → RNN(LSTM/GRU) → CNN(Conv1D) → 预训练编码器(USE) → 预训练微调(BERT/DeBERTa)
对比价值 快速定位性价比最高的模型方向,避免在低潜力模型上浪费时间
典型结论 USE等冻结式迁移学习往往性价比最高;传统ML在小数据上不比深度学习差太多

八、实验记录与结果管理

维度 说明
固定随机种子 交叉验证时固定数据划分,确保实验可复现
保存最优模型 每折训练时保存验证集F1最高的模型权重
实验日志 记录每次实验的超参数、验证集分数、线上分数
结果对比 将不同模型的验证集结果存下来,5折交叉验证的5份结果平均就是最终CV

九、随机种子与可复现性

维度 说明
种子设置 设置Python、NumPy、PyTorch的随机种子确保实验可复现
多种子训练 使用不同随机种子训练多个模型,增加模型多样性
融合收益 不同种子的模型融合能带来额外精度提升
对精度影响 对模型精度影响相对较小,不如学习率、Batch Size等参数影响大
调参建议 优先调整非Seed参数,Seed调优放在最后

十、学习率查找器(LR Finder)

维度 说明
核心思想 从极小学习率开始逐步增大,记录每个lr对应的Loss,找到Loss下降最快的区域
实现 fastai的lr_find()或torch_lr_finder库
使用方法 画出lr-Loss曲线,选择Loss下降最陡的lr的1/10作为初始学习率
优势 快速确定合理的学习率范围,避免盲目试错
注意事项 找到的lr是参考值,仍需在附近微调
竞赛经验 对新模型/新数据集不确定lr时,先用LR Finder快速定位

十一、分布式训练与混合精度

混合精度训练(FP16/BF16)

维度 说明
核心思想 前向传播用FP16加速,反向传播用FP32保持精度
显存节省 约50%
速度提升 30%~50%(需GPU支持Tensor Core)
BF16优势 动态范围更大,不易溢出,A100/H100支持
实现 torch.cuda.amp.autocast() + GradScaler()
必须配合 梯度截断防止FP16下梯度溢出

分布式训练

方式 说明 适用场景
DataParallel 单机多卡,数据并行 多GPU单机
DistributedDataParallel 多机多卡,通信效率更高 多GPU多机
DeepSpeed ZeRO优化,支持更大模型 超大模型训练
FSDP PyTorch原生分片并行 替代DeepSpeed

十二、Code Submission内存管理

维度 说明
进程隔离 不同模型推理使用独立进程,推理完毕释放内存
最优模型提取 只加载当前需要的模型权重,不同时加载所有模型
长句拆分 超长文本按500字符拆分推理,避免显存溢出
F1排序衰减权重 按各折F1分数排序,高F1模型赋予更高融合权重

十六、ONNX 推理优化

维度 说明
核心思想 将模型导出为 ONNX 格式,使用 ONNX Runtime 进行推理加速
优势 CPU 推理速度提升 30%~50%,内存占用更低
实现方式 torch.onnx.export() 导出模型,onnxruntime.InferenceSession() 推理
优化级别 图优化、算子融合、量化(INT8/FP16)
适用场景 Kaggle CPU 推理、时间限制严格的提交
竞赛价值 90 分钟限制内完成全量推理的关键技术

十七、渐进式降级(Progressive Degradation)

维度 说明
核心思想 当 commit 失败(超时/内存溢出)时,按预设顺序关闭组件
降级策略 按内存/计算风险从低到高依次关闭
典型顺序 batch_files: 8→4 → USE_MLP_PROBES=False → USE_BIRDNET_FORCE_OFF=True
优势 确保提交成功的同时保留尽可能多的预测组件
适用场景 Kaggle 时间/内存限制、多组件集成方案
竞赛价值 高分方案的内存安全设计必备

十八、分数恢复策略

维度 说明
问题背景 过度精简的组件(如 ProtoSSM、TTA、MLP 探针)导致分数下降
核心思想 恢复被移除的分数敏感组件,平衡性能与资源消耗
恢复组件 ProtoSSM 时序模型、完整 Proto TTA、MLP 探针集成、BirdNET 混合
实现方式 默认开启核心组件,commit 失败时渐进式降级
适用场景 高分方案优化、分数恢复
竞赛价值 LB 0.947-0.948 系列的核心策略