快手面试题:样本不均衡问题

发布时间:2026/6/27 2:15:19

快手面试题:样本不均衡问题 题目在深度学习训练过程中如何解决样本不均衡问题解答在深度学习的训练过程中样本不均衡是一个非常常见且棘手的问题。它指的是数据集中不同类别的样本数量差异巨大会导致模型偏向于多数类忽视少数类。解决样本不均衡问题通常需要从数据层面、模型层面和损失函数层面三管齐下。以下是系统性的解决方案一、 数据层面这是最直接的方法核心是改变数据的分布让模型在训练时看到更均衡的类别。1. 重采样过采样随机复制少数类的样本使其数量与多数类持平。优点简单不会丢失信息。缺点容易导致过拟合因为模型记住了复制样本的细节缺乏泛化性。进阶使用SMOTE及其变种。SMOTE 通过在少数类样本之间进行插值来生成新的合成样本而不是简单复制能有效缓解过拟合。欠采样随机丢弃多数类的样本使其数量与少数类持平。优点减少了训练数据量加快了训练速度。缺点可能会丢失多数类中的重要信息。进阶使用Tomek Links或NearMiss等方法只删除那些对分类边界贡献不大的冗余多数类样本。混合采样先过采样再欠采样结合两者优点。2. 数据增强针对少数类如果少数类是图像、文本或语音可以对其进行特定的增强。图像对少数类图片进行旋转、裁剪、翻转、颜色抖动、CutMix 等生成更多样化的训练样本。文本进行回译、同义词替换等。这种方法往往比简单的过采样效果更好因为它引入了数据多样性。二、 损失函数层面不改变数据而是让模型在计算误差时意识到少数类样本分错的代价更大。1. 加权损失函数原理在计算损失如 CrossEntropyLoss时为不同类别赋予不同的权重。多数类的权重低少数类的权重高。权重设置通常设置为样本数的反比权重 总样本数 / (类别数 * 该类样本数)。或者使用中位数频率平衡等方法。实现PyTorch 的torch.nn.CrossEntropyLoss中自带weight参数TensorFlow 的class_weight参数。2. Focal Loss适用场景单阶段目标检测如 RetinaNet或极难样本分类。原理Focal Loss 在交叉熵损失的基础上增加了一个调制因子。它会降低易分类样本通常是多数类的损失贡献从而迫使模型关注难分类的样本通常是少数类。公式理念当样本被正确分类且概率很高时它的损失被大幅降低当样本被错分或概率不高时它的损失保留。3. OHEM原理在每个训练批次中不是对所有样本计算损失而是选出损失最高最难分的那一批样本进行反向传播。这些难分样本往往包含了少数类。三、 模型/训练策略层面1. 难例挖掘在训练过程中先用模型对样本进行预测找出那些预测错误的样本尤其是被预测为多数类的少数类样本将它们加入训练集或者加大这些样本在下一轮训练中的权重。2. 异常检测视角如果少数类占比极低如千分之一以下可以考虑放弃分类方法转而使用异常检测/单分类方法。方法训练一个自动编码器只学习多数类的特征当遇到少数类时其重构误差会很大据此来判断。3. 两阶段训练Stage 1在原始不均衡数据上正常训练让模型学到基本的特征分布。Stage 2对少数类进行过采样或重加权微调模型让模型调整决策边界更关注少数类。4. 集成学习平衡随机森林每个子模型在训练时都从多数类中随机抽取一部分并结合全部少数类进行训练。最后综合多个子模型的结果。四、 评估指标的调整在解决不均衡问题时千万不要只盯着 Accuracy准确率看。因为如果正负比是 991模型把所有样本判为负类准确率也有 99%但这个模型毫无价值。建议使用的指标混淆矩阵精确率召回率F1-score精确率和召回率的调和平均AUC-ROC总结建议在实际操作中通常按以下顺序尝试如果数据量较大尝试欠采样 集成学习或者直接使用加权损失函数这是最简单且效果不错的起点。如果数据量中等尝试SMOTE 过采样或数据增强。如果极度不均衡尝试Focal Loss或者考虑改用异常检测思路。评估时务必关注F1-score和召回率。

相关新闻