📑 本页目录(点开跳转)
- 🎯 一句话
- 一、Warmup机制
- 二、梯度截断(Gradient Clipping)
- 三、梯度累加(Gradient Accumulation)
- 四、学习率调度器(Scheduler)
- 五、Multi-Dropout / Multi-Sample Dropout
- 六、对抗训练(FGM / PGD / AWP)
- 七、SWA(随机权重平均)
- 八、对比学习(Contrastive Learning)
- 九、早停法与模型检查点
- 十、EMA(指数移动平均)
- 十一、知识蒸馏基础
- 十二、训练稳定性综合保障
- 十三、模型收敛问题排查
- 十四、显存优化综合策略
- 十五、R-Drop(一致性正则)
- 十六、FreeLB(对抗训练升级)
- 十七、SAM(Sharpness-Aware Minimization)
- 十八、Lookahead Optimizer
- 十九、渐进式解冻(Gradual Unfreezing)
- 二十、课程学习(Curriculum Learning)
- 二十一、Flooding
- 二十二、Stochastic Depth / DropPath
- 二十三、梯度中心化(Gradient Centralization)
- 二十四、Weight Standardization
- 二十五、LayerScale
- 二十六、半监督训练方法
- 二十七、竞赛常用损失函数补充
- 二十八、Mixup/CutMix的正则化视角
- 🔗 这一章连到哪里
- ✅ 检查点
- 🛑 可以停在这里
训练策略与正则化
⏱ 45 分钟 | ⭐ 深度学习赛的工具箱
🎯 一句话
这一章是一个工具箱清单,不是要你全用上。真正的顺序是:先让模型能正常收敛(Warmup / 梯度截断 / 学习率调度),再考虑加正则(对抗训练 / R-Drop / SWA)。在模型还训不稳的时候堆花式技巧,只会让你分不清是哪个环节出的问题。
一、Warmup机制
1.1 基本原理
| 维度 | 说明 |
|---|---|
| 问题背景 | 大模型训练极易发生Loss爆炸(训飞),即第一轮还有Evaluation结果,第二轮第三轮直接变成零 |
| 实现方式 | 设置0.1到0.2的比率,让学习率从0缓慢爬升,给予底层参数缓冲的时间 |
| 核心目的 | 实现前后层同步优化,防止训飞 |
1.2 深度原理
| 维度 | 说明 |
|---|---|
| 学习率曲线 | Warmup使学习率先从零升高到一个预定最大值,然后再下降 |
| 深层网络问题 | BERT Base有12层,梯度回传是从后向前的过程 |
| 梯度消失现象 | 如果一开始学习率设得较大,靠近输出端的权重更新得特别好特别快,但前面靠近输入的层因梯度消失没有更新好 |
| 训飞本质 | 模型后端在"不稳定的基础"上进行更新,就像盖房子没有建立好地基 |
| Warmup的作用 | 用较小学习率让后端权重更新慢一点,等待前端权重也逐步更新,实现"参数同化"过程 |
| Warmup比例 | 建议设置为总训练步数的0.1(10%),或大约1个Epoch |
| Scheduler Step | 每训练完一步后学习率进行相应变化,Warmup体现在Scheduler中 |
二、梯度截断(Gradient Clipping)
| 维度 | 说明 |
|---|---|
| FP16训练场景 | 开启FP16半精度训练时,梯度会变得特别大,不进行截断模型特别容易训飞 |
| FP32全精度场景 | 全精度训练时梯度大概每个Batch在0.8~0.9左右,加不加作用不大 |
| 阈值设置 | 建议设置为1,不需要设太大 |
| 额外收益 | 加上梯度截断能提高模型泛化能力,在验证集和Leaderboard上都有一定提升 |
| 与梯度累加配合 | 使用梯度累加时必须配合梯度截断,防止累加梯度爆炸 |
三、梯度累加(Gradient Accumulation)
| 维度 | 说明 |
|---|---|
| 问题背景 | 大型模型极大,普通显卡往往只能把Batch Size设为1 |
| 导致后果 | Batch Size为1会导致梯度更新方向剧烈震荡、难以收敛 |
| 解决方案 | 通过开启"梯度累加"(比如设为4),可以在低显存下模拟出Batch Size为4的平滑稳定训练效果 |
| 配套措施 | 配合梯度截断来防止累加的梯度爆炸 |
| 最终效果 | 保障模型精度 |
四、学习率调度器(Scheduler)
4.1 调度策略对比
| 策略 | 曲线特征 | 适用场景 | 参数 |
|---|---|---|---|
| 线性递减 | 线性下降 | 通用 | - |
| Cosine退火 | 平滑下降到最低 | 竞赛常用,比线性递减更优 | T_max, eta_min |
| Cosine退火+重启 | 周期性下降重启 | 跳出局部最优 | T_0, T_mult |
| OneCycleLR | 先升后降 | 快速收敛 | max_lr, pct_start |
| WarmUp + Cosine | 先升后降 | 大模型训练必备 | warmup_epochs |
4.2 分层学习率与逐层衰减
| 维度 | 说明 |
|---|---|
| 分层学习率 | 未经过预训练的层(如随机初始化的分类器或被替换的Embedding)应设置较高的学习率(如10^-4级别),而预训练主体应设置较低的学习率(如10^-5级别) |
| 逐层衰减 | 可更细粒度地逐层衰减学习率,如第12层最高,越浅层越低 |
| 适用场景 | 微调大型预训练模型时,不同层需要不同的学习率以平衡新旧知识 |
五、Multi-Dropout / Multi-Sample Dropout
5.1 核心原理
| 维度 | 说明 |
|---|---|
| 传统Dropout局限 | 一次前向传播只产生一个输出,一对一关系 |
| 核心思想 | 将Dropout视为数据扩充手段,在池化结果之后、分类层之前进行多次Dropout采样 |
| 实现方式 | 在BERT等模型提取出特征后,外接多个具有不同丢弃率的Dropout层 |
| 实现流程 | 同一个样本经过多次随机Dropout生成多个版本的向量表征,分别通过分类层得到多个Logits,最后求和或取平均 |
| 计算开销 | 网络主体已跑完,仅在最后全连接层做多次计算,额外开销相对整个网络较小 |
| 核心作用 | 能起到类似对比学习的作用,促进参数同化 |
| 收敛优势 | 相同训练时间内,Validation Set错误率曲线最终会降至传统Dropout下方,收敛更快 |
5.2 超参细节
| 维度 | 说明 |
|---|---|
| 更高的Dropout容忍度 | 由于该机制本质是内部集成了多个子网络的输出,模型可以承受比常规更大的Dropout Rate。常规设为0.1,应用此方法时提高到0.3甚至0.4反而能达到更优的泛化效果 |
| 采样次数 | 通常设置为4或8次即可(再高收益边际递减) |
| 融合方式 | 得到多个Logits后,可以直接求和(Sum)进入Softmax,不一定非要取平均(Average) |
六、对抗训练(FGM / PGD / AWP)
6.1 FGM
| 维度 | 说明 |
|---|---|
| 实现方式 | 在模型梯度下降的相反方向上,人为对Word Embedding(词嵌入层)施加扰动噪声 |
| 核心目的 | 迫使模型在带有恶意干扰的情况下依然能做出正确预测 |
| 本质作用 | 作为一种正则化手段来抵抗过拟合和提高抗干扰能力 |
6.2 PGD(投影梯度下降)
| 维度 | 说明 |
|---|---|
| 与FGM区别 | 相比FGM的单步直接扰动,PGD采用"多步走并限制在球内"策略 |
| 投影操作 | 每走一小步(步长为alpha),如果扰动超出设定的半径epsilon球面,就强行将其"投影"拉回到球面上 |
| 优势 | 生成质量更高的对抗样本 |
6.3 对抗训练进阶设定
| 维度 | 说明 |
|---|---|
| 攻击目标层扩展 | 不仅攻击word_embeddings,还可配置同时攻击BERT的头几层(如第0层、第1层)的参数 |
| 对抗执行比例(Attack Ratio) | 对抗训练会导致训练耗时翻倍,可设置执行比例(如0.5),即只有50%的迭代步数进行对抗扰动更新,剩下50%使用干净样本常规更新,兼顾速度与鲁棒性 |
七、SWA(随机权重平均)
| 维度 | 说明 |
|---|---|
| 问题背景 | 防止单次验证集保存的最佳模型出现"有偏估计" |
| 实现方式 | 在训练末期的最后几个Epoch内维持一个较高的固定学习率进行额外训练 |
| 权重处理 | 将这几个Epoch生成的模型权重(Checkpoints)进行算术平均 |
| 最终效果 | 作为最终更加稳健的融合权重 |
| CV中的应用 | 训练末期最后5~10个epoch,维持较高固定学习率,对权重取算术平均;有交叉验证时SWA收益更明显 |
八、对比学习(Contrastive Learning)
8.1 有监督对比学习
| 维度 | 说明 |
|---|---|
| Supervised Contrastive Learning | 利用标签信息将具有相同标签的样本在向量空间中拉近,不同标签的推远,为分类器提供更好的特征表示 |
| 实现方式 | 在分类任务中直接增加对比学习损失,与交叉熵损失加权求和 |
8.2 SimCSE框架
| 维度 | 说明 |
|---|---|
| 核心方法 | 让同一句子两次通过带Dropout的BERT模型,利用Dropout的随机性产生两个不同表征作为正样本对,Batch内其他样本作为负样本 |
| 优势 | 实现更优雅,代码持续维护,优先使用SimCSE方案 |
8.3 ConSERT框架
| 维度 | 说明 |
|---|---|
| 核心方法 | 在Embedding层直接施加Dropout作为数据扩充,构造正负样本对进行对比学习 |
8.4 深度细节优化
| 维度 | 说明 |
|---|---|
| 引入标签特征(Label Embedding) | 将分类层的权重参数矩阵视作"类别的向量表征"加入对比学习损失计算 |
| 温度参数(Temperature)调优 | 通常基于经验选取0.5的效果会比0.07更好 |
| 构造困难负样本(Hard Negatives) | 故意抽取不同类别但极易混淆的句子作为困难负样本辅助训练 |
8.5 避免表征坍缩(Representation Collapse)
| 维度 | 说明 |
|---|---|
| 问题背景 | 普通BERT不做处理时,往往会将所有句子的相似度压缩在0.6~1.0之间,导致无法有效区分差异 |
| 坍缩表现 | BERT将所有句子编码到语义空间的某个局部区域,本质不同的句子完全无法区分 |
| 评估指标 | 利用Alignment(正样本对齐度)和Uniformity(整体分布均匀度)两个指标来评估模型 |
| SimCSE/ConSERT改进 | 能显著改善表征分布,使不同语义句子在向量空间中均匀分布 |
8.6 对比学习的级联迁移训练
| 维度 | 说明 |
|---|---|
| 第一阶段(外部有监督NLI预热) | 寻找外部开源的NLI数据集,利用标签明确的句子对进行第一波对比学习训练 |
| 第二阶段(领域内自监督迁移) | 将NLI任务上训练好的模型移步到赛题官方提供的无标签脱敏语料上,再进行一轮自监督的对比学习微调 |
| 核心优势 | 经过"外部知识注入→领域内适应→最终任务微调"的级联过程,句向量表征质量大幅超越单一数据集训练 |
九、早停法与模型检查点
| 维度 | 说明 |
|---|---|
| 早停法(Early Stopping) | 监控验证集性能,性能不提升时停止训练,防止过拟合 |
| 耐心值(Patience) | 设置等待轮数,如3-5轮无提升则停止 |
| 模型检查点 | 保存最佳模型权重,支持断点续训 |
| 多模型融合基础 | 保存多个检查点用于后续模型融合 |
十、EMA(指数移动平均)
| 维度 | 说明 |
|---|---|
| 核心思想 | 训练过程中维护一份模型参数的指数移动平均版本,推理时使用平均后的参数 |
| 更新公式 | shadow_param = decay * shadow_param + (1 - decay) * model_param,decay通常取0.999或0.9999 |
| 与SWA区别 | EMA是逐步累积平均,SWA是训练末期对几个checkpoint取算术平均 |
| 效果 | 平滑参数更新轨迹,提升泛化能力,在CV竞赛中广泛使用 |
| 适用场景 | 大模型微调、CV分类/检测任务 |
十一、知识蒸馏基础
| 维度 | 说明 |
|---|---|
| 核心思想 | 用大模型(Teacher)的输出概率分布指导小模型(Student)训练 |
| 软标签 | Teacher输出的概率分布比one-hot硬标签包含更丰富的类间关系信息 |
| 温度参数 | 蒸馏时提高softmax温度T(如T=4~20),使概率分布更平滑,传递更多暗知识 |
| 损失函数 | loss = alpha * KL(soft_teacher, soft_student) + (1-alpha) * CE(hard_label, student_output) |
| 适用场景 | Code Submission赛等对推理时间和内存有严格限制的比赛 |
| 与Self-Distillation区别 | Self-Distillation是同模型内部的知识迁移,传统蒸馏是跨模型的知识迁移 |
十二、训练稳定性综合保障
| 维度 | 说明 |
|---|---|
| Warmup比例 | 建议设置为总训练步数的0.1(10%),或大约1个Epoch |
| Scheduler选择 | Cosine调度器比线性递减更优,被比赛中广泛采用 |
| Dropout推理时关闭 | 推理时Dropout会自动关闭,训练时用了多个Dropout不影响推理一致性 |
| 断点续训 | 训练中断后直接加载模型权重进行Inference即可,不需要重新训练 |
| 数据打乱 | 增加随机性表现,提高网络泛化性能,避免batch数据过于有规律 |
十三、模型收敛问题排查
| 维度 | 说明 |
|---|---|
| 训飞表现 | 第一轮有Evaluation结果,第二轮第三轮Evaluation直接变成零 |
| 排查步骤 | 检查Warmup是否设置、梯度截断是否开启、学习率是否过大 |
| 解决方案 | 设置Warmup为0.1,开启Gradient Clipping,降低学习率 |
| 验证方法 | 观察训练Loss曲线是否平稳下降,验证集分数是否稳定 |
十四、显存优化综合策略
| 维度 | 说明 |
|---|---|
| 梯度检查点 | 训练时丢弃部分中间层的激活值,反向传播时重新计算,用"计算时间换显存",可提升Batch Size数倍 |
| 梯度累加 | 低显存下模拟大Batch Size训练效果 |
| FP16混合精度 | 部分计算使用FP16,关键计算保持FP32,显存占用减半,训练速度提升约30%-50%,必须配合梯度截断 |
| 模型卸载 | 将部分参数卸载到CPU,进一步降低显存占用 |
| 动态填充 | DataCollatorWithPadding按batch内最长填充,短文本训练加速75% |
| 组合使用 | 多种策略组合使用可在有限显存下训练更大模型 |
十五、R-Drop(一致性正则)
| 维度 | 说明 |
|---|---|
| 核心思想 | 同一样本两次前向传播(不同Dropout mask),用KL散度约束两次输出分布一致 |
| 与Multi-Sample Dropout区别 | Multi-Sample Dropout是对多次Dropout输出的Logits求和/平均;R-Drop是约束两次输出的概率分布尽量一致,多了输出一致性约束 |
| 损失函数 | loss = CE_loss + alpha * KL(p1 \|\| p2) + KL(p2 \|\| p1),双向KL取平均 |
| alpha权重 | 通常取1~5,需根据验证集调整 |
| 训练开销 | 每个样本需两次前向,训练时间约翻倍 |
| 适用场景 | NLP分类/NER任务,上分明显;与FGM等对抗训练可叠加 |
| 竞赛价值 | 简单有效,几行代码即可实现,NLP竞赛中常作为独立上分点 |
十六、FreeLB(对抗训练升级)
| 维度 | 说明 |
|---|---|
| 全称 | Free Large-Batch Adversarial Training |
| 与FGM/PGD区别 | FGM/PGD是单点扰动;FreeLB在扰动区间内取多个点的平均梯度,更稳定 |
| 核心方法 | 在Embedding周围epsilon球内均匀采样多个扰动点,对这些点的梯度取平均作为更新方向 |
| 优势 | 比FGM更稳定,比PGD更快(不需要多步迭代),BERT官方对抗训练方案 |
| epsilon取值 | 通常1e-5~1e-4,比FGM的扰动范围更小 |
| 与FGM关系 | 可视为FGM的平滑升级版,推荐在NLP对抗训练中优先尝试 |
十七、SAM(Sharpness-Aware Minimization)
| 维度 | 说明 |
|---|---|
| 核心思想 | 优化时同时关注loss值和loss曲面的平坦度,寻找平坦极小值,泛化更好 |
| 第一步 | 计算当前参数的梯度,找到扰动方向:epsilon = rho * grad / \|\|grad\|\| |
| 第二步 | 在扰动后的参数处重新计算梯度,用该梯度更新原始参数 |
| rho参数 | 控制对平坦度的关注程度,通常取0.05~0.1 |
| 计算开销 | 每步需要两次前向+反向,训练时间约翻倍 |
| 与FGM区别 | FGM是对输入加扰动做正则化;SAM是对参数加扰动寻找平坦极小值 |
| 竞赛价值 | CV竞赛近年热门,尤其在小数据集上效果显著 |
十八、Lookahead Optimizer
| 维度 | 说明 |
|---|---|
| 核心思想 | 在Adam等基础优化器外层包一层"前瞻"机制:先快步探索,再慢步确认 |
| 快权重(Fast Weights) | 基础优化器(如Adam)正常更新k步 |
| 慢权重(Slow Weights) | 将快权重和慢权重做线性插值:slow = slow + alpha * (fast - slow) |
| k值 | 通常5~10,即快权重走5~10步后慢权重同步一次 |
| alpha值 | 通常0.5,慢权重向快权重靠拢的比例 |
| 优势 | 几乎无额外计算开销,收敛更稳定,减少对学习率的敏感性 |
| 适用场景 | 通用,可与任何优化器组合,适合作为默认优化器增强 |
十九、渐进式解冻(Gradual Unfreezing)
| 维度 | 说明 |
|---|---|
| 核心思想 | 微调时先冻结预训练层只训练分类头,再逐层解冻,由顶向底逐步放开 |
| 与分层学习率区别 | 分层学习率是所有层同时训练但学习率不同;渐进式解冻是逐层放开训练,更保守 |
| 典型流程 | Epoch 1: 只训练分类头 → Epoch 2: 解冻最后2层 → Epoch 3: 解冻最后4层 → ... → 全部解冻 |
| 适用场景 | 小数据微调防灾难性遗忘,预训练模型与目标任务差异大时 |
| 竞赛价值 | 数据量少于1000条时效果明显,可防止微调初期大梯度破坏预训练表征 |
二十、课程学习(Curriculum Learning)
| 维度 | 说明 |
|---|---|
| 核心思想 | 先用简单样本训练,再逐步加入困难样本,模拟人类学习过程 |
| 难度定义 | 可按样本长度(短=简单)、预测置信度(高=简单)、标注一致性(一致=简单)等定义 |
| 实现方式 | (1) 预排序:训练前按难度排序,逐步加入;(2) 动态调整:每个epoch根据loss排序 |
| 与Anti-Curriculum对比 | Anti-Curriculum是先学困难样本,某些场景反而更优,需实验对比 |
| 适用场景 | 数据噪声大、样本难度差异大时有效 |
| 竞赛价值 | 数据质量参差不齐时可作为上分手段,但需额外实验验证 |
二十一、Flooding
| 维度 | 说明 |
|---|---|
| 核心思想 | 设定loss下限b,当训练loss低于b时将梯度取反,使loss在b附近波动,防止过拟合 |
| 公式 | loss = \|\|loss - b\|\| + b,即loss > b时正常下降,loss < b时反弹 |
| b值选取 | 通常取训练loss即将收敛时的值,如0.01~0.1 |
| 本质 | 类似隐式正则化,阻止模型过度拟合训练数据 |
| 优势 | 实现极简(一行代码),可与任何优化器/调度器组合 |
| 竞赛价值 | 简单有效,适合后期冲刺时防止过拟合 |
二十二、Stochastic Depth / DropPath
| 维度 | 说明 |
|---|---|
| 核心思想 | 训练时以概率p随机跳过整个残差块(直接用恒等映射),推理时使用全部层 |
| 与Dropout区别 | Dropout跳过神经元;DropPath跳过整个残差块/层,粒度更大 |
| 生存概率 | 浅层概率高(接近1),深层概率低(如0.5),线性衰减:p_l = 1 - l/L * (1 - p_L) |
| 适用场景 | ViT/DeiT/Swin Transformer等深层模型训练标配 |
| 竞赛价值 | CV竞赛中使用ViT系列模型时必用,不设DropPath深层ViT极易过拟合 |
| 典型取值 | 最大丢弃率p_L通常0.1~0.3(分类),0.2~0.5(检测/分割) |
二十三、梯度中心化(Gradient Centralization)
| 维度 | 说明 |
|---|---|
| 核心思想 | 对梯度按特征维度做中心化(减均值),约束梯度均值为零 |
| 公式 | grad = grad - grad.mean(dim=0) |
| 优势 | 加速收敛 + 提升泛化 + 几乎零额外计算开销 |
| 实现位置 | 在optimizer.step()之前对梯度做中心化处理 |
| 适用场景 | 通用,一行代码即可集成,适合作为默认训练流程的一部分 |
| 竞赛价值 | 几乎无成本的正则化手段,适合快速实验 |
二十四、Weight Standardization
| 维度 | 说明 |
|---|---|
| 核心思想 | 对卷积层权重做标准化(减均值除标准差),替代对输入统计量的依赖 |
| 与BatchNorm区别 | BatchNorm依赖batch统计量,小BS时不稳定;WS只依赖权重自身,不受BS影响 |
| 公式 | W_hat = (W - mean(W)) / sqrt(var(W) + eps) |
| 适用场景 | 小Batch Size场景(如BS=1~4的大模型微调),WS+GN组合可替代BN |
| 竞赛价值 | 显存受限只能用小BS时,WS比BN更稳定 |
二十五、LayerScale
| 维度 | 说明 |
|---|---|
| 核心思想 | 在Transformer残差分支中加可学习的逐通道缩放因子,初始化为极小值(如1e-4) |
| 公式 | x = x + LayerScale * Attention(x),LayerScale初始化接近0 |
| 作用 | 训练初期残差分支贡献极小,等效于恒等映射,训练稳定;随训练推进缩放因子逐步增大 |
| 适用场景 | 深层ViT(>12层)训练稳定的关键,DeiT III等模型标配 |
| 竞赛价值 | 使用深层ViT/Swin时必加,否则深层模型训练不稳定 |
二十六、半监督训练方法
Mean Teacher
| 维度 | 说明 |
|---|---|
| 核心思想 | 维护一个EMA版本的模型作为Teacher,Student向Teacher的预测对齐 |
| Teacher更新 | teacher_params = alpha * teacher_params + (1-alpha) * student_params,alpha通常0.999 |
| 一致性损失 | L_consistency = MSE(student_output, teacher_output) |
| 优势 | Teacher参数更平滑,提供更稳定的伪标签 |
| 适用场景 | 时序/CV半监督竞赛,有大量无标签数据时 |
VAT(Virtual Adversarial Training)
| 维度 | 说明 |
|---|---|
| 核心思想 | 在对抗训练基础上扩展到无标签数据,对无标签样本施加最小扰动能改变输出的方向 |
| 与FGM区别 | FGM只用于有标签数据;VAT可用于无标签数据,不依赖标签计算对抗方向 |
| 局部平滑性 | VAT鼓励模型在输入空间局部邻域内输出平滑,提升泛化 |
| 适用场景 | 半监督+NLP,有大量无标签文本时 |
FixMatch
| 维度 | 说明 |
|---|---|
| 核心思想 | 强增强+弱增强结合:弱增强高置信预测作为伪标签,强增强做一致性约束 |
| 流程 | (1) 对无标签样本做弱增强,模型预测取高置信(>0.95)的作为伪标签;(2) 对同一样本做强增强,约束其预测与弱增强伪标签一致 |
| 关键参数 | 置信度阈值通常0.95,弱增强(翻转/平移),强增强(RandAugment/CutMix) |
| 适用场景 | CV半监督SOTA,图像分类+大量无标签数据 |
TSA(Training Signal Annealing)
| 维度 | 说明 |
|---|---|
| 核心思想 | 来自UDA,逐步释放训练信号,初期只用高置信样本,后期才用全部 |
| 阈值调度 | 随训练推进逐步提高阈值,低于阈值的样本才参与损失计算 |
| 作用 | 防止模型在训练初期被噪声标签误导 |
| 适用场景 | 小数据+大无标注语料的半监督场景 |
二十七、竞赛常用损失函数补充
ASL(Asymmetric Loss)
| 维度 | 说明 |
|---|---|
| 核心思想 | 对正负样本用不同gamma,比Focal Loss更适合多标签分类 |
| 非对称性 | 正样本gamma-(通常0),负样本gamma+(通常2~4),负样本被抑制更多 |
| 概率偏移 | 对负样本概率做偏移(概率人为降低),进一步抑制易分负样本 |
| 适用场景 | 多标签分类竞赛,正样本稀疏时 |
| 与Focal Loss对比 | Focal Loss对称处理正负样本;ASL专门针对多标签场景优化 |
Bi-Tempered Loss
| 维度 | 说明 |
|---|---|
| 核心思想 | 用两个温度参数分别处理outlier和噪声标签,比Label Smoothing更鲁棒 |
| t1(内温度) | 控制对outlier的容忍度,t1 > 1时对outlier更鲁棒 |
| t2(外温度) | 控制对噪声标签的容忍度,t2 < 1时对噪声标签更鲁棒 |
| 适用场景 | 噪声标签场景,标注质量差的数据集 |
| 竞赛价值 | 比Label Smoothing更精细的噪声标签处理方案 |
AUC Loss
| 维度 | 说明 |
|---|---|
| 核心思想 | 直接优化AUC指标的近似损失函数,替代交叉熵 |
| 实现方式 | 基于pairwise ranking loss,正样本得分应高于负样本得分 |
| 适用场景 | 评价指标为AUC时,直接优化目标指标 |
| 注意事项 | 训练开销比CE大(需采样正负对),通常先用CE预训练再切换AUC Loss微调 |
LDAM Loss(Label-Distribution-Aware Margin Loss)
| 维度 | 说明 |
|---|---|
| 核心思想 | 给小类更大的分类边界(margin),大类边界小,边界与类别频率的1/4次方成反比 |
| 公式 | margin_i = C / n_i^(1/4),n_i为类别i的样本数 |
| 与Focal Loss区别 | Focal Loss通过调整损失权重;LDAM通过调整分类边界,本质不同 |
| 适用场景 | 长尾分类,类别频率差异极大时 |
| 竞赛价值 | 长尾分类竞赛中与Focal Loss互补,可组合使用 |
二十八、Mixup/CutMix的正则化视角
| 维度 | 说明 |
|---|---|
| 数据增强视角 | Mixup/CutMix通常被归类为数据增强方法(见01章),但它们本质也是强正则化手段 |
| 正则化机制 | (1) 决策边界平滑化:混合样本迫使模型输出平滑过渡;(2) 隐式模型集成:每个混合样本等价于两个子网络的隐式平均;(3) 梯度噪声注入:混合比例lambda引入额外随机性 |
| 与Dropout对比 | Dropout是神经元级正则化;Mixup是样本级正则化,两者可叠加 |
| 与Label Smoothing对比 | Label Smoothing是标签级软化;Mixup是输入+标签同时软化,信息更丰富 |
| 竞赛建议 | 分类任务后期过拟合时,Mixup/CutMix + Label Smoothing + Dropout 三重正则化组合效果最佳 |
🔗 这一章连到哪里
| 去哪 | 为什么 |
|---|---|
| ML基础 10 正则化全家桶 | Dropout / 权重衰减 / 早停 / Mixup 为什么能防过拟合 |
| ML基础 09 优化器与学习率 | Warmup、余弦退火、Lookahead、SWA 都在改优化轨迹,先懂优化器再调它们 |
| ML基础 11 训练调试手册 | 梯度爆炸 / 不收敛 / loss 变 NaN 的系统排查法 |
| AI基础设施 09 显存优化全家桶 | 梯度累加、梯度检查点省的到底是哪块显存 |
✅ 检查点
- Warmup 为什么是深度学习赛的标配?
- 梯度截断和梯度累加分别解决什么问题?别搞混。
- 对抗训练(FGM/PGD/AWP)本质上在做什么?为什么它算正则化?
- SWA 和 EMA 有什么共同点?它们为什么几乎总能小幅提分?
- 模型训不动时,排查顺序应该是什么?
- 为什么说「在模型还没稳定收敛时就堆技巧」是错的?
👀 答案
- 因为训练初期参数是随机的、梯度方向不可靠,而 Adam 的二阶动量估计此时也还不准。大步走容易把模型直接带偏。先用极小的学习率试探几百步再升上去,训练稳定性明显改善。
- 梯度截断解决的是梯度爆炸(梯度范数太大就按比例缩小);梯度累加解决的是显存不够(攒 N 个小 batch 的梯度再更新一次,模拟大 batch)。一个管数值稳定,一个管硬件限制,完全无关。⚠️ 梯度累加最常见的 bug 是忘了把 loss 除以累加步数。
- 在输入或参数上加一个「最坏方向」的微小扰动,让模型在扰动下也能预测对。它算正则化是因为这等于要求模型在每个样本周围的一小片邻域内都稳定——也就是让决策边界远离训练样本,正是正则化的目标。
- 共同点:都是对训练轨迹上的多个权重做平均(SWA 平均若干检查点,EMA 做指数滑动平均)。几乎总能小幅提分是因为平均会把 SGD 的随机抖动抹掉,落到更平坦的极小值上,而平坦极小值泛化更好。而且它们几乎零成本。
- ①先在极小数据上看能不能过拟合(不能就是有 bug,别调参)②检查梯度是否在流、loss 是不是 NaN ③学习率是否离谱(试 1e-3/1e-4/1e-5 三档)④再看数据/标签对齐 ⑤最后才是加技巧。
- 因为你分不清是哪个环节出的问题。同时开着 Warmup、对抗训练、R-Drop、SWA,效果变差时你有四个嫌疑人。一次只加一样,每样都跑一次 CV 记录——这也是全站反复强调的「一次只改一个变量」。
🛑 可以停在这里
⚡ 走神救援
这章是工具箱清单不是必用清单。⭐正确顺序:先让模型能稳定收敛(Warmup / 梯度截断 / 学习率调度),再加正则(对抗训练 / R-Drop / SWA / EMA)——模型还训不稳时堆技巧,效果变差你会有四个嫌疑人。几个要点:Warmup 是因为初期梯度方向不可靠(Adam 的二阶动量也还不准);⚠️别把梯度截断和梯度累加搞混——前者管梯度爆炸,后者管显存不够(累加最常见的 bug 是忘了 loss 除以累加步数);对抗训练=在最坏方向加微小扰动仍要预测对,本质是要求决策边界远离样本,所以算正则;SWA/EMA 都是对训练轨迹上的权重做平均,抹掉 SGD 抖动落到平坦极小值,几乎零成本的小幅提分。训不动时的排查顺序:先在极小数据上看能不能过拟合→查梯度→查学习率→查标签对齐→最后才加技巧。