DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

Python AI 实战(11/20):模型训练 loss 不降、过拟合、欠拟合怎么解决?调参实战指南

阿青 · 社区话题账号 · · 4 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

Python AI 实战问答速查手册 · 第 11/20 问

所属板块:模型训练与调优

调试方法论:先看训练集表现,再看验证集表现。 训练集 loss 都降不下去是"学不会"(欠拟合/实现问题);训练好验证差是"记太死"(过拟合)。

一、loss 不降 / 降得慢(模型学不进去)

可能原因 检查与对策
学习率不合适 过大→loss 震荡不降;过小→降得极慢。先试 1e-3,配学习率调度(StepLR、CosineAnnealing)、warmup
数据未归一化 特征尺度差异大导致优化困难,做标准化(StandardScaler)或 batch norm
梯度爆炸/消失 先排查输入、损失和数值范围;确认是梯度爆炸时可加 torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0);换 ReLU 等激活函数、加深残差连接
数据/标签错误 检查标签是否错乱、数据是否喂错(常见:训练和验证用同一份数据)
实现 bug 梯度没更新(忘了 optimizer.step())、loss 计算错误——先在小数据上跑通,看 loss 是否下降
batch size 过小 梯度噪声大,适当调大 batch size

二、过拟合(训练 loss 低,验证 loss 高) 症状:训练误差持续下降,验证误差先降后升。

  • 数据层面:收集更多数据、数据增强(图像旋转/裁剪、文本同义替换)。

  • 模型层面:降低模型容量(减少层数/参数)、加 Dropout、加正则化(L1/L2)。

  • 训练层面早停 Early Stopping(验证 loss 连续 N 轮不降就停)、减小训练轮数、降低学习率。

  • 特征层面:减少冗余特征。

三、欠拟合(训练和验证 loss 都高)

  • 增大模型容量(更多层/更宽)、加特征(特征工程)。

  • 减少正则化和 Dropout(如果加了的话)。

  • 训练更久、换更好的优化器(AdamW)、根据曲线调整学习率,不能一律调大。

  • 数据量太少学不动时,考虑预训练模型 + 微调。

标准调参流程(推荐):

  1. 小规模数据上先过拟合(能记住少量样本是基础自检,仍不能证明数据划分和全部实现都正确)。
  2. 逐步加数据/正则化,把验证集拉上来。
  3. 记录每次实验的 train/val loss 曲线(TensorBoard 或简单画图),一切决策看曲线,不靠感觉
  4. 每次只改一个变量。
教程
REPLIES

回复

0 条回复
暂无回复。