参数调优

第一层级:优化器核心参数

  • 学习率:每一步参数更新的步长缩放因子,控制损失函数梯度下降的幅度。通常采用指数衰减余弦退火。最佳学习率往往在模型“将崩未崩”的边缘(即Loss下降最快)。常用范围:1e-5(微调)到 1e-1(从头训练)。建议使用 LR Finder(学习率范围测试)先跑一轮,选Loss下降最陡的那段斜率对应的LR。
  • Batch Size:单次迭代中用于计算梯度并更新参数的样本数量。决定了梯度的稳定性。显存允许下尽量大,但大的Batch Size会损害泛化性(容易掉进尖锐最小值)。经验法则:如果增大Batch Size,需要同步增大学习率(线性缩放法则:Batch Size翻倍,LR近似翻倍)。
  • 优化器选择(SGD, Adam, AdamW, RMSprop):用于更新网络权重以最小化损失函数的算法。CV(计算机视觉)首选SGD + Nesterov动量(泛化性好);NLP(自然语言处理)和大模型首选AdamW(收敛快)。Adam对LR不那么敏感,但需注意其L2正则化失效问题,所以必须用AdamW。
  • 动量:在梯度更新中引入历史梯度的指数加权平均,以加速收敛并抑制震荡。通常设为 0.90.99。用于加速收敛和冲出局部极小值。

第二层级:正则化与结构参数(防止过拟合)

  • Weight Decay:在损失函数中添加权重的L2范数惩罚项,迫使权重向零收缩,抑制过拟合。大模型推荐 0.10.01;小模型推荐 1e-45e-5注意:AdamW的Weight Decay要和Learning Rate解耦,通常设得比SGD大一些。
  • Dropout Rate:训练过程中,每层神经元被随机置零的概率。输入层用 0.2,隐藏层用 0.5NLP中(如Transformer)常用 0.1。如果验证集Loss远高于训练集,逐步增大Dropout;如果欠拟合,先关掉Dropout。
  • Label Smoothing(标签平滑):将硬标签(one-hot)替换为软标签,降低对正确类别的绝对置信度,防止过拟合。通常设为 0.050.1
  • 梯度裁剪:RNN/Transformer常用 1.0。防止梯度爆炸。如果训练中出现NaN,这是首要检查项。

第三层级:训练长度与调度策略(决定何时停)

  • Epochs:完整遍历一次全部训练数据集的过程。没有固定值。采用 Early Stopping(早停法),Patience(耐心值)通常设为 10-30 个Epoch。
  • 学习率调度器:当验证集性能在给定轮次内不再提升时,提前终止训练。
    • StepLR:每N个Epoch衰减 0.1(简单粗暴)。
    • CosineAnnealingLR(余弦退火):当前最主流,适用于大模型,能在后期以极低LR微调。
    • Warmup Steps(预热):训练初期,学习率从零线性或非线性增长至目标值的迭代步数。前 5%-10% 的迭代步数,LR从0线性增长到目标LR。这是现代大模型训练的必选项,防止初期梯度震荡。
  • Warmup Ratio:通常为总步数的 0.030.1

第四层级:初始化与数据流

  • 权重初始化方法(Xavier, He/Kaiming, Zero):训练开始前,为网络各层参数赋予初始值的策略(如He初始化、Xavier初始化)。ReLU系列激活函数必须用He初始化;Sigmoid/Tanh用Xavier。如果用了错误的初始化,深层网络根本不会收敛。
  • Embedding 维度:经验公式 dim ≈ 4 * sqrt(vocab_size),但更常见的是直接取 64, 128, 256, 768 等2的幂次(硬件计算更高效)。
  • 数据增强参数(CV中):
    • 如随机裁剪尺度、旋转角度、色彩抖动幅度。
    • 增强强度要和模型容量匹配。小模型扛不住太强的增强(会欠拟合),大模型需要极强的增强来提升鲁棒性。

第五层级:高级/架构特定参数

  • 混合精度训练混合精度缩放因子在FP16训练中,对损失值进行缩放以维持小梯度数值精度的系数。通常设为 2^15 或动态缩放,防止梯度下溢。
  • EMA(指数移动平均):对模型权重按指数衰减率进行滑动平均,用于生成更稳定的推理模型。衰减率 0.9990.9999。对最终模型权重做平滑,能稳定提升验证集精度。
  • 知识蒸馏温度:软化Softmax输出概率分布的缩放系数,温度越高,类别间概率分布越平滑。T 通常设为 320。温度越高,软标签越平滑。
  • Transformer 特定:注意力头数、前馈网络维度倍数(通常为4倍)。

总结

  1. 先粗后细:先用大范围网格搜索找最优区间,再用贝叶斯优化或随机搜索精细调整。
  2. 固定随机种子:确保每次实验可复现(seed=422024),排除随机性干扰。
  3. 从简开始:先关掉所有正则化(Dropout=0, WD=0),让模型过拟合一个Batch(证明模型代码无误且有拟合能力),再逐步添加正则化。
  4. Log 一切:不仅看Loss,要看梯度范数(Gradient Norm)——如果范数>10,说明梯度爆炸;如果<1e-5,说明梯度消失。
  5. 缩放定律:对于大模型,模型大小、数据量、计算量三者遵循幂律关系。如果你的算力有限,优先增大Batch Size学习率,而不是增加层数。

模型指标

一、常见模型指标

通常我们把这些指标分为回归任务分类任务两大类。

1. 回归任务(预测连续值)
  • MAE (平均绝对误差):预测值与真实值之间绝对误差的平均值。
    • 定义:$ \frac{1}{n}\sum |y_{true} - y_{pred}| $
    • 特点:对离群点不敏感,反映的是平均误差幅度
  • MSE (均方误差):预测值与真实值误差平方的平均值。
    • 定义:$ \frac{1}{n}\sum (y_{true} - y_{pred})^2 $
    • 特点:对离群点(大误差)非常敏感,放大极端错误。
  • RMSE (均方根误差):MSE 的平方根。
    • 定义:$ \sqrt{MSE} $
    • 特点:量纲与原始数据一致,比 MSE 更直观。
  • R² (决定系数):模型解释了多少比例的目标变量方差。
    • 定义:$ 1 - \frac{\sum (y_{true} - y_{pred})^2}{\sum (y_{true} - \bar{y})^2} $
    • 特点:最大为1,越接近1拟合越好,负数表示比直接取均值还差。
2. 分类任务(预测离散标签)
  • Accuracy (准确率):所有预测中,猜对的比例。
    • 定义:$ \frac{TP + TN}{TP + TN + FP + FN} $
    • 注意数据不平衡时失效(比如95%是负例,全猜负例就有95%准确率)。
  • Precision (精确率/查准率):预测为正例的样本中,实际有多少是真正的正例。
    • 定义:$ \frac{TP}{TP + FP} $
    • 场景宁缺毋滥(如垃圾邮件拦截,误拦正常邮件比漏拦严重)。
  • Recall (召回率/查全率):实际为正例的样本中,被模型捡回来多少。
    • 定义:$ \frac{TP}{TP + FN} $
    • 场景宁可错杀一千(如癌症筛查,漏诊比误诊严重)。
  • F1-Score:Precision 和 Recall 的调和平均。
    • 定义:$ 2 \times \frac{Precision \times Recall}{Precision + Recall} $
    • 特点:兼顾两者,类别不平衡时的首选综合指标。
  • AUC-ROC:ROC曲线下的面积。
    • 定义:横轴为 FPR(假阳性率),纵轴为 TPR(真阳性率),AUC 衡量模型把正例排在负例前面的概率。
    • 特点对阈值不敏感,衡量模型排序能力。0.5=随机猜测,0.9+优秀。

二、指标不达标,如何调整超参数?

核心原则:先看“偏差(Bias)”和“方差(Variance)”的诊断图,再动手调参。不要盲目乱调。

场景 A:训练集表现很差(高偏差 / Underfitting)

现象:训练集 Loss 很高,Accuracy 很低;验证集和训练集差距不大(都很差)。
诊断:模型太简单,没学到东西。

  • 调整策略(由重到轻)
    1. 增加模型容量
      • 树模型:调高 max_depth(最大深度),调低 min_samples_split(分裂所需最小样本数)。
      • 神经网络:增加 隐层神经元数量网络层数
    2. 特征工程:检查输入特征是否足够,考虑增加特征交叉或多项式特征。
    3. 减小正则化强度
      • L1/L2减小 lambdaalpha 值。
      • Dropout减小 dropout rate(如从0.5降到0.2)。
      • 树模型减小 subsample(采样率)的反向操作,即增大采样率到1.0。
    4. 学习率(神经网络):如果 Loss 下降停滞,可以适当增大 learning_rate 并配合 Warm-up,或者改用自适应优化器(Adam)。

场景 B:训练集很好,验证集很差(高方差 / Overfitting)

现象:训练集准确率 99%,验证集准确率 80%。
诊断:模型把训练集的噪声记住了,泛化能力弱。

  • 调整策略(优先选前3个)
    1. 增强正则化(首选)
      • L1/L2增大 lambdaalpha 惩罚系数。
      • 神经网络增大 Dropout 比例(如从0.2调到0.5);加入 Batch Normalization
      • 树模型减小 max_depth增大 min_child_weightmin_samples_leaf(让叶子节点更大)。
    2. 早停法 (Early Stopping):将 patience(容忍轮数)调小(如从10调为5),验证集不涨就立即停。
    3. 降低模型复杂度:树模型减少 num_estimators(树棵数)但配合较小的学习率;神经网络减少隐层宽度/层数。
    4. 数据增强:增加训练数据量(如果算力允许),或对图像/文本做 Augmentation。
    5. 学习率减小 learning_rate(配合增大迭代轮数),让模型收敛更平稳,避开局部噪声极值。

场景 C:验证集表现平稳,但特定业务指标不行
  • Precision(精确率)偏低(误报太多):

    • 调整阈值:将分类概率阈值 调高(如从0.5调到0.7)。注意:这会牺牲 Recall。
    • 调整损失函数:在 Loss 中给 FP(假阳性) 更大的惩罚权重。
    • 采样:减少负例的过采样,或增加正例的欠采样难度。
  • Recall(召回率)偏低(漏报太多):

    • 调整阈值:将分类概率阈值 调低(如从0.5调到0.3)。
    • 调整损失函数:在 Loss 中给 FN(假阴性) 更大的惩罚(class_weight='balanced' 或设置 pos_weight)。
    • 采样策略:对少数类(正例)进行 过采样 (SMOTE),或对多数类进行欠采样。
  • AUC 偏低(排序能力差):

    • AUC 对阈值不敏感,说明模型根本分不清好赖。此时不要调阈值
    • 需要强化特征工程,加入强关联特征;或者更换模型(如从逻辑回归换为 XGBoost / LightGBM)。

场景 D:Loss 曲线震荡,不收敛(针对神经网络/SGD)
  • 学习率过大减小 learning_rate(通常除以10试试)。
  • Batch Size 太小增大 batch_size,让梯度方向更稳定。
  • 梯度爆炸:开启 梯度裁剪 (Gradient Clipping),或使用更小的学习率。

更多推荐